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
main.cpp
- Committer:
- jacquesolivierklein
- Date:
- 2018-02-10
- Revision:
- 27:da71f99ce831
- Parent:
- 22:af9dcf379926
- Child:
- 28:9a6aff2af525
File content as of revision 27:da71f99ce831:
// 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
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;
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);
}
}
