Рассмотрим как скомпилировать, прошить и отладить простой проект. 

Для начала нужны пакеты:

gcc-msp430 - компилятор C для архитектуры MSP430
binutils-msp430 - некоторые бинарные утилиты для MSP430, сюда входят ассемблер и сборщик
msp430-libc  - стандартная библиотека C для разработке под MSP430 
msp430mcu - хедеры и скрипты для компоновки
mspdebug - для программировани и отладки

Arch Linux они есть в пользовательском репозитарии AUR. В убунту-подобных системах пакеты имеют такое же название но находятся в основных репозитариях в бинарном виде.

Я устанавливаю с помощью йогурта - yaourt (скрипт который автоматически компилирует и устанавливает пакеты из AUR). Итак:

yaourt -S gcc-msp430 msp430-libc msp430mcu mspdebug

Пакет binutils-msp430 будет автоматически устанаовлен при установке gcc-msp430. Сборка пакетов займет определенное время. 

Проект создадим без использования какой либо среды разработки, будем использовать текстовый редактор и Makefile. Первым делом создадим простенький исходник:

#include <msp430.h> 
void main(void)
{
    WDTCTL = WDTPW + WDTHOLD;       // Stop WDT
    BCSCTL1 = CALBC1_1MHZ;          // Set DCO to 1.1 MHz
    DCOCTL = CALDCO_1MHZ;
    P1DIR = BIT0;                   // P1.0 to out
    while (1) {
          P1OUT ^= BIT0;            // Switch led state
          __delay_cycles(1100000);  // Delay for 1 sec
    }
} 

Вторым создадим мейкфайл(обязательно в том же каталоге):

CC=msp430-gcc
CFLAGS=-Os -g -mmcu=msp430g2553
SOURCE=ledblink
all: debug
compile:
    $(CC) $(CFLAGS) -o $(SOURCE).elf $(SOURCE).c 
clean:
    rm -rf *.elf
debug: compile
    mspdebug rf2500 "prog $(SOURCE).elf"

Обратите внимание что отступы(там их три штуки) в мейкфайле должны быть не пробелами, а табуляциями, то есть если вы просто скопируете этот код он не заработает.  Выполняем  make в консоле в каталоге с исходником. Получаем мигающий светодиод и вывод в консоль: 

msp430-gcc -Os -g -mmcu=msp430g2553 -o ledblink.elf ledblink.c 
mspdebug rf2500 "prog ledblink.elf"
MSPDebug version 0.20 - debugging tool for MSP430 MCUs
Copyright (C) 2009-2012 Daniel Beer <[email protected]>
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Trying to open interface 1 on 014
Initializing FET...
FET protocol version is 30394216
Configured for Spy-Bi-Wire
Set Vcc: 3000 mV
Device ID: 0x2553
  Code start address: 0xc000
  Code size         : 16384 byte = 16 kb
  RAM  start address: 0x200
  RAM  end   address: 0x3ff
  RAM  size         : 512 byte = 0 kb
Device: MSP430G2553/G2403
Code memory starts at 0xc000
Number of breakpoints: 2
Chip ID data: 25 53
Erasing...
Programming...
Writing  120 bytes at c000 [section: .text]...
Writing   32 bytes at ffe0 [section: .vectors]...
Done, 152 bytes total
Press ENTER or type command to continue

Ну и краткий ликбез по мейкфайлам, если вы не в теме=)

Значит на пальцах о главном: Мейкфайл просто описывает команды, которые будут выполнены при вызове команды make в том же каталоге где расположен этот файл. 

В мейкфайле есть цели, каждая цель описывается в формате:

<цель>:
<tab><команды>

Что бы выполнить цель нужно указать её при вызове make. То есть если в консоле выполнить:
make <цель>  то будут выполнены команды для этой цели. Если ни чего не передать будет выполнена цель c именем all (она всегда обязательна!).

Например есть 3 цели:

<цель 1>:
<tab><команды 1>

<цель 2>:
<tab><команды 2>

all:
<tab><команды 3>


  • Если напишем в консоле make <цель 1> выполнятся одна за одной <комманды 1>,
  • если make <цель 2> то <комманды 2>,
  • если напишем просто make, то <комманды 3>.

Цели могут зависить одна от другой. На примере:

<цель 1>: <цель 2>
<tab><команды 1>

<цель 2>:
<tab><команды 2>


Тут <цель 1> зависит от цели 2, то есть при попытке выполнить <цель 1>, сначала выполнится <цель 2>, и только после этого  <цель 1>

Ну и последнее - можно объявлять строковые переменные, а потом их подставлять в команды:

<var>=<value>

А потом подставлять их в командах с помощью $(<var>)