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

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
Diff: main.cpp
- 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);
+ }
+}
