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); + } +}