Example using semaphore in ISR

Dependencies:   IHM_V2

/media/uploads/jacquesolivierklein/mbed-os-isr-semaphore.png

Purpose: Simple application example with 1 thread triggered by a interrupt service routine (ISR) through a semaphore. Target: L432KC / Nboard (from IUT-Cachan) Tested: YES (2019-01-09) Author: Jacques-Olivier Klein - IUT de CACHAN Date: 2018-02-10 rev. 2019-01-09 OS_STACK_SIZE=4096 Libraries: mbed-os rev5345:c966348(03jan2019) + IHMV2 (from IUT-Cachan) rev6:ad91067

Revision:
27:edb6c6685907
Parent:
22:af9dcf379926
Child:
28:be81ea276c3a
--- a/main.cpp	Wed Feb 15 10:00:05 2017 +0000
+++ b/main.cpp	Sat Feb 10 20:57:06 2018 +0000
@@ -1,13 +1,48 @@
+// Title : mbed-os-irq-semaphore
+// Author: Jacques-Olivier Klein - IUT de CACHAN
+// Date: 2018-02-10
+
 #include "mbed.h"
+#include "IHM.h"
 
-DigitalOut led1(LED1);
+IHM ihm; 
+
+DigitalOut L0 (PB_3) ;  // led L0
+DigitalOut L1 (PA_7) ;  // led L1
+
+InterruptIn BP0_Interrupt(PA_9); 
+
+void thread_Semaphore();
+void isrBP0 ();
 
-// main() runs in its own thread in the OS
-// (note the calls to wait below for delays)
-int main() {
-    while (true) {
-        led1 = !led1;
-        wait(0.5);
+Thread thread_waiting_for_semaphore (osPriorityNormal,DEFAULT_STACK_SIZE );;
+Semaphore mysemaphore(0); 
+
+int main(void) 
+{   ihm.LCD_clear();
+    ihm.LCD_printf("irq-semaphore-%s %s",__DATE__,__TIME__);
+    printf("mbed-os-irq-semaphore-%s %s\n\r",__DATE__,__TIME__);
+    printf("DEFAULT_STACK_SIZE:%d\n\r", DEFAULT_STACK_SIZE); 
+ 
+    BP0_Interrupt.mode(PullUp);
+    thread_waiting_for_semaphore.start(thread_Semaphore);
+    BP0_Interrupt.fall(&isrBP0);
+    while(1){
+        L0=!L0;
+        printf("*     [pid-%d]Main \n\r",Thread::gettid());
+        Thread::wait(200);  
     }
 }
 
+void isrBP0 (){
+    mysemaphore.release();
+}
+    
+void thread_Semaphore(){
+    while(1){
+        mysemaphore.wait();
+        L1=!L1; 
+        printf("    * [pid-%d]Main \n\r",Thread::gettid());
+        }
+}
+    
\ No newline at end of file