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 } } }