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.
Dependencies: Peripherals SD_Lib Time_Lib_v2 Year3_Version5 BMP280 LCDFunctions TextLCD BME280 Serial_Lib
Revision 0:90e393878517, committed 2016-03-08
- Comitter:
- noutram
- Date:
- Tue Mar 08 11:44:46 2016 +0000
- Child:
- 1:948bd552a2a2
- Commit message:
- Task 613
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Tue Mar 08 11:44:46 2016 +0000
@@ -0,0 +1,108 @@
+#include "mbed.h"
+#include "rtos.h"
+
+#define RED_OFF 1
+#define YELLOW_OFF 2
+#define GREEN_OFF 4
+#define ALL_OFF 7
+
+//Function declarations
+void Function1(void const *args);
+void Function2(void const *args);
+void Function3(void const *args);
+void Function4(void const *args);
+
+//I/O
+DigitalOut onBoardLED(LED1);
+DigitalOut redLED(D7);
+DigitalOut yellowLED(D6);
+DigitalOut greenLED(D5);
+
+DigitalIn onBoardSwitch(USER_BUTTON);
+DigitalIn SW1(D4);
+DigitalIn SW2(D3);
+
+Thread* t1;
+Thread* t2;
+Thread* t3;
+Thread* t4;
+
+//Thread ID
+osThreadId idMain;
+osThreadId id1;
+osThreadId id2;
+osThreadId id3;
+osThreadId id4;
+
+void Function1(void const *args)
+{
+ while (true) {
+ redLED = !redLED;
+ if (redLED == 0) {
+ t2->signal_set(RED_OFF);
+ }
+ Thread::wait(1000);
+ }
+}
+
+void Function2(void const *args)
+{
+ while (true) {
+ Thread::signal_wait(RED_OFF);
+ yellowLED = !yellowLED;
+ if (yellowLED == 0) {
+ t3->signal_set(YELLOW_OFF);
+ }
+ }
+}
+
+//Green Flashing
+void Function3(void const *args)
+{
+ while (true) {
+ Thread::signal_wait(YELLOW_OFF);
+ greenLED = !greenLED;
+ if (greenLED == 0) {
+ t4->signal_set(GREEN_OFF);
+ }
+ }
+}
+
+//This function waits for signals from all other threads
+void Function4(void const *args)
+{
+ while (true) {
+ Thread::signal_wait(GREEN_OFF);
+ //Signal main thread
+ osSignalSet(idMain, ALL_OFF);
+ }
+}
+
+//Main thread
+int main() {
+ redLED = 0;
+ yellowLED = 0;
+ greenLED = 0;
+
+ //Main thread ID
+ idMain = osThreadGetId(); //CMSIS RTOS call
+
+ //Create and run threads
+ t4 = new Thread(Function4);
+ t1 = new Thread(Function1);
+ t2 = new Thread(Function2);
+ t3 = new Thread(Function3); //Dynamically allocated
+
+
+ //Thread ID
+ id1 = t1->gettid();
+ id2 = t2->gettid();
+ id3 = t3->gettid();
+ id4 = t4->gettid();
+
+ while(1) {
+ //Wait for the ALL_ON signal
+ osSignalWait(ALL_OFF,osWaitForever);
+ printf("ALL OFF\n");
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-rtos.lib Tue Mar 08 11:44:46 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed-rtos/#b4c5542476ba
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Tue Mar 08 11:44:46 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/252557024ec3 \ No newline at end of file