green rosh
/
WDtester
Watchdog version 1
main.cpp@0:24d0ec172cf1, 2014-12-01 (annotated)
- Committer:
- greenroshks
- Date:
- Mon Dec 01 06:40:13 2014 +0000
- Revision:
- 0:24d0ec172cf1
Watchdog IITMSAT
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
greenroshks | 0:24d0ec172cf1 | 1 | #include "mbed.h" |
greenroshks | 0:24d0ec172cf1 | 2 | #include "rtos.h" |
greenroshks | 0:24d0ec172cf1 | 3 | |
greenroshks | 0:24d0ec172cf1 | 4 | |
greenroshks | 0:24d0ec172cf1 | 5 | // The trigger D4 is connected to Watchdog input and WD output is connected to interrupt button D3. The ISR thus evoked will trigger reset. Alternately, D3 can be connected to reset as well |
greenroshks | 0:24d0ec172cf1 | 6 | DigitalOut led1(LED1); |
greenroshks | 0:24d0ec172cf1 | 7 | DigitalOut led2(LED2); |
greenroshks | 0:24d0ec172cf1 | 8 | DigitalOut trigger(D2); //triggering watchdog |
greenroshks | 0:24d0ec172cf1 | 9 | DigitalOut reset(D4); //D4 is connected to uC reset |
greenroshks | 0:24d0ec172cf1 | 10 | Serial pc(USBTX,USBRX); |
greenroshks | 0:24d0ec172cf1 | 11 | InterruptIn button(D3); //ISR initialize |
greenroshks | 0:24d0ec172cf1 | 12 | |
greenroshks | 0:24d0ec172cf1 | 13 | void led2_thread(void const *args) { |
greenroshks | 0:24d0ec172cf1 | 14 | while (true) { |
greenroshks | 0:24d0ec172cf1 | 15 | led2 = !led2; |
greenroshks | 0:24d0ec172cf1 | 16 | Thread::wait(1000); |
greenroshks | 0:24d0ec172cf1 | 17 | } |
greenroshks | 0:24d0ec172cf1 | 18 | } |
greenroshks | 0:24d0ec172cf1 | 19 | |
greenroshks | 0:24d0ec172cf1 | 20 | void led1_thread(void const *args) |
greenroshks | 0:24d0ec172cf1 | 21 | { |
greenroshks | 0:24d0ec172cf1 | 22 | while(true) |
greenroshks | 0:24d0ec172cf1 | 23 | { |
greenroshks | 0:24d0ec172cf1 | 24 | led1!=led1; |
greenroshks | 0:24d0ec172cf1 | 25 | Thread::wait(500); |
greenroshks | 0:24d0ec172cf1 | 26 | } |
greenroshks | 0:24d0ec172cf1 | 27 | } |
greenroshks | 0:24d0ec172cf1 | 28 | |
greenroshks | 0:24d0ec172cf1 | 29 | void WDT(void const *args) |
greenroshks | 0:24d0ec172cf1 | 30 | { |
greenroshks | 0:24d0ec172cf1 | 31 | trigger=1; |
greenroshks | 0:24d0ec172cf1 | 32 | while(true) |
greenroshks | 0:24d0ec172cf1 | 33 | { |
greenroshks | 0:24d0ec172cf1 | 34 | trigger=!trigger; |
greenroshks | 0:24d0ec172cf1 | 35 | Thread::wait(5000); |
greenroshks | 0:24d0ec172cf1 | 36 | } |
greenroshks | 0:24d0ec172cf1 | 37 | } |
greenroshks | 0:24d0ec172cf1 | 38 | void fault() |
greenroshks | 0:24d0ec172cf1 | 39 | { |
greenroshks | 0:24d0ec172cf1 | 40 | printf("\n Watchdog triggered... Saving parameters\n"); |
greenroshks | 0:24d0ec172cf1 | 41 | reset=1; |
greenroshks | 0:24d0ec172cf1 | 42 | } |
greenroshks | 0:24d0ec172cf1 | 43 | |
greenroshks | 0:24d0ec172cf1 | 44 | int main() { |
greenroshks | 0:24d0ec172cf1 | 45 | button.rise(&fault); |
greenroshks | 0:24d0ec172cf1 | 46 | Thread thread1(led1_thread); |
greenroshks | 0:24d0ec172cf1 | 47 | Thread thread2(led2_thread); |
greenroshks | 0:24d0ec172cf1 | 48 | Thread watchdog(WDT); |
greenroshks | 0:24d0ec172cf1 | 49 | |
greenroshks | 0:24d0ec172cf1 | 50 | thread1.set_priority(osPriorityRealtime); |
greenroshks | 0:24d0ec172cf1 | 51 | thread2.set_priority(osPriorityHigh); |
greenroshks | 0:24d0ec172cf1 | 52 | watchdog.set_priority(osPriorityIdle); |
greenroshks | 0:24d0ec172cf1 | 53 | |
greenroshks | 0:24d0ec172cf1 | 54 | while (true) { |
greenroshks | 0:24d0ec172cf1 | 55 | Thread::wait(8000); |
greenroshks | 0:24d0ec172cf1 | 56 | } |
greenroshks | 0:24d0ec172cf1 | 57 | } |