simple semaphore demo with lpc4337 board

Dependencies:   ST7567 lpc4337_mbed_os_semaphore_demo

Dependents:   lpc4337_mbed_os_semaphore_demo

Committer:
uLipe
Date:
Wed Sep 28 16:28:49 2016 +0000
Revision:
0:d767141a0a9c
Child:
1:c8817129932e
Child:
2:4989b5396fb9
first commit, not tested yet

Who changed what in which revision?

UserRevisionLine numberNew contents of line
uLipe 0:d767141a0a9c 1 /**
uLipe 0:d767141a0a9c 2 * @brief Simple Semaphore using the mbed os demo
uLipe 0:d767141a0a9c 3 */
uLipe 0:d767141a0a9c 4 #include "mbed.h"
uLipe 0:d767141a0a9c 5 #include "rtos.h"
uLipe 0:d767141a0a9c 6 #include "ST7567.h"
uLipe 0:d767141a0a9c 7
uLipe 0:d767141a0a9c 8 /* LCD and font parameters */
uLipe 0:d767141a0a9c 9 #define LCD_HEIGHT 64
uLipe 0:d767141a0a9c 10 #define LCD_WIDTH 128
uLipe 0:d767141a0a9c 11 #define FONT_HEIGHT 10
uLipe 0:d767141a0a9c 12 #define FONT_WIDTH 5
uLipe 0:d767141a0a9c 13
uLipe 0:d767141a0a9c 14
uLipe 0:d767141a0a9c 15 /* allocate statically stacks for the three threads */
uLipe 0:d767141a0a9c 16 unsigned char rt_stk[1024];
uLipe 0:d767141a0a9c 17 unsigned char hp_stk[1024];
uLipe 0:d767141a0a9c 18 unsigned char lp_stk[1024];
uLipe 0:d767141a0a9c 19
uLipe 0:d767141a0a9c 20 /* creates three tread objects with different priorities */
uLipe 0:d767141a0a9c 21 Thread real_time_thread(osPriorityRealtime, 1024, &rt_stk[0]);
uLipe 0:d767141a0a9c 22 Thread high_prio_thread(osPriorityHigh, 1024, &hp_stk[0]);
uLipe 0:d767141a0a9c 23 Thread low_prio_thread(osPriorityNormal, 1024, &lp_stk[0]);
uLipe 0:d767141a0a9c 24
uLipe 0:d767141a0a9c 25
uLipe 0:d767141a0a9c 26 /* creates semaphores to explore the capabilites of synchronization */
uLipe 0:d767141a0a9c 27 Semaphore rt_sema;
uLipe 0:d767141a0a9c 28 Semaphore hp_sema;
uLipe 0:d767141a0a9c 29 const char rt_message[] = {"rt_task() sema:\0"};
uLipe 0:d767141a0a9c 30 const char hp_message[] = {"hp_task() sema:\0"};
uLipe 0:d767141a0a9c 31 const char lp_message[] = {"np_task() exec:\0"};
uLipe 0:d767141a0a9c 32
uLipe 0:d767141a0a9c 33
uLipe 0:d767141a0a9c 34
uLipe 0:d767141a0a9c 35 /* creates a instance of display */
uLipe 0:d767141a0a9c 36 ST7567 disp(D11, D13, D12, D9, D10);
uLipe 0:d767141a0a9c 37
uLipe 0:d767141a0a9c 38
uLipe 0:d767141a0a9c 39
uLipe 0:d767141a0a9c 40
uLipe 0:d767141a0a9c 41 /**
uLipe 0:d767141a0a9c 42 * @brief real time prio task function
uLipe 0:d767141a0a9c 43 */
uLipe 0:d767141a0a9c 44 static void rt_task(void) {
uLipe 0:d767141a0a9c 45
uLipe 0:d767141a0a9c 46 disp.locate(0, FONT_HEIGHT * 2);
uLipe 0:d767141a0a9c 47 disp.printf(rt_message);
uLipe 0:d767141a0a9c 48 rt_sema.wait();
uLipe 0:d767141a0a9c 49
uLipe 0:d767141a0a9c 50
uLipe 0:d767141a0a9c 51 for(;;) {
uLipe 0:d767141a0a9c 52
uLipe 0:d767141a0a9c 53 /* dsiplay the semaphore status */
uLipe 0:d767141a0a9c 54 disp.locate((sizeof(lp_message) * FONT_WIDTH), FONT_HEIGHT * 4);
uLipe 0:d767141a0a9c 55 disp.printf("WAIT!");
uLipe 0:d767141a0a9c 56
uLipe 0:d767141a0a9c 57 disp.locate((sizeof(rt_message) * FONT_WIDTH), FONT_HEIGHT * 2);
uLipe 0:d767141a0a9c 58 disp.printf("TOOK!");
uLipe 0:d767141a0a9c 59 rt_sema.wait();
uLipe 0:d767141a0a9c 60 }
uLipe 0:d767141a0a9c 61
uLipe 0:d767141a0a9c 62 }
uLipe 0:d767141a0a9c 63
uLipe 0:d767141a0a9c 64 /**
uLipe 0:d767141a0a9c 65 * @brief high prio task function
uLipe 0:d767141a0a9c 66 */
uLipe 0:d767141a0a9c 67 static void hp_task(void){
uLipe 0:d767141a0a9c 68 disp.locate(0, FONT_HEIGHT * 3);
uLipe 0:d767141a0a9c 69 disp.printf(hp_message);
uLipe 0:d767141a0a9c 70 hp_sema.wait();
uLipe 0:d767141a0a9c 71
uLipe 0:d767141a0a9c 72
uLipe 0:d767141a0a9c 73 for(;;) {
uLipe 0:d767141a0a9c 74
uLipe 0:d767141a0a9c 75 /* dsiplay the semaphore status */
uLipe 0:d767141a0a9c 76 disp.locate((sizeof(lp_message) * FONT_WIDTH), FONT_HEIGHT * 4);
uLipe 0:d767141a0a9c 77 disp.printf("WAIT!");
uLipe 0:d767141a0a9c 78
uLipe 0:d767141a0a9c 79 disp.locate((sizeof(hp_message) * FONT_WIDTH), FONT_HEIGHT * 3);
uLipe 0:d767141a0a9c 80 disp.printf("TOOK!");
uLipe 0:d767141a0a9c 81 hp_sema.wait();
uLipe 0:d767141a0a9c 82 }
uLipe 0:d767141a0a9c 83 }
uLipe 0:d767141a0a9c 84
uLipe 0:d767141a0a9c 85 /**
uLipe 0:d767141a0a9c 86 * @brief normal prio task function
uLipe 0:d767141a0a9c 87 */
uLipe 0:d767141a0a9c 88 static void np_task(void) {
uLipe 0:d767141a0a9c 89
uLipe 0:d767141a0a9c 90 disp.locate(0, FONT_HEIGHT * 4);
uLipe 0:d767141a0a9c 91 disp.printf(lp_message);
uLipe 0:d767141a0a9c 92
uLipe 0:d767141a0a9c 93 disp.locate((sizeof(lp_message) * FONT_WIDTH), FONT_HEIGHT * 4);
uLipe 0:d767141a0a9c 94 disp.printf("RUNN!");
uLipe 0:d767141a0a9c 95 disp.locate((sizeof(rt_message) * FONT_WIDTH), FONT_HEIGHT * 2);
uLipe 0:d767141a0a9c 96 disp.printf("WAIT!");
uLipe 0:d767141a0a9c 97 disp.locate((sizeof(hp_message) * FONT_WIDTH), FONT_HEIGHT * 3);
uLipe 0:d767141a0a9c 98 disp.printf("WAIT!");
uLipe 0:d767141a0a9c 99
uLipe 0:d767141a0a9c 100
uLipe 0:d767141a0a9c 101 for(;;) {
uLipe 0:d767141a0a9c 102 rt_sema.release();
uLipe 0:d767141a0a9c 103 disp.locate((sizeof(rt_message) * FONT_WIDTH), FONT_HEIGHT * 2);
uLipe 0:d767141a0a9c 104 disp.printf("WAIT!");
uLipe 0:d767141a0a9c 105 disp.locate((sizeof(lp_message) * FONT_WIDTH), FONT_HEIGHT * 4);
uLipe 0:d767141a0a9c 106 disp.printf("RUNN!");
uLipe 0:d767141a0a9c 107
uLipe 0:d767141a0a9c 108
uLipe 0:d767141a0a9c 109 hp_sema.release();
uLipe 0:d767141a0a9c 110 disp.locate((sizeof(hp_message) * FONT_WIDTH), FONT_HEIGHT * 3);
uLipe 0:d767141a0a9c 111 disp.printf("WAIT!");
uLipe 0:d767141a0a9c 112 disp.locate((sizeof(lp_message) * FONT_WIDTH), FONT_HEIGHT * 4);
uLipe 0:d767141a0a9c 113 disp.printf("RUNN!");
uLipe 0:d767141a0a9c 114
uLipe 0:d767141a0a9c 115 }
uLipe 0:d767141a0a9c 116 }
uLipe 0:d767141a0a9c 117
uLipe 0:d767141a0a9c 118 /**
uLipe 0:d767141a0a9c 119 * @brief main loop
uLipe 0:d767141a0a9c 120 */
uLipe 0:d767141a0a9c 121 int main(void) {
uLipe 0:d767141a0a9c 122 const char banner[] = {"Embarcados MBED-OS\0"};
uLipe 0:d767141a0a9c 123
uLipe 0:d767141a0a9c 124 /* configures the display */
uLipe 0:d767141a0a9c 125 disp.cls();
uLipe 0:d767141a0a9c 126 disp.set_contrast(0x35);
uLipe 0:d767141a0a9c 127 disp.locate((LCD_WIDTH - (sizeof(banner) * FONT_WIDTH)) / 2, (LCD_HEIGHT/2) - (FONT_HEIGHT/2));
uLipe 0:d767141a0a9c 128 disp.printf(banner);
uLipe 0:d767141a0a9c 129
uLipe 0:d767141a0a9c 130 Thread::wait(2500);
uLipe 0:d767141a0a9c 131 disp.cls();
uLipe 0:d767141a0a9c 132
uLipe 0:d767141a0a9c 133 /* starts the three tasks */
uLipe 0:d767141a0a9c 134 real_time_thread.start(rt_task);
uLipe 0:d767141a0a9c 135 high_prio_thread.start(hp_task);
uLipe 0:d767141a0a9c 136 low_prio_thread.start(np_task);
uLipe 0:d767141a0a9c 137
uLipe 0:d767141a0a9c 138
uLipe 0:d767141a0a9c 139 return 0;
uLipe 0:d767141a0a9c 140 }
uLipe 0:d767141a0a9c 141