mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430F4250 und Watchdog


Autor: Roy ........ (royw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallöchen,

ich habe ein Problem ...
Und zwar soll der Watchdog des MSPs benutzt werden und nach einem Reset 
soll die Firmware in einen bestimmten Zustand gehen, aber nicht den 
normalen Start durchführen .

Hier mein aktueller Stand :
void main (void)
{
  WDTCTL  = WDTPW + WDTHOLD;      // Stop watchdog timer
  if ((IFG1 & (WDTIFG + PORIFG + RSTIFG)) == WDTIFG ) { // Test ob der   Watchdog zugeschlagen hat .... oder ob normaler Reset
    // wenn Watchdog , dann wird der mV Output auf 0V gezogen !
    WDTCTL  = WDTPW + WDTHOLD;      // Stop watchdog timer
    P1SEL &=~ BIT4;
    P1DIR |= BIT4;
    P1OUT &= ~BIT4;
    P5DIR |= BIT1;
    P5OUT &= ~BIT1;
    while (1) {};  // Endlosschleife
  } 
Doch leider scheint es damit Start-Schwierigkeiten zu geben.
manchmal funktioniert es manchmal nicht.
Eigentlich sollte der Watchdog garnicht zuschlagen, aber es schein so 
als ob die Firmware doch in diese Endlosschleife gelangt.

Habt ihr noch eine andere bzw. bessere Idee ?

Danke im Voraus für eure Mühe.

Gruß

Roy

Autor: Frank Koch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich kann den Sinn darin grad nicht erkennen. Wieso sollte der 
Watchdog zuschlagen, wenn er gerade erst gestoppt wurde?

Autor: Frank Koch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach und noch was: Auch wenn es in den TI-Examples überall so drin steht 
- diese Verknüpfungen mit "+" würde ich mir ganz schnell abgewöhnen und 
durch ein normales "|" ersetzen. Dieses "+" gibt es eigentlich garnicht, 
wird wohl irgendwo definiert...

Autor: Roy ........ (royw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Watchdog wird erst nach dieser Routine scharf gemacht !
Das bedeutet wenn er dann im Fehlerfall zuschlägt soll er nach dem 
Watchdog Reset in diese Endlosschleife springen.

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Dieses "+" gibt es eigentlich garnicht
Wieso sollte es keine Addition geben?


>Eigentlich sollte der Watchdog garnicht zuschlagen, aber es schein so
>als ob die Firmware doch in diese Endlosschleife gelangt.
D.h. du meinst es gab keinen Watchdog Reset, der MSP hat aber trotzdem 
das WDTIFG Flag gesetzt und bleibt in der while(1) Schleife hängen?

Autor: Roy ........ (royw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja das denke ich , Die Firmware läuft wohl direkt in die Endlosschleife 
rein, nach Power On ....

(Das mit dem "+" habe ich auch nicht ganz verstanden ... )

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg S. schrieb:
> Wieso sollte es keine Addition geben?

Ja rechne dir doch mal ein paar Sachen Bitweise...das geht oft auf, 
jedoch nicht immer.

Nimm z.B. zweimal das gleiche Bit, also es passiert irgendwo folgendes:

(0000 0010 + 0000 0010) = 0000 0100

mit oder:

(0000 0010 | 0000 0010) = 0000 0010

Autor: Roy ........ (royw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da hast du natürlich recht, aber bei diesen Bit Operationen muss man 
natürlich aufpassen welches Bit man setzt bzw. rücksetzt.
Doppelte Bits sollten dann nicht vorkommen.

Aber viel wichtiger ist mir das mit dem Watchdog ....

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dennis schrieb:
> Jörg S. schrieb:
>> Wieso sollte es keine Addition geben?
> Ja rechne dir doch mal ein paar Sachen Bitweise...das geht oft auf,
> jedoch nicht immer.
Mag sein, aber die Defines sind von IAR bzw. TI vorgegeben. Bugs in dem 
Bereich kann man wohl zu 99,999999999% ausschliessen.

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Roy ........ schrieb:
> ja das denke ich , Die Firmware läuft wohl direkt in die Endlosschleife
> rein, nach Power On ....
Tja, man müsste halt erst mal ausschliessen das es nicht doch zu einem 
Watchdog Reset kommt.
Kannst den Watchdog ja mal in den Timer Mode schalten und dir einen 
Breakpoint in die ISR setzen.

Autor: Roy ........ (royw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja das hab ich bereits getan, bzw. den Watchdog garnicht erst scharf 
gemacht.
Dann kommt er trotzdem in die Schleife rein ...

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du eventuell ein großes Datenarray deklariert? In diesem Fall kann 
es sein, dass der WDT schon im CStartup Code zuschlägt. Wenn man viele 
Variablen und große Arrays hat, muss man den WDT davor ausschalten. Wie 
das bei dem entsprechenden Kompiler geht, steht im Manual. Beim MSPGCC 
gehts zum Beispiel mit:
void low_level_init(void)__attribute__((__naked__, __section__(".init3")));

void low_level_init(void)
{
  WDTCTL = WDTPW | WDTHOLD;
}

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.