Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of lpc4337_mbed_os_semaphore_demo by
Revision 1:c8817129932e, committed 2016-10-03
- Comitter:
 - uLipe
 - Date:
 - Mon Oct 03 23:08:57 2016 +0000
 - Parent:
 - 0:d767141a0a9c
 - Commit message:
 - first working commit
 
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file | 
diff -r d767141a0a9c -r c8817129932e main.cpp
--- a/main.cpp	Wed Sep 28 16:28:49 2016 +0000
+++ b/main.cpp	Mon Oct 03 23:08:57 2016 +0000
@@ -11,6 +11,9 @@
 #define FONT_HEIGHT         10
 #define FONT_WIDTH          5
 
+#define RT_TASK             0x8001
+#define HP_TASK             0x8002
+
 
 /* allocate statically stacks for the three threads */
 unsigned char rt_stk[1024];
@@ -23,40 +26,62 @@
 Thread low_prio_thread(osPriorityNormal, 1024, &lp_stk[0]);
 
 
-/* creates semaphores to explore the capabilites of synchronization */
-Semaphore rt_sema;
-Semaphore hp_sema;
-const char rt_message[] = {"rt_task() sema:\0"};
-const char hp_message[] = {"hp_task() sema:\0"};
-const char lp_message[] = {"np_task() exec:\0"};
+/* crates a mutex that will help us to controll a resource access */
+Mutex message_lock;
 
+/* console buffer which has shared access */
+char console_buffer[64] = {0};
 
 
 /* creates a instance of display */
 ST7567  disp(D11, D13, D12, D9, D10);
 
+/**
+ * @brief prints the current task which executes:
+ */
+static void log_thread(int t, int noof_exec) {
+    
+    /* try to take the mutex, or wait until becomes avalialble*/
+    
+    
+    disp.cls();
+    
+    disp.locate(0, FONT_HEIGHT * 1);
+    disp.printf("Thread status: ");
 
+    disp.locate(0, FONT_HEIGHT * 2);  
+    if(t ==  RT_TASK) {
+        message_lock.lock();
+        strcpy(&console_buffer[0], "-current thread: rt_task();\0" );    
+        message_lock.unlock();
+        disp.printf("%s", console_buffer);
+    } else {
+        message_lock.lock();
+        strcpy(&console_buffer[0], "-current thread: hp_task();\0" );    
+        message_lock.unlock();
+        disp.printf("%s", console_buffer);
+    }     
+
+    disp.locate(0, FONT_HEIGHT * 3);
+    disp.printf("-noof executions: %d ;", noof_exec);  
+    disp.locate(0, FONT_HEIGHT * 4);
+    disp.printf("-mutex status: taken .");
+    
+
+}
 
 
 /**
  * @brief real time prio task function 
  */
-static void rt_task(void) {
-
-    disp.locate(0, FONT_HEIGHT * 2);            
-    disp.printf(rt_message);
-    rt_sema.wait();               
+static void rt_task(void) {    
+    int execs = 0;
     
     
     for(;;) {
-            
-         /* dsiplay the semaphore status */
-         disp.locate((sizeof(lp_message) * FONT_WIDTH), FONT_HEIGHT * 4);
-         disp.printf("WAIT!");
-
-         disp.locate((sizeof(rt_message) * FONT_WIDTH), FONT_HEIGHT * 2);
-         disp.printf("TOOK!");
-         rt_sema.wait();           
+        execs++;
+        log_thread(RT_TASK, execs);
+        Thread::wait(2000);
     }
     
 }
@@ -65,20 +90,13 @@
  * @brief high prio task function 
  */
 static void hp_task(void){    
-    disp.locate(0, FONT_HEIGHT * 3);
-    disp.printf(hp_message);
-    hp_sema.wait();           
 
+    int execs = 0;
     
     for(;;) {
-
-         /* dsiplay the semaphore status */
-         disp.locate((sizeof(lp_message) * FONT_WIDTH), FONT_HEIGHT * 4);
-         disp.printf("WAIT!");
-
-         disp.locate((sizeof(hp_message) * FONT_WIDTH), FONT_HEIGHT * 3);
-         disp.printf("TOOK!");  
-         hp_sema.wait();       
+        execs++;
+        log_thread(HP_TASK, execs);
+        Thread::wait(2000);
     }
 }
 
@@ -86,31 +104,10 @@
  * @brief normal prio task function 
  */
 static void np_task(void) {
-        
-    disp.locate(0, FONT_HEIGHT * 4);
-    disp.printf(lp_message);
-
-    disp.locate((sizeof(lp_message) * FONT_WIDTH), FONT_HEIGHT * 4);
-    disp.printf("RUNN!");
-    disp.locate((sizeof(rt_message) * FONT_WIDTH), FONT_HEIGHT * 2);
-    disp.printf("WAIT!");
-    disp.locate((sizeof(hp_message) * FONT_WIDTH), FONT_HEIGHT * 3);
-    disp.printf("WAIT!");
-
+    
+    Thread::wait(0);        
     
     for(;;) {
-         rt_sema.release();        
-         disp.locate((sizeof(rt_message) * FONT_WIDTH), FONT_HEIGHT * 2);
-         disp.printf("WAIT!");
-         disp.locate((sizeof(lp_message) * FONT_WIDTH), FONT_HEIGHT * 4);
-         disp.printf("RUNN!");
-
-
-         hp_sema.release();          
-         disp.locate((sizeof(hp_message) * FONT_WIDTH), FONT_HEIGHT * 3);
-         disp.printf("WAIT!");
-         disp.locate((sizeof(lp_message) * FONT_WIDTH), FONT_HEIGHT * 4);
-         disp.printf("RUNN!");
          
     }
 }
    