Updated
Embed:
(wiki syntax)
Show/hide line numbers
Watchdog.cpp
00001 #include "Watchdog.h" 00002 00003 void watchdog(void) 00004 { 00005 while(true) 00006 { 00007 Thread::wait(WATCHDOG_TIME); 00008 00009 if(threadstates) 00010 { 00011 producer_thread.terminate(); 00012 consumer_thread.terminate(); 00013 serial_thread.terminate(); 00014 SDqueue_thread.terminate(); 00015 LCDqueue_thread.terminate(); 00016 network_thread.terminate(); 00017 printf_thread.terminate(); 00018 00019 pc->printf("THREAD PSW: 0x%x\r\n\n", threadstates); 00020 pc->printf("PRODUCER CONSUMER SERIAL SD CARD LCD NETWORK \r\n"); 00021 pc->printf("%d %d %d %d %d %d\r\n\n", threadstates&PRODUCER, (threadstates&CONSUMER)>>1, (threadstates&SERIAL)>>2, (threadstates&SD)>>3, (threadstates&LCD)>>4, (threadstates&NETWORK)>>5); 00022 00023 00024 switch (threadstates) 00025 { 00026 case (PRODUCER) : 00027 pc->printf("PRODUCER THREAD DEADLOCK\r\n\n"); 00028 lcd.cls(); 00029 lcd.printf("PRODUCER\nDEADLOCK"); 00030 break; 00031 00032 case (CONSUMER) : 00033 pc->printf("CONSUMER THREAD DEADLOCK\r\n\n"); 00034 lcd.cls(); 00035 lcd.printf("CONSUMER\nDEADLOCK"); 00036 break; 00037 00038 case (SERIAL) : 00039 pc->printf("SERIAL THREAD DEADLOCK\r\n\n"); 00040 lcd.cls(); 00041 lcd.printf("SERIAL\nDEADLOCK"); 00042 break; 00043 00044 case (SD) : 00045 pc->printf("SD CARD THREAD DEADLOCK\r\n\n"); 00046 lcd.cls(); 00047 lcd.printf("SD CARD\nDEADLOCK"); 00048 break; 00049 00050 case (LCD) : 00051 pc->printf("LCD THREAD DEADLOCK\r\n\n"); 00052 lcd.cls(); 00053 lcd.printf("LCD\nDEADLOCK"); 00054 break; 00055 00056 case (NETWORK) : 00057 pc->printf("NETWORK THREAD DEADLOCK\r\n\n"); 00058 lcd.cls(); 00059 lcd.printf("NETWORK\nDEADLOCK"); 00060 break; 00061 00062 default: 00063 pc->printf("MULTIPLE THREAD DEADLOCK\r\n\n"); 00064 lcd.cls(); 00065 lcd.printf("DEADLOCK"); 00066 break; 00067 } 00068 00069 for (int i = 0;i<50;i++) 00070 { 00071 redLED = 1; 00072 wait(0.05); 00073 redLED = 0; 00074 wait(0.05); 00075 } 00076 NVIC_SystemReset(); 00077 } 00078 else if (logging) 00079 { 00080 printQueue.call(puts,"WATCHDOG RAN WITH NO DEADLOCKED THREADS\r\n"); 00081 } 00082 } 00083 }
Generated on Fri Jul 29 2022 13:00:12 by 1.7.2