SEMAPHORE PART-1 USE OF WAIT_UNTIL() FUNCTION , TIME BASED LOCKING + SEMAPHORE SIGNAL BASED LOCKING IMPLEMENTATION SEMAPHORE BASIC PART 1 USE AND APK JAYDEEP SHAH--radhey04ec@gmail.com

main.cpp

Committer:
radhey04ec
Date:
2020-07-12
Revision:
0:a8abf59930e4
Child:
1:e0e8a1a599d9

File content as of revision 0:a8abf59930e4:

//USE OF PRINTF() STATEMENT IN MBED  WITH ISR

//method : semaphore 

/* NOTE : PRINTF() IS PART OF STDIO.H LIBRARY
AND THIS LIBRARY PROTECTED BY MUTEX GUARD, SO YOU CAN NOT CALL PRINTF() FROM
ISR FUNCTION.
SIMPLE WAY IS USE SOMETYPE OF SIGNAL OR FLAG AND PRINTF() OUTSIDE ISR depends on 
flag and signal  */

//USE SERIAL TERMINAL WITH 9600 BAUD RATE  8-N-1 FORMAT

//Created by : JAYDEEP SHAH  --radhey04ec@gmail.com


//Library Added :::::
#include "mbed.h"

DigitalOut led(LED1);  // ON BOARD LED
InterruptIn btn(USER_BUTTON);  // ON BOARD BUTTON  PORT PC_13 
//INTERRUPT REGISTERATION

Semaphore updates(0);  //SEMAPHORE OBJECT CREATE = SHARE RESOURCE 0
//NO SHARE RESOURCE ONLY ISR

void do_something() {        //ISR FUNCTION
  // release the semaphore
  updates.release();   // NOW V=1
}

int main() {
  btn.fall(&do_something);  //FUNCTION CALL WHEN FALL EDGE OF BUTTON - ISR

  while (1) {  //LOOP FOREVER
    // wait for the semaphore to be released from the ISR
    uint32_t v = updates.wait_until(30000);    //RETURN STORE IN V

    // now this runs on the main thread, and is safe

    if(v==1)  //THIS ONLY RUN WHEN BUTTON PRESS & SEMAPHORE RELEASE BY 1
{
      led = !led;    //LED TOGGLE
      printf("Toggle LED! V= %d \r\n",v);  //SERIAL PRINT  V  === 0 AGAIN
    }
    
    if(v == 0)  // This Function run after 30 sec of Power on/RST Continue   -- NO matter button press or not
    {
    printf("\n TIMER RELEASE SEMAPHORE V = %d \r\n",v);
  }
  
  }
}