SEMAPHORE ADVANCE PART 4 EXAMPLE OF COUNTING SEMAPHORE IN MBED OS FOR PROTECTING CRITICAL SECTION OF SHARED RESOURCES TARGET BOARD NUCLEO - 64 OS PLATFORM : MBED CREATED BY : JAYDEEP SHAH -- radhey04ec@gmail.com
main.cpp
00001 /*SEMAPHORE ADVANCE PART 4 00002 THIS PROGRAM DEDICATED TO COUNTING SEMAPHORE 00003 NO MENTIONED WHILE CREATING SEMAPHORE IS ACT LIKE COUNTER, WHILE COUNTER > 0, THREAD/PROCESS CAN ACCESS RESOURCES. 00004 IF COUNT = 1 IT ACT AS BINARY SEMAPHORE. 00005 */ 00006 00007 //OUTPUT --> PUTTY / COOLTERM / HYPERTTERMINAL 00008 //TARGET : SOFTWARE = MBED ONLINE , HARDWARE : NUCLEO - 64 00009 00010 //SEMAPHORE - ADVANCE PART 4 00011 //PART -4 JAYDEEP SHAH 00012 00013 #include "mbed.h" //MBED LIBRARY 00014 #include "rtos.h" // RTOS LIBRARY 00015 00016 Semaphore two_slots(2); //CREATE SEMAPHORE OBJECT WITH N=2 , TWO PROCESS CAN ACCESS CRITICAL SECTION 00017 00018 void test_thread(void const *name) { //PROCESS OR FUNCTION 00019 while (true) { 00020 printf("\n BEFORE SEMAPHORE GUARD -- THREAD NAME %s\n\r", (const char*)name); 00021 two_slots.wait(); //SEMAPHORE GUARD --> PROCESS CAN CROSS ONLY IF N>0 00022 00023 // N = N -1 --> COUNTER DECREMENT IF PROCESS CROSS 00024 printf("\n SEMAPHORE CROSS AND SLEPP THREAD = %s\n\r", (const char*)name); //PRINT STRING AFTER TYPE CONVERSION 00025 00026 Thread::wait(1000); //THREAD SLEEP FOR 1 SEC --> THREAD SLEEP 00027 00028 two_slots.release(); //SEMAPHORE RELEASE 00029 //IF SEMAPHORE RELEASE --> N = N +1 00030 00031 printf("\n SEMAPHORE RELEASE THREAD = %s\n\r", (const char*)name); //AFTER SLEEP 00032 } 00033 } 00034 00035 int main (void) { // MAIN THREAD CREATE AND START 00036 Thread t2; // CREATEHREAD OBJECT 00037 Thread t3; // CREATE THREAD OBJECT 00038 00039 t2.start(callback(test_thread, (void *)"Th 2")); // THREAD START - CALL THE FUNCTION WITH CALLBACK COMMAND AND PASS STRING AS ARGUMENT 00040 t3.start(callback(test_thread, (void *)"Th 3")); // THREAD START & FUNCTION CALL SAME AS ABOVE 00041 00042 test_thread((void *)"Th 1"); // FUNCTION CALL 00043 //MAIN THREAD FIRST START WITH NORMAL PRIORITY 00044 } 00045 00046 00047 // YOU CAN TEST THE PROGRAM OUTPUT ON SERIAL MONITOR WITH TIME STAMP 00048 //FOR MORE CLARIFICATION , TRY TO CHANGE SEMAPHORE COUNTER VALUE AND CHECK OUTPUT
Generated on Thu Jul 14 2022 10:39:01 by 1.7.2