Purpose: Simple application example with 2 threads communicating 5-byte buffers through a Mail event-object.

Dependencies:   IHM_V2

Fork of mbed-os-example-mbed5-blinky by mbed-os-examples

/media/uploads/jacquesolivierklein/mbed-os-mail-5-bytes-tx-rx.png

Purpose: Simple application example with 2 threads communicating 5-byte buffers through a Mail event-object. 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:da71f99ce831
Parent:
22:af9dcf379926
Child:
28:9a6aff2af525
--- a/main.cpp	Wed Feb 15 10:00:05 2017 +0000
+++ b/main.cpp	Sat Feb 10 22:10:15 2018 +0000
@@ -1,13 +1,82 @@
+// Title: mbed-os-mail-5-Bytes-tx-rx
+// Author: Jacques-Olivier Klein - IUT de CACHAN
+// Date: 2018-02-10
+
 #include "mbed.h"
+#include "IHM.h"
+
+#define MY_MAIL_BUFFER_SIZE 5
+#define MY_MAIL_NBER_OF_BUFFER 4
 
-DigitalOut led1(LED1);
+typedef  struct{
+    char message [MY_MAIL_BUFFER_SIZE] ;
+} Mail_Buffer_T; 
+
+IHM ihm; 
+
+DigitalOut L0 (PB_3) ;  // led L0
+DigitalOut L1 (PA_7) ;  // led L1
+DigitalOut L2 (PA_6) ;  // led L2
+
+void TxMail  ();
+void RxMail  ();
+
+Mail<Mail_Buffer_T, MY_MAIL_NBER_OF_BUFFER> my_mail_box;
 
-// 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);
+Ticker my_timer;
+Thread thread2;
+Thread thread3;
+Thread thread_Semaphore;
+Thread thread_rx_q(osPriorityNormal,DEFAULT_STACK_SIZE );
+Thread Thread_TxMail;
+Thread Thread_RxMail(osPriorityNormal,500);
+EventQueue the_event_queue;
+
+Semaphore mysemaphore(0); 
+
+int main(void) 
+{   ihm.LCD_clear();
+    ihm.LCD_printf("Mail-5B-tx-rx-%s %s",__DATE__,__TIME__);
+    printf("mbed-os-mail-5-Bytes-tx-rx-%s %s\n\r",__DATE__,__TIME__);
+    printf("DEFAULT_STACK_SIZE:%d\n\r", DEFAULT_STACK_SIZE); 
+
+    Thread_TxMail.start(TxMail); 
+    Thread_RxMail.start(RxMail); 
+      
+    while(1){
+        Thread::wait(3000);  
+        L0=!L0;
+        printf("M     [pid-%d]Main \n\r",Thread::gettid());
     }
 }
 
+void TxMail  (){
+    Mail_Buffer_T * p_buffer;
+    char c = '!';
+    int i;
+    while(1){
+        p_buffer = (Mail_Buffer_T *) my_mail_box.alloc();
+        for(i=0;i<MY_MAIL_BUFFER_SIZE-1;i++){
+            p_buffer->message[i]=c++; 
+            if (c=='}')c='!'; 
+        }
+        p_buffer->message[MY_MAIL_BUFFER_SIZE-1]=0;
+        printf("   T  [pid-%d]TxMail:<%s>\n\r",Thread::gettid(),p_buffer->message);
+        my_mail_box.put(p_buffer);
+        L1 = ! L1;
+        Thread::wait(1000);
+    }    
+}
+
+void RxMail (){
+    Mail_Buffer_T * p_mail_buffer;
+    Mail_Buffer_T local_buffer;
+    while(1){
+        osEvent evt = my_mail_box.get();
+        L2 = ! L2;
+        p_mail_buffer = (Mail_Buffer_T *)evt.value.p;      
+        memcpy ( &local_buffer,p_mail_buffer, MY_MAIL_BUFFER_SIZE); 
+        my_mail_box.free(p_mail_buffer);
+        printf("     R[pid-%d]RxMail:<%s>\n\r",Thread::gettid(),local_buffer.message);
+    }    
+}