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
- Committer:
- radhey04ec
- Date:
- 2020-07-15
- Revision:
- 1:d3e6b9a8a9c2
- Parent:
- 0:2de8a221f1d2
File content as of revision 1:d3e6b9a8a9c2:
/*SEMAPHORE ADVANCE PART 4 THIS PROGRAM DEDICATED TO COUNTING SEMAPHORE NO MENTIONED WHILE CREATING SEMAPHORE IS ACT LIKE COUNTER, WHILE COUNTER > 0, THREAD/PROCESS CAN ACCESS RESOURCES. IF COUNT = 1 IT ACT AS BINARY SEMAPHORE. */ //OUTPUT --> PUTTY / COOLTERM / HYPERTTERMINAL //TARGET : SOFTWARE = MBED ONLINE , HARDWARE : NUCLEO - 64 //SEMAPHORE - ADVANCE PART 4 //PART -4 JAYDEEP SHAH #include "mbed.h" //MBED LIBRARY #include "rtos.h" // RTOS LIBRARY Semaphore two_slots(2); //CREATE SEMAPHORE OBJECT WITH N=2 , TWO PROCESS CAN ACCESS CRITICAL SECTION void test_thread(void const *name) { //PROCESS OR FUNCTION while (true) { printf("\n BEFORE SEMAPHORE GUARD -- THREAD NAME %s\n\r", (const char*)name); two_slots.wait(); //SEMAPHORE GUARD --> PROCESS CAN CROSS ONLY IF N>0 // N = N -1 --> COUNTER DECREMENT IF PROCESS CROSS printf("\n SEMAPHORE CROSS AND SLEPP THREAD = %s\n\r", (const char*)name); //PRINT STRING AFTER TYPE CONVERSION Thread::wait(1000); //THREAD SLEEP FOR 1 SEC --> THREAD SLEEP two_slots.release(); //SEMAPHORE RELEASE //IF SEMAPHORE RELEASE --> N = N +1 printf("\n SEMAPHORE RELEASE THREAD = %s\n\r", (const char*)name); //AFTER SLEEP } } int main (void) { // MAIN THREAD CREATE AND START Thread t2; // CREATEHREAD OBJECT Thread t3; // CREATE THREAD OBJECT t2.start(callback(test_thread, (void *)"Th 2")); // THREAD START - CALL THE FUNCTION WITH CALLBACK COMMAND AND PASS STRING AS ARGUMENT t3.start(callback(test_thread, (void *)"Th 3")); // THREAD START & FUNCTION CALL SAME AS ABOVE test_thread((void *)"Th 1"); // FUNCTION CALL //MAIN THREAD FIRST START WITH NORMAL PRIORITY } // YOU CAN TEST THE PROGRAM OUTPUT ON SERIAL MONITOR WITH TIME STAMP //FOR MORE CLARIFICATION , TRY TO CHANGE SEMAPHORE COUNTER VALUE AND CHECK OUTPUT