simple mutex demo on lpc4337

Dependencies:   ST7567

Fork of lpc4337_mbed_os_semaphore_demo by Felipe Neves

Committer:
uLipe
Date:
Mon Oct 03 23:08:57 2016 +0000
Revision:
1:c8817129932e
Parent:
0:d767141a0a9c
first working commit

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 1:c8817129932e 14 #define RT_TASK 0x8001
uLipe 1:c8817129932e 15 #define HP_TASK 0x8002
uLipe 1:c8817129932e 16
uLipe 0:d767141a0a9c 17
uLipe 0:d767141a0a9c 18 /* allocate statically stacks for the three threads */
uLipe 0:d767141a0a9c 19 unsigned char rt_stk[1024];
uLipe 0:d767141a0a9c 20 unsigned char hp_stk[1024];
uLipe 0:d767141a0a9c 21 unsigned char lp_stk[1024];
uLipe 0:d767141a0a9c 22
uLipe 0:d767141a0a9c 23 /* creates three tread objects with different priorities */
uLipe 0:d767141a0a9c 24 Thread real_time_thread(osPriorityRealtime, 1024, &rt_stk[0]);
uLipe 0:d767141a0a9c 25 Thread high_prio_thread(osPriorityHigh, 1024, &hp_stk[0]);
uLipe 0:d767141a0a9c 26 Thread low_prio_thread(osPriorityNormal, 1024, &lp_stk[0]);
uLipe 0:d767141a0a9c 27
uLipe 0:d767141a0a9c 28
uLipe 1:c8817129932e 29 /* crates a mutex that will help us to controll a resource access */
uLipe 1:c8817129932e 30 Mutex message_lock;
uLipe 0:d767141a0a9c 31
uLipe 1:c8817129932e 32 /* console buffer which has shared access */
uLipe 1:c8817129932e 33 char console_buffer[64] = {0};
uLipe 0:d767141a0a9c 34
uLipe 0:d767141a0a9c 35
uLipe 0:d767141a0a9c 36 /* creates a instance of display */
uLipe 0:d767141a0a9c 37 ST7567 disp(D11, D13, D12, D9, D10);
uLipe 0:d767141a0a9c 38
uLipe 1:c8817129932e 39 /**
uLipe 1:c8817129932e 40 * @brief prints the current task which executes:
uLipe 1:c8817129932e 41 */
uLipe 1:c8817129932e 42 static void log_thread(int t, int noof_exec) {
uLipe 1:c8817129932e 43
uLipe 1:c8817129932e 44 /* try to take the mutex, or wait until becomes avalialble*/
uLipe 1:c8817129932e 45
uLipe 1:c8817129932e 46
uLipe 1:c8817129932e 47 disp.cls();
uLipe 1:c8817129932e 48
uLipe 1:c8817129932e 49 disp.locate(0, FONT_HEIGHT * 1);
uLipe 1:c8817129932e 50 disp.printf("Thread status: ");
uLipe 0:d767141a0a9c 51
uLipe 1:c8817129932e 52 disp.locate(0, FONT_HEIGHT * 2);
uLipe 1:c8817129932e 53 if(t == RT_TASK) {
uLipe 1:c8817129932e 54 message_lock.lock();
uLipe 1:c8817129932e 55 strcpy(&console_buffer[0], "-current thread: rt_task();\0" );
uLipe 1:c8817129932e 56 message_lock.unlock();
uLipe 1:c8817129932e 57 disp.printf("%s", console_buffer);
uLipe 1:c8817129932e 58 } else {
uLipe 1:c8817129932e 59 message_lock.lock();
uLipe 1:c8817129932e 60 strcpy(&console_buffer[0], "-current thread: hp_task();\0" );
uLipe 1:c8817129932e 61 message_lock.unlock();
uLipe 1:c8817129932e 62 disp.printf("%s", console_buffer);
uLipe 1:c8817129932e 63 }
uLipe 1:c8817129932e 64
uLipe 1:c8817129932e 65 disp.locate(0, FONT_HEIGHT * 3);
uLipe 1:c8817129932e 66 disp.printf("-noof executions: %d ;", noof_exec);
uLipe 1:c8817129932e 67 disp.locate(0, FONT_HEIGHT * 4);
uLipe 1:c8817129932e 68 disp.printf("-mutex status: taken .");
uLipe 1:c8817129932e 69
uLipe 1:c8817129932e 70
uLipe 1:c8817129932e 71 }
uLipe 0:d767141a0a9c 72
uLipe 0:d767141a0a9c 73
uLipe 0:d767141a0a9c 74 /**
uLipe 0:d767141a0a9c 75 * @brief real time prio task function
uLipe 0:d767141a0a9c 76 */
uLipe 1:c8817129932e 77 static void rt_task(void) {
uLipe 1:c8817129932e 78 int execs = 0;
uLipe 0:d767141a0a9c 79
uLipe 0:d767141a0a9c 80
uLipe 0:d767141a0a9c 81 for(;;) {
uLipe 1:c8817129932e 82 execs++;
uLipe 1:c8817129932e 83 log_thread(RT_TASK, execs);
uLipe 1:c8817129932e 84 Thread::wait(2000);
uLipe 0:d767141a0a9c 85 }
uLipe 0:d767141a0a9c 86
uLipe 0:d767141a0a9c 87 }
uLipe 0:d767141a0a9c 88
uLipe 0:d767141a0a9c 89 /**
uLipe 0:d767141a0a9c 90 * @brief high prio task function
uLipe 0:d767141a0a9c 91 */
uLipe 0:d767141a0a9c 92 static void hp_task(void){
uLipe 0:d767141a0a9c 93
uLipe 1:c8817129932e 94 int execs = 0;
uLipe 0:d767141a0a9c 95
uLipe 0:d767141a0a9c 96 for(;;) {
uLipe 1:c8817129932e 97 execs++;
uLipe 1:c8817129932e 98 log_thread(HP_TASK, execs);
uLipe 1:c8817129932e 99 Thread::wait(2000);
uLipe 0:d767141a0a9c 100 }
uLipe 0:d767141a0a9c 101 }
uLipe 0:d767141a0a9c 102
uLipe 0:d767141a0a9c 103 /**
uLipe 0:d767141a0a9c 104 * @brief normal prio task function
uLipe 0:d767141a0a9c 105 */
uLipe 0:d767141a0a9c 106 static void np_task(void) {
uLipe 1:c8817129932e 107
uLipe 1:c8817129932e 108 Thread::wait(0);
uLipe 0:d767141a0a9c 109
uLipe 0:d767141a0a9c 110 for(;;) {
uLipe 0:d767141a0a9c 111
uLipe 0:d767141a0a9c 112 }
uLipe 0:d767141a0a9c 113 }
uLipe 0:d767141a0a9c 114
uLipe 0:d767141a0a9c 115 /**
uLipe 0:d767141a0a9c 116 * @brief main loop
uLipe 0:d767141a0a9c 117 */
uLipe 0:d767141a0a9c 118 int main(void) {
uLipe 0:d767141a0a9c 119 const char banner[] = {"Embarcados MBED-OS\0"};
uLipe 0:d767141a0a9c 120
uLipe 0:d767141a0a9c 121 /* configures the display */
uLipe 0:d767141a0a9c 122 disp.cls();
uLipe 0:d767141a0a9c 123 disp.set_contrast(0x35);
uLipe 0:d767141a0a9c 124 disp.locate((LCD_WIDTH - (sizeof(banner) * FONT_WIDTH)) / 2, (LCD_HEIGHT/2) - (FONT_HEIGHT/2));
uLipe 0:d767141a0a9c 125 disp.printf(banner);
uLipe 0:d767141a0a9c 126
uLipe 0:d767141a0a9c 127 Thread::wait(2500);
uLipe 0:d767141a0a9c 128 disp.cls();
uLipe 0:d767141a0a9c 129
uLipe 0:d767141a0a9c 130 /* starts the three tasks */
uLipe 0:d767141a0a9c 131 real_time_thread.start(rt_task);
uLipe 0:d767141a0a9c 132 high_prio_thread.start(hp_task);
uLipe 0:d767141a0a9c 133 low_prio_thread.start(np_task);
uLipe 0:d767141a0a9c 134
uLipe 0:d767141a0a9c 135
uLipe 0:d767141a0a9c 136 return 0;
uLipe 0:d767141a0a9c 137 }
uLipe 0:d767141a0a9c 138