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
00001 //USE OF PRINTF() STATEMENT IN MBED WITH ISR 00002 00003 //method : semaphore 00004 00005 /* NOTE : PRINTF() IS PART OF STDIO.H LIBRARY 00006 AND THIS LIBRARY PROTECTED BY MUTEX GUARD, SO YOU CAN NOT CALL PRINTF() FROM 00007 ISR FUNCTION. 00008 SIMPLE WAY IS USE SOMETYPE OF SIGNAL OR FLAG AND PRINTF() OUTSIDE ISR depends on 00009 flag and signal */ 00010 00011 //USE SERIAL TERMINAL WITH 9600 BAUD RATE 8-N-1 FORMAT 00012 00013 //Created by : JAYDEEP SHAH --radhey04ec@gmail.com 00014 00015 00016 //Library Added ::::: 00017 #include "mbed.h" 00018 00019 DigitalOut led(LED1); // ON BOARD LED 00020 InterruptIn btn(USER_BUTTON); // ON BOARD BUTTON PORT PC_13 00021 //INTERRUPT REGISTERATION 00022 00023 Semaphore updates(0); //SEMAPHORE OBJECT CREATE = SHARE RESOURCE 0 00024 //NO SHARE RESOURCE ONLY ISR 00025 00026 void do_something() { //ISR FUNCTION 00027 // release the semaphore 00028 updates.release(); // NOW V=1 00029 } 00030 00031 int main() { 00032 btn.fall(&do_something); 00033 00034 while (1) { 00035 // wait for the semaphore to be released from the ISR 00036 uint32_t v = updates.wait(); //RETURN STORE IN V 00037 00038 // now this runs on the main thread, and is safe 00039 if(v == 1) 00040 00041 { 00042 led = !led; //LED TOGGLE 00043 printf("Toggle LED!\r\n"); //SERIAL PRINT 00044 } 00045 } 00046 }
Generated on Thu Jul 21 2022 14:58:15 by 1.7.2