Forum: Mikrocontroller und Digitale Elektronik MSP430 Flash Monitor + CCE


von Daniel (Gast)


Lesenswert?

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
__interrupt void usart1_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

von Daniel (Gast)


Lesenswert?

Niemand mal damit gearbeitet?
Oder sonst eine Idee?

von Christian R. (supachris)


Lesenswert?

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...)

von Daniel (Gast)


Lesenswert?

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

von Christian R. (supachris)


Lesenswert?

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/

von Tilo S. (thesurfer)


Lesenswert?

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.

von Daniel (Gast)


Lesenswert?

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

von Daniel (Gast)


Lesenswert?

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

von Daniel B. (micky_db)


Lesenswert?

Hat keiner mehr ne Idee?

MfG
Daniel

von Daniel B. (micky_db)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.