simple semaphore demo with lpc4337 board

Dependencies:   ST7567 lpc4337_mbed_os_semaphore_demo

Dependents:   lpc4337_mbed_os_semaphore_demo

Committer:
uLipe
Date:
Mon Oct 03 23:10:03 2016 +0000
Revision:
3:bef2357db2d6
Parent:
2:4989b5396fb9
revert changes

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 2:4989b5396fb9 53 /* display 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 2:4989b5396fb9 59
uLipe 2:4989b5396fb9 60 /* put a dumming process in order to consume CPU */
uLipe 2:4989b5396fb9 61 for(int i = 0; i < 0x3FFFFFF; i++) (void)0;
uLipe 2:4989b5396fb9 62
uLipe 0:d767141a0a9c 63 rt_sema.wait();
uLipe 0:d767141a0a9c 64 }
uLipe 0:d767141a0a9c 65
uLipe 0:d767141a0a9c 66 }
uLipe 0:d767141a0a9c 67
uLipe 0:d767141a0a9c 68 /**
uLipe 0:d767141a0a9c 69 * @brief high prio task function
uLipe 0:d767141a0a9c 70 */
uLipe 0:d767141a0a9c 71 static void hp_task(void){
uLipe 0:d767141a0a9c 72 disp.locate(0, FONT_HEIGHT * 3);
uLipe 0:d767141a0a9c 73 disp.printf(hp_message);
uLipe 0:d767141a0a9c 74 hp_sema.wait();
uLipe 0:d767141a0a9c 75
uLipe 0:d767141a0a9c 76
uLipe 0:d767141a0a9c 77 for(;;) {
uLipe 0:d767141a0a9c 78
uLipe 0:d767141a0a9c 79 /* dsiplay the semaphore status */
uLipe 0:d767141a0a9c 80 disp.locate((sizeof(lp_message) * FONT_WIDTH), FONT_HEIGHT * 4);
uLipe 0:d767141a0a9c 81 disp.printf("WAIT!");
uLipe 0:d767141a0a9c 82
uLipe 0:d767141a0a9c 83 disp.locate((sizeof(hp_message) * FONT_WIDTH), FONT_HEIGHT * 3);
uLipe 0:d767141a0a9c 84 disp.printf("TOOK!");
uLipe 2:4989b5396fb9 85
uLipe 2:4989b5396fb9 86 /* put a dumming process in order to consume CPU */
uLipe 2:4989b5396fb9 87 for(int i = 0; i < 0x3FFFFFF; i++) (void)0;
uLipe 2:4989b5396fb9 88
uLipe 0:d767141a0a9c 89 hp_sema.wait();
uLipe 0:d767141a0a9c 90 }
uLipe 0:d767141a0a9c 91 }
uLipe 0:d767141a0a9c 92
uLipe 0:d767141a0a9c 93 /**
uLipe 0:d767141a0a9c 94 * @brief normal prio task function
uLipe 0:d767141a0a9c 95 */
uLipe 0:d767141a0a9c 96 static void np_task(void) {
uLipe 0:d767141a0a9c 97
uLipe 0:d767141a0a9c 98 disp.locate(0, FONT_HEIGHT * 4);
uLipe 0:d767141a0a9c 99 disp.printf(lp_message);
uLipe 0:d767141a0a9c 100
uLipe 0:d767141a0a9c 101 disp.locate((sizeof(lp_message) * FONT_WIDTH), FONT_HEIGHT * 4);
uLipe 0:d767141a0a9c 102 disp.printf("RUNN!");
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(hp_message) * FONT_WIDTH), FONT_HEIGHT * 3);
uLipe 0:d767141a0a9c 106 disp.printf("WAIT!");
uLipe 0:d767141a0a9c 107
uLipe 0:d767141a0a9c 108
uLipe 0:d767141a0a9c 109 for(;;) {
uLipe 0:d767141a0a9c 110 rt_sema.release();
uLipe 0:d767141a0a9c 111 disp.locate((sizeof(rt_message) * FONT_WIDTH), FONT_HEIGHT * 2);
uLipe 0:d767141a0a9c 112 disp.printf("WAIT!");
uLipe 0:d767141a0a9c 113 disp.locate((sizeof(lp_message) * FONT_WIDTH), FONT_HEIGHT * 4);
uLipe 0:d767141a0a9c 114 disp.printf("RUNN!");
uLipe 2:4989b5396fb9 115 Thread::wait(1000);
uLipe 0:d767141a0a9c 116
uLipe 0:d767141a0a9c 117
uLipe 0:d767141a0a9c 118 hp_sema.release();
uLipe 0:d767141a0a9c 119 disp.locate((sizeof(hp_message) * FONT_WIDTH), FONT_HEIGHT * 3);
uLipe 0:d767141a0a9c 120 disp.printf("WAIT!");
uLipe 0:d767141a0a9c 121 disp.locate((sizeof(lp_message) * FONT_WIDTH), FONT_HEIGHT * 4);
uLipe 0:d767141a0a9c 122 disp.printf("RUNN!");
uLipe 2:4989b5396fb9 123 Thread::wait(1000);
uLipe 0:d767141a0a9c 124
uLipe 0:d767141a0a9c 125 }
uLipe 0:d767141a0a9c 126 }
uLipe 0:d767141a0a9c 127
uLipe 0:d767141a0a9c 128 /**
uLipe 0:d767141a0a9c 129 * @brief main loop
uLipe 0:d767141a0a9c 130 */
uLipe 0:d767141a0a9c 131 int main(void) {
uLipe 0:d767141a0a9c 132 const char banner[] = {"Embarcados MBED-OS\0"};
uLipe 0:d767141a0a9c 133
uLipe 0:d767141a0a9c 134 /* configures the display */
uLipe 0:d767141a0a9c 135 disp.cls();
uLipe 0:d767141a0a9c 136 disp.set_contrast(0x35);
uLipe 0:d767141a0a9c 137 disp.locate((LCD_WIDTH - (sizeof(banner) * FONT_WIDTH)) / 2, (LCD_HEIGHT/2) - (FONT_HEIGHT/2));
uLipe 0:d767141a0a9c 138 disp.printf(banner);
uLipe 0:d767141a0a9c 139
uLipe 0:d767141a0a9c 140 Thread::wait(2500);
uLipe 0:d767141a0a9c 141 disp.cls();
uLipe 0:d767141a0a9c 142
uLipe 0:d767141a0a9c 143 /* starts the three tasks */
uLipe 0:d767141a0a9c 144 real_time_thread.start(rt_task);
uLipe 0:d767141a0a9c 145 high_prio_thread.start(hp_task);
uLipe 0:d767141a0a9c 146 low_prio_thread.start(np_task);
uLipe 0:d767141a0a9c 147
uLipe 0:d767141a0a9c 148
uLipe 0:d767141a0a9c 149 return 0;
uLipe 0:d767141a0a9c 150 }
uLipe 0:d767141a0a9c 151