Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Revision:
- 6:8b0ca28c88a4
- Parent:
- 3:32a940251192
- Child:
- 7:e49685bca7c7
diff -r 9817756efc34 -r 8b0ca28c88a4 main.cpp
--- a/main.cpp Tue Feb 27 10:29:30 2018 +0000
+++ b/main.cpp Wed Feb 27 15:54:07 2019 +0000
@@ -1,5 +1,4 @@
#include "mbed.h"
-#include "rtos.h"
#include "wdt.h"
// Sample program using the Watchdog
@@ -15,6 +14,8 @@
DigitalOut led1(PTC12, OFF);
DigitalOut led2(PTC13, OFF);
+Serial pc(USBTX, USBRX); // tx, rx, useful for debugging
+
// This ticker is used to feed the watch dog
Ticker tick;
@@ -23,6 +24,13 @@
Thread threadLED1 ; // thread LED1
Thread threadLED2 ; // thread LED2
+# define ON1 0x01
+# define ON2 0x02
+# define OFF1 0x04
+# define OFF2 0x08
+EventFlags signals; // event flags for signalling
+
+
// ------------Fault Injection Button-------------
// Wait while the button is down
// Use this to simulate a STUCK fault
@@ -35,13 +43,11 @@
// Turn LED1 on/off in response to signals
// -----------------------------------------------
void led1_thread() { // method to run in thread
- osEvent evt ;
+ int evt ;
while (true) {
- evt = Thread::signal_wait(0x0); // wait for any signal
- if (evt.status == osEventSignal) {
- if (evt.value.signals & 0x01) led1 = ON ;
- if (evt.value.signals & 0x02) led1 = OFF ;
- }
+ evt = signals.wait_any(ON1 | OFF1); // wait for either signal
+ if (evt & ON1) led1 = ON ;
+ if (evt & OFF1) led1 = OFF ;
waitButton() ; // POSSIBLE FAULT HERE
}
}
@@ -50,13 +56,11 @@
// Turn LED2 on/off in response to signals
// -----------------------------------------------
void led2_thread() { // method to run in thread
- osEvent evt ;
+ int evt ;
while (true) {
- evt = Thread::signal_wait(0x0); // wait for any signal
- if (evt.status == osEventSignal) {
- if (evt.value.signals & 0x01) led2 = ON ;
- if (evt.value.signals & 0x02) led2 = OFF ;
- }
+ evt = signals.wait_any(ON2 | OFF2); // wait for any signal
+ if (evt & ON2) led2 = ON ;
+ if (evt & OFF2) led2 = OFF ;
// waitButton() ; // POSSIBLE FAULT HERE
}
}
@@ -66,12 +70,10 @@
// -----------------------------------------------
void timer_thread() { // method to run in thread
while (true) {
- Thread::wait(250) ;
- threadLED1.signal_set(0x1) ;
- threadLED2.signal_set(0x1) ;
- Thread::wait(250) ;
- threadLED1.signal_set(0x2) ;
- threadLED2.signal_set(0x2) ;
+ wait(1.0) ;
+ signals.set(ON1 | ON2) ;
+ wait(1.0) ;
+ signals.set(OFF1 | OFF2) ;
// waitButton() ; // POSSIBLE FAULT HERE
}
}
@@ -86,15 +88,17 @@
int main(void) {
wdt_32ms() ; // initialise watchdog - 32ms timeout
+ wdt_kick_all() ;
tick.attach_us(callback(&wdt_kick_all), 20000); // ticks every 20ms
// start threads
- threadT.start(&timer_thread) ; // start the timer thread
- threadLED1.start(&led1_thread) ; // start the LED1 control thread
- threadLED2.start(&led2_thread) ; // start the LED2 control thread
+ threadT.start(timer_thread) ; // start the timer thread
+ threadLED1.start(led1_thread) ; // start the LED1 control thread
+ threadLED2.start(led2_thread) ; // start the LED2 control thread
// show start-up
led_red = OFF;
- Thread::wait(1000) ;
+ wait(5.0) ;
led_red = ON;
+ // main thread terminates
}
\ No newline at end of file