MSPGCC

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

MSPGCC ist ein kostenloser, unbeschränkter C-Compiler für die MSP430-Mikrocontroller von TI. Die Portierung auf MSP430 wurde von Chris Liechti und Dmitry Diky durchgeführt.

Dokumentation

Beispielprogramme

Für MSPGCC sind umfangreiche Beispielprogramme (LCD-Ansteuerung, TCP/IP, ...) verfügbar, außerdem wurden alle TI-Appnotes (C und Assembler) von Steve Underwood für MSPGCC angepasst.

Windows-Version

Installationsanleitung für Unix/Linux/Cygwin

su

mkdir /tmp/mspgcc
cd /tmp/mspgcc

#binutils

wget ftp://sources.redhat.com/pub/binutils/releases/binutils-2.14.tar.bz2
tar xjvf binutils-2.14.tar.bz2

cd binutils-2.14
./configure --prefix=/usr/local/msp430 --target=msp430
make
make install
cd ..

export PATH=/usr/local/msp430/bin:$PATH

#gcc

wget ftp://gcc.gnu.org/pub/gcc/releases/gcc-3.2/gcc-core-3.2.3.tar.bz2
tar xjvf gcc-core-3.2.3.tar.bz2

cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/mspgcc login
cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/mspgcc co gcc/gcc-3.3
cp -r gcc/gcc-3.3/* gcc-3.2.3/

cd gcc-3.2.3
./configure --prefix=/usr/local/msp430 --target=msp430
make
make install
cd ..

#msp430-libc

cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/mspgcc login
cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/mspgcc co msp430-libc

cd msp430-libc/src
make
make install
cd ../..

#gdb

wget gdb-6.0.tar.bz2
tar xjvf gdb-6.0.tar.bz2

cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/mspgcc login
cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/mspgcc co gdb/gdb-current
cp -r gdb/gdb-current/* gdb-6.0/

cd gdb-6.0
./configure --prefix=/usr/local/msp430 --target=msp430
make
make install
cd ..

#JTAG
cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/mspgcc login
cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/mspgcc co jtag

cd jtag/hardware_access
make
mv libHIL.so /usr/local/lib
ldconfig
cd ../..

#gdbproxy

wget http://twtelecom.dl.sourceforge.net/sourceforge/mspgcc/msp430-gdbproxy
chmod +x msp430-gdbproxy
mv msp430-gdbproxy /usr/local/msp430/bin/

Installations-Skript

Für Installation/Update gibt es hier ein bash Skript, das nach dem Starten (und einmal Return zum Downloaden der Sourcen aus dem CVS) das Installieren automatisch erledigt. Eingebaut sind auch die Anpassungen von ~/.profile und ~/.gdbinit, so dass man sofort loslegen und auch Debuggen kann.

Getestet ist es bisher nur unter SuSE Linux, aber auch wenn man es anpassen muß ist es besser als manuell zu Installieren, denn damit spart man sich Zeit und Fehler z.B. durch Vertippen.

Einfaches Beispielprogramm

#include <io.h>
void wait(void);         //prototype for wait()
int main(void)
{
  P1DIR=0xFF;            //port 1 = output
  P1OUT=0x01;            //set bit 0 in port 1
 
  for(;;) {              //infinite loop
    P1OUT=~P1OUT;        //invert port 1
    wait();              //call delay function
  }
}
void wait(void)          //delay function
{
  volatile int i;        //declare i as volatile int
  for(i=0;i<32000;i++);  //repeat 32000 times
}

Das Programm wird mit folgenden Befehlen kompiliert:

Sourcecode für msp430x1121 kompilieren:
msp430-gcc -Os -mmcu=msp430x1121 -o test1.elf test1.c
Assemblerlisting erzeugen (optional):
msp430-objdump -DS test1.elf > test1.lst
Hex-Datei erzeugen:
msp430-objcopy -Os ihex test1.elf test1.hex

Die Hex-Datei kann man mit C-Spy (im Kickstart-Paket enthalten) über das JTAG-Interface in den Controller programmieren. Nachdem einem Klick auf "Go" läuft das Programm los. Wenn 2 LEDs an P1.0 und P1.1 angeschlossen sind, sollten sie nun blinken.

In-System-Debugging mit GDB/Insight und dem Flash Emulation Tool (FET)

Wie bei anderen MSP430-Compilern ist es möglich mspgcc-Programme direkt in der Schaltung zu debuggen. Alles was man dazu braucht ist ein JTAG-Adapter, mdp430-gdbproxy, und gdb (im aktuellen Windows-Paket bereits enthalten). Kompilieren

Um ein Programm mit GDB/Insight debuggen zu können, muss man die Option "-g" an den mspgcc-Aufruf anhängen:

msp430-gcc -mmcu=msp430x123 -g -O -o test.elf test.c

Damit erhält man die Datei "test.elf".

gdbproxy starten

Der nächste Schritt ist das Programm gdbproxy zu starten, das für die Kommunikation zwischen GDB und dem FET zuständig ist:

msp430-gdbproxy --port=2000 msp430

Wenn das FET richtig an den Parallelport angeschlossen ist, sollte ungefähr der folgende Text angezeigt werden:

info: msp430: Target device is a 'MSP430F12x' (type 11) notice: msp430-gdbproxy: waiting on TCP port 2000

Insight benutzen (Windows)

Nachdem Insight gestartet ist (c:\msp430\bin\msp430-gdb.exe), klicke auf "File->Open" und wähle die elf-Datei (z.B. "test.elf") aus die du debuggen möchtest.

Klicke dann auf "Run->Connect to target" und stelle folgendes ein:

  Target:                   "Remote/TCP"
  Hostname:                 "localhost"
  Port:                     "2000"
  Set breakpoint at 'main':  yes
  Set breakpoint at 'exit':  yes
  Attach to target:          yes
  Download Program:          yes
  Command  after attaching:  "monitor erase all"
  Run Method:                Continue from last Stop

Wenn man auf "Ok" klickt sollte Insight berichten dass die Verbindung erfolgreich aufgenommen wurde, und gdbproxy sollte melden: "notice: msp430-gdbproxy: connected".

Um den Debugging-Vorgang zu starten klicke auf "Run" or drücke einfach die Taste "r". Wenn alles geklappt hat sollte nun den Sourcecode des Programmes angezeigt werden und die erste Zeile von main() grün markiert sein. Der rote Punkt ist der Breakpoint der von Insight automatisch gesetzt wurde. Um selber Breakpoints zu setzen oder zu löschen klicke auf den Strich '-' am Anfang der Zeile.

Jetzt kann man mit 'c' (continue) das Programm zum nächsten Breakpoint fortsetzen, die Zeilen mit 's' (step) der Reihe nach ausführen, oder einzelne Assemblerbefehle ausführen... aber Vorsicht mit "finish": anscheinend hängt sich Insight manchmal bei diesem Befehl auf. Wenn man also eine Funktion beenden will ist es wohl besser einen Breakpoint auf das Ende der Funktion zu setzen und "continue" zu verwenden.

DDD benutzen (Unix/Linux)

Leider läuft Insight nicht besonders stabil und ist auch etwas umständlich zu bedienen. Wer Unix bzw. Linux verwendet, der ist deshalb mit DDD (http://www.gnu.org/software/ddd/) besser bedient. Um DDD zu verwenden braucht man msp430-gdbproxy und die Kommandozeilen-Version von GDB (msp430-gdb).

Zuerst stellt man wie unter Windows über gdbproxy eine Verbindung zum JTAG-Adapter her. Wenn das funktioniert hat kann man DDD starten. Als Parameter wird der zu verwendende Debugger (msp430-gdb) und die zu ladende ELF-Datei (test.elf) übergeben:

ddd --debugger msp430-gdb test.elf

Zunächst sollte man nun unter "Commands / Edit Buttons" ein paar Buttons anlegen, indem man die folgenden Zeilen in das Textfeld bei "Console Buttons" einfügt:

target remote localhost:2000 // Connect
monitor erase all // Erase
load // Load
monitor reset // Reset

Um jetzt die Verbindung zum gdbproxy herzustellen muss man nur auf "Connect" klicken, danach auf "Erase" um den Flash-Speicher des Controllers zu löschen, und schließlich auf "Load", damit das Programm in den Controller geladen wird. Mit "Reset" kann man einen Reset auslösen (wer hätte das gedacht?).

GDB Scripts

Hier eine kleine Ansammlung von Scripts, um download und reset via GDB etwas zu vereinfachen:

gdb_scripts_win.zip