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

Committer:
radhey04ec
Date:
Sun Jul 12 06:35:41 2020 +0000
Revision:
0:090c812cb33b
PRINTF() WITH ISR ; SEMAPHORE BASIC USAGE; HOW HANDLE MUTEX GUARD FUNCTION WHEN call from ISR ??; ; JAYDEEP SHAH; radhey04ec@gmail.com;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
radhey04ec 0:090c812cb33b 1 //USE OF PRINTF() STATEMENT IN MBED WITH ISR
radhey04ec 0:090c812cb33b 2
radhey04ec 0:090c812cb33b 3 //method : semaphore
radhey04ec 0:090c812cb33b 4
radhey04ec 0:090c812cb33b 5 /* NOTE : PRINTF() IS PART OF STDIO.H LIBRARY
radhey04ec 0:090c812cb33b 6 AND THIS LIBRARY PROTECTED BY MUTEX GUARD, SO YOU CAN NOT CALL PRINTF() FROM
radhey04ec 0:090c812cb33b 7 ISR FUNCTION.
radhey04ec 0:090c812cb33b 8 SIMPLE WAY IS USE SOMETYPE OF SIGNAL OR FLAG AND PRINTF() OUTSIDE ISR depends on
radhey04ec 0:090c812cb33b 9 flag and signal */
radhey04ec 0:090c812cb33b 10
radhey04ec 0:090c812cb33b 11 //USE SERIAL TERMINAL WITH 9600 BAUD RATE 8-N-1 FORMAT
radhey04ec 0:090c812cb33b 12
radhey04ec 0:090c812cb33b 13 //Created by : JAYDEEP SHAH --radhey04ec@gmail.com
radhey04ec 0:090c812cb33b 14
radhey04ec 0:090c812cb33b 15
radhey04ec 0:090c812cb33b 16 //Library Added :::::
radhey04ec 0:090c812cb33b 17 #include "mbed.h"
radhey04ec 0:090c812cb33b 18
radhey04ec 0:090c812cb33b 19 DigitalOut led(LED1); // ON BOARD LED
radhey04ec 0:090c812cb33b 20 InterruptIn btn(USER_BUTTON); // ON BOARD BUTTON PORT PC_13
radhey04ec 0:090c812cb33b 21 //INTERRUPT REGISTERATION
radhey04ec 0:090c812cb33b 22
radhey04ec 0:090c812cb33b 23 Semaphore updates(0); //SEMAPHORE OBJECT CREATE = SHARE RESOURCE 0
radhey04ec 0:090c812cb33b 24 //NO SHARE RESOURCE ONLY ISR
radhey04ec 0:090c812cb33b 25
radhey04ec 0:090c812cb33b 26 void do_something() { //ISR FUNCTION
radhey04ec 0:090c812cb33b 27 // release the semaphore
radhey04ec 0:090c812cb33b 28 updates.release(); // NOW V=1
radhey04ec 0:090c812cb33b 29 }
radhey04ec 0:090c812cb33b 30
radhey04ec 0:090c812cb33b 31 int main() {
radhey04ec 0:090c812cb33b 32 btn.fall(&do_something);
radhey04ec 0:090c812cb33b 33
radhey04ec 0:090c812cb33b 34 while (1) {
radhey04ec 0:090c812cb33b 35 // wait for the semaphore to be released from the ISR
radhey04ec 0:090c812cb33b 36 uint32_t v = updates.wait(); //RETURN STORE IN V
radhey04ec 0:090c812cb33b 37
radhey04ec 0:090c812cb33b 38 // now this runs on the main thread, and is safe
radhey04ec 0:090c812cb33b 39 if(v == 1)
radhey04ec 0:090c812cb33b 40
radhey04ec 0:090c812cb33b 41 {
radhey04ec 0:090c812cb33b 42 led = !led; //LED TOGGLE
radhey04ec 0:090c812cb33b 43 printf("Toggle LED!\r\n"); //SERIAL PRINT
radhey04ec 0:090c812cb33b 44 }
radhey04ec 0:090c812cb33b 45 }
radhey04ec 0:090c812cb33b 46 }