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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }