Hi,
ich versuche mich gerade in den Flash Monitor(siehe Link) von TI
einzuarbeiten.
http://focus.ti.com/general/docs/techdocsabstract.tsp?abstractName=slaa341
^--- Flash Monitor
Ich arbeite mit meinem MSP430F449 und den CC Essentials.
Meine Probleme beginnen, ohne darauf beschränkt zu sein :), schon damit
das ich nicht weis, wie/ob man die Datei für den IAR-linker
(lnk430f169_boot.xcl im Zipfile von oben genanntem Link) für den F449
umschreiben kann/muss, bzw wie man CCE dann dazu bringt, diese File zu
laden und zu benutzen.
Weiter würde es damit gehen, das die Art und Weise, mit der im
Demoprogramm Interrupts genutzt werden, nicht unbedingt dem mir
Bekannten entspricht. So z.B. hier:
1
#pragma vector=UART1RX_VECTOR
2
__interruptvoidusart1_rx(void)
3
{
4
if(RXBUF1==0x03)
5
asm(" mov &0xFC40, PC;");// ^C starts monitor
6
else
7
{
8
while(!(IFG2&UTXIFG1));// USART1 TX buffer ready?
9
TXBUF1=RXBUF1;// RXBUF1 to TXBUF1
10
}
11
}
der CCE kann den pragma-Syntax nicht, obgleich der hier ohnehin
merkwürdig ist. Was will mir "vector=UART1RX_VECTOR" sagen?
Ich wäre sehr dankbar für Hilfe, bin im fortgeschrittenen Stadium der
Verwirrung.
Grüße
Daniel
Daniel wrote:
> der CCE kann den pragma-Syntax nicht, obgleich der hier ohnehin> merkwürdig ist. Was will mir "vector=UART1RX_VECTOR" sagen?>> Ich wäre sehr dankbar für Hilfe, bin im fortgeschrittenen Stadium der> Verwirrung.
Naja, kann er ja nicht, du hast die IAR Syntax verwendet. Beim CCE muss
die Präprozessor-Anweisung so aussehn:
__interrupt void usart1_rx (void);
USART1RX_ISR(usart1_rx)
__interrupt void usart1_rx (void)
{
.... Code
}
Das gibt dem Compiler bekannt, dass es sich um eine ISR handelt, und er
die entsprechend an eine bestimmte Stelle im Speicher schreiben muss
(zumindest den Sprung dahin...)
supi :)
Ich bin davon ausgegangen dass das eben ein C-Syntax ist, der mir noch
nicht bekannt war, ich wusste nicht dass das ne Präprozessor-spezifische
Sache ist.
Vielen Dank dafür!
Jetzt muss ich nur noch wissen, wie ich den Linker anpasse.
Bin leider noch Einsteiger, und werde von den CCE Optionen total
erschlagen, weis aber auch nicht nach welchen Begriffen ich jetzt suchen
sollte um sinnvolle Ergebnisse zu bekommen. Die offensichtlichen Sachen
lieferten wahlweise nichts, oder nicht das Gesuchte.
Danke vorab.
MfG
Daniel
Wieso nimmst du nicht gleich den GCC mit der Eclipse-Oberfläche. Da hast
du keine Code-beschränkung und es gibt massig Anleitungen, wie man das
alles anpasst.
Da könnt ich dir auch helfen dann, nehm den täglich.
Anleitung hier: http://www.mikrocontroller.net/Eclipse%20und%20MSPGCC/
Was fuer ein linker problem hast du denn??
beim cce lautet das linkercommand file wie folgt : lnk_msp430f449.cmd
und befindet sich im <deinCCEordner>\tools\compiler\msp430\include ,
jedoch macht das der cce alles automatisch beim erstellen eines neuen
Projektes, deswegen musst du ja auch gleich am anfang sagen mit welchen
MSP du arbeiten willst.
zu der pragma geschichte, es reicht auch wie folgt :
__interrupt void usart1_rx (void)
{
.... Code
}
USART1RX_ISR(usart1_rx)
Hauptsache deine Interrupt Methode ist vorher bekannt gemacht worden,
was hiermit auch passiert ist.
Den CCE nehm ich aus dem einfachen Grund, das ich ihn habe (Vollversion
vorinstalliert auf dem Rechner an dem ich hier arbeite (Praktikum)).
Aber damit ist mir schonmal sehr geholfen.
Ich teste jetzt mal, wie das gute Stück reagiert, und melde mich dann
nochmal. Bisher hat sich der Assembler auch nicht ganz so verhalten, wie
ich es gewünscht und erhofft hätte.
Da das aber womöglich ein Linkerproblem war, mal schaun...
Vielen Dank schonmal!
MfG
Daniel
Servus nochmal,
also, die Interrupts scheinen keine Fehler mehr zu machen, zumindest
bisher nicht.
Erstmal zusammenfassend worum es hier geht:
der Flash Monitor ist ein kleines Progrämmchen, mit dem man über den
USART den Flash-Speicher lesen, löschen und beschreiben kann. Man kann
sich also den JTAG Adapter sparen, und das ding seriell Programmieren,
indem man n File mit dem Programm in Hexform hat, und das ins Terminal
eingibt.
Problematisch ist, das sich das Programm nicht selbst löschen
sollte/kann/darf. Alles andere kann aber gelöscht werden.
Dadurch kann es sein das man die Interrupt Routinen wahlweise immer neu
reinschreiben muss (mit jedem Programm das man draufspielt) oder die
Vorhandenen ins gleiche Segment schreibt wie den Monitor, dann
allerdings irgendwie verändern muss.
Wie man unschwer an meiner unspezifischen Zusammenfassung erkennen kann,
hab ich die Problematik noch nicht wirklich durchdrungen.
Das Problem ist nun, dass im Manual steht, dass es nötig ist den Linker
anzupassen. Sonst funktioniert das mit den Interrupts nicht wie geplant.
Ein weiteres Problem das ich momentan habe:
der eigentliche Flash-Monitor ist in Assembler. Es ist ein Header-File
dabei, in dem man die nötigen Einstellungen vornehmen kann. Das
Header-File wird im Assembler eingebunden, und dann abhängig davon, was
definiert ist und was nicht ( #ifdef/#ifndef...#endif -Konstrukte) wird
verschiedener Code eingebunden.
CCE mault nun aber beträchtlich bei eben diesen Punkten, und allem was
sich dazwischen befindet. Ist wahrscheinlich nur eine Falscheinstellung
im Preprocessor, aber ich krieg es einfach nicht zum laufen.
MfG
Daniel
Ok, ich will es mal neu formulieren.
Ich habe einen Assemblercode (flash_monitor.s43).
In den werden über
1
#include"flash_monitor.h"
2
#include"TargetDefs.h"
zwei Headerfiles eingebunden, die letztendlich für die Konfiguration und
dergleichen zuständig sind. Das sind die ersten zwei Zeilen Code, und
mein CCE meldet mir schon 2 Fehler ("E0002", "E0003": "Illegal Mnemonic
specified", "Only labels and comments").
Und von da ab enthalten sehr viele Zeilen Fehler, vor allem in Zeilen
mit Anweisungen für den Preprocessor, und vor allem den "Illegal
mnemonic specified" Fehler.
Benutzt mein CCE den Preprocessor nicht richtig, oder ist da sonst
irgendwo ein bullshit drin?
MfG
Daniel