Updated

Dependents:   PROJECTTEST

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Watchdog.cpp Source File

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 }