DEBUGG ISR LOOP : MUTEX GUARD PROTECTION LOCK USE SEMAPHORE FOR CALLING PROTECTED FUNCTIONS FROM ISR() BASIC OF SEMAPHORE FUNCTIONS /CREATION /& USE JAYDEEP SHAH - radhey04ec@gmail.com

main.cpp

Committer:
radhey04ec
Date:
2020-07-12
Revision:
0:090c812cb33b

File content as of revision 0:090c812cb33b:

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

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

    // now this runs on the main thread, and is safe
    if(v == 1)
    
{
      led = !led;    //LED TOGGLE
      printf("Toggle LED!\r\n");  //SERIAL PRINT
    }
  }
}