Sample example of using EventFlags in mbed-os threads

Dependencies:   IHM_V2

/media/uploads/jacquesolivierklein/mbed-os-eventflags.png

Purpose: Sample example of using EventFlags in mbed-os threads

that trigger a thread thrgough its EventFlags. 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:
2019-01-09
Revision:
33:ebb57af47121
Parent:
32:88edbd7e31e3

File content as of revision 33:ebb57af47121:

// Title :mbed-os-eventflags (previously mbed-os-signals)
// Author: Jacques-Olivier Klein - IUT de CACHAN
// Date: 2018-02-11 rev. 2019-01-06

#include "mbed.h"
#include "IHM.h"

IHM ihm; 

DigitalOut L0 (PB_3) ;  // led L0
DigitalOut L1 (PA_7) ;  // led L1
DigitalOut L2 (PA_6) ;  // led L2
DigitalOut L6 (PA_0) ;  // led L6

InterruptIn BP0Interrupt(PA_9); 
InterruptIn BP1Interrupt(PA_10); 
InterruptIn BP2Interrupt(PB_0); 
InterruptIn BP3Interrupt(PB_7); 

void led_thread_signal();

void isrBP0 ();
void isrBP1 ();
void isrBP2 ();
void isrBP3 ();

Thread thread_signal;

EventFlags my_event_flags;

int main(void)
{   ihm.LCD_clear();
    ihm.LCD_printf("Events%s %s",__DATE__,__TIME__);
    printf("\n\rmbed-os-eventflags\n\r");
    printf("\n\r%s - %s\n\r",__DATE__,__TIME__);
    printf("OS_STACK_SIZE:%d\n\r", OS_STACK_SIZE); 
      BP0Interrupt.mode(PullUp);
      BP0Interrupt.fall(&isrBP0);
      BP1Interrupt.mode(PullUp);
      BP1Interrupt.fall(&isrBP1);
      BP2Interrupt.mode(PullUp);
      BP2Interrupt.fall(&isrBP2);
      BP3Interrupt.mode(PullUp);
      BP3Interrupt.fall(&isrBP3);
       
    thread_signal.start(led_thread_signal);   
 
    while(1){   
        wait(4.000);  
        L6=!L6;
        printf("M     [pid-%d]Main \n\r",osThreadGetId());
    }
}

void led_thread_signal(){   
    uint32_t flags;
    while (true) {
        flags = my_event_flags.wait_any(0x3); // wait for 1 or 2 
        ihm.BAR_set(flags);
        printf("     S [pid-%d]led6_thread_signal <%d> 1 or 2 detected \n\r",osThreadGetId(),flags);
        flags = my_event_flags.wait_all(0xC); // wait for 4 and 8 
        ihm.BAR_set(flags);
        printf("     S [pid-%d]led6_thread_signal <%d>  4 and 8 detected \n\r",osThreadGetId(),flags);
    }
}

void isrBP0 (void){
    my_event_flags.set(0x1);
}

void isrBP1 (void){
    my_event_flags.set(0x2);
}

void isrBP2 (void){
    my_event_flags.set(0x4);
}

void isrBP3 (void){
    my_event_flags.set(0x8);
}