SEMAPHORE PART 3 SEMAPHORE FUNCTION : try_acquire_until(ms) use -- replacement of wait_until() function SEMAPHORE ADVANCE LEVEL Jaydeep Shah -- radhey04ec@gmail.com

main.cpp

Committer:
radhey04ec
Date:
2020-07-12
Revision:
0:e003548e7f74

File content as of revision 0:e003548e7f74:

/*SEMAPHORE PART 3
FUNCTION USE : try_acquire_until(uint32_t miliSecond)
return bool = true /false

REPLACEMENT OF wait_until(uint64_t milisecond)
*/

//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
    bool v = updates.try_acquire_until(30000);    //RETURN STORE IN V   //WAIT FOR 30 SEC

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