Stimmt![]()
Jetzt gehts einwandfrei, nachdem ich Terminalprogramm geschlossen und wieder gestartet hab =D>
Thx für die Hilfe, und wieder was dazugelernt !!!
Probier jetzt ma bischen absichtliche Delays aus mit dem WD
Gruß
schamp
EDIT:
Hier nochmal die fehlerfreie Source, falls es jemanden interessiert![]()
Code:#include <iom88.h> #include <ina90.h> #include <string.h> #include "sw_uart.h" void watchdog_init(void); void sende_routine(void); void health_check(void); static char bTxt[24] = "\r\nHello, World\r\n"; unsigned char Flag; #define SENDEROUTINE_M_OK 1 __task void main(void) { watchdog_init(); while(1) { sende_routine(); health_check(); // Am Ende der Hauptschleife prüfen, ob sende_routine() ordnungsgemäß ausgeführt } } void watchdog_init(void) { __disable_interrupt(); MCUSR = 0; // Alle vorher gesetzten Flags clearen Flag = 0; sw_uart_init(); WDTCSR |= (1<<WDIF); // Clear WD Interrupt Flag __watchdog_reset(); /* Setup Watchdog, bzw. Start timed sequence (wie im Datenblatt) */ WDTCSR |= (1<<WDCE) | (1<<WDE); // Watchdog Change Enable setzen /* Set new prescaler(time-out) value (siehe Datenblatt) */ WDTCSR = (1<<WDE) | (1<<WDP3); // Timeout auf 4.0 Sekunden setzen __enable_interrupt(); } void sende_routine(void) { unsigned char bIx; unsigned char bLn; bLn = strlen(bTxt); for (bIx = 0;bIx < bLn; bIx++) { send_one_byte(bTxt[bIx]); // hier später delay um System Reset zu simulieren.... } Flag |= (1<<SENDEROUTINE_M_OK); // Routine korrekt ausgeführt } void health_check(void) { if(Flag & (1<<SENDEROUTINE_M_OK)) // alles ok ? { Flag &=~ (1<<SENDEROUTINE_M_OK); __watchdog_reset(); // dann Reset Watchdog } }







Zitieren

Lesezeichen