Simple test program to get familiar with functionality of MBED RTOS on ST Nucleo-F411RE. Tasks for LED blinking, user button, temperature measurement with DS1620, temperature measurement with internal temperature sensor of ST32F411RE, ultrasonic distance measurement and displaying result on 16x2 TextLCD.

Dependencies:   DS1620_improved TextLCD_improved mbed-rtos mbed

Committer:
dzoni
Date:
Fri Dec 18 15:23:21 2015 +0000
Revision:
17:94c385ff2641
Parent:
15:a627638edd9c
Child:
18:be0130c42925
Bugfixes. Works but freezes after some time. Button task requires rewrite (InterruptIn).

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dzoni 9:645f0e517017 1 #include "mbed.h"
dzoni 9:645f0e517017 2 #include "rtos.h"
dzoni 9:645f0e517017 3
dzoni 9:645f0e517017 4 #include "tsk_button.h"
dzoni 9:645f0e517017 5 #include "tsk_display.h"
dzoni 9:645f0e517017 6 #include "tsk_dist.h"
dzoni 9:645f0e517017 7 #include "tsk_led.h"
dzoni 9:645f0e517017 8 #include "tsk_temp.h"
dzoni 17:94c385ff2641 9 #include "tsk_inttemp.h"
dzoni 11:e89f89c0920b 10
dzoni 11:e89f89c0920b 11 #define TASKS_NUMBER (sizeof(taskList)/sizeof(taskList[0]))
dzoni 11:e89f89c0920b 12
dzoni 9:645f0e517017 13 uint32_t uiCnt = 0;
dzoni 17:94c385ff2641 14 Mutex mutexDist;
dzoni 17:94c385ff2641 15 Mutex mutexTemp;
dzoni 17:94c385ff2641 16 Mutex mutexIntTemp;
dzoni 13:f62b10a6e1c5 17
dzoni 11:e89f89c0920b 18 struct task_definition_struct {
dzoni 11:e89f89c0920b 19 void(*task)(void const *args);
dzoni 15:a627638edd9c 20 uint32_t(*init)(void const *args); // Result: 1 = OK, 0 = FAIL
dzoni 11:e89f89c0920b 21 void *task_args; // NULL For DEFAULT (NULL)
dzoni 11:e89f89c0920b 22 void *init_args; // NULL For DEFAULT (NULL)
dzoni 11:e89f89c0920b 23 osPriority priority;
dzoni 11:e89f89c0920b 24 // uint32_t stack_size; // 0 for DEFAULT (DEFAULT_STACK_SIZE)
dzoni 11:e89f89c0920b 25 // unsigned char *stack_pointer; // NULL for DEFAULT (NULL)
dzoni 11:e89f89c0920b 26 uint32_t delay; // Delay on start from previous task
dzoni 11:e89f89c0920b 27 Thread *thread; // To be filled in during runtime
dzoni 11:e89f89c0920b 28 uint32_t retVal; // Return Value - to be filled in during runtime
dzoni 11:e89f89c0920b 29 };
dzoni 11:e89f89c0920b 30
dzoni 11:e89f89c0920b 31 static struct task_definition_struct taskList[] = {
dzoni 17:94c385ff2641 32 // { dist_thread, &initDist, NULL, NULL, osPriorityNormal, 100, NULL, 0 },
dzoni 17:94c385ff2641 33 { temp_thread, &initDS1620Temp, NULL, NULL, osPriorityNormal, 100, NULL, 0 },
dzoni 17:94c385ff2641 34 { inttemp_thread, &initIntTemp, NULL, NULL, osPriorityNormal, 100, NULL, 0 },
dzoni 17:94c385ff2641 35 // { button_thread, NULL, NULL, NULL, osPriorityNormal, 0, NULL, 0 },
dzoni 17:94c385ff2641 36 { led_thread, &initLed, NULL, NULL, osPriorityNormal, 100, NULL, 0 },
dzoni 17:94c385ff2641 37 { disp_thread, &initDisplay, NULL, NULL, osPriorityNormal, 100, NULL, 0 },
dzoni 11:e89f89c0920b 38 };
dzoni 11:e89f89c0920b 39
dzoni 11:e89f89c0920b 40 static uint32_t initTasks(void) {
dzoni 12:1de8b271e292 41 uint32_t i;
dzoni 12:1de8b271e292 42 uint32_t retval = 1;
dzoni 11:e89f89c0920b 43
dzoni 11:e89f89c0920b 44 for (i = 0; i < TASKS_NUMBER; i++) {
dzoni 12:1de8b271e292 45 if (taskList[i].init != NULL) {
dzoni 12:1de8b271e292 46 if ((taskList[i].retVal = ((*taskList[i].init)(taskList[i].init_args))) == 0)
dzoni 12:1de8b271e292 47 retval = 0;
dzoni 13:f62b10a6e1c5 48 } else {
dzoni 13:f62b10a6e1c5 49 taskList[i].retVal = 1;
dzoni 11:e89f89c0920b 50 }
dzoni 11:e89f89c0920b 51 }
dzoni 11:e89f89c0920b 52
dzoni 11:e89f89c0920b 53 for (i = 0; i < TASKS_NUMBER; i++) {
dzoni 11:e89f89c0920b 54 Thread::wait(taskList[i].delay);
dzoni 11:e89f89c0920b 55
dzoni 11:e89f89c0920b 56 if (taskList[i].retVal == 1) {
dzoni 11:e89f89c0920b 57 taskList[i].thread = new Thread(taskList[i].task, taskList[i].task_args, taskList[i].priority );
dzoni 11:e89f89c0920b 58 }
dzoni 11:e89f89c0920b 59 }
dzoni 11:e89f89c0920b 60
dzoni 12:1de8b271e292 61 return retval;
dzoni 11:e89f89c0920b 62 }
dzoni 11:e89f89c0920b 63
dzoni 11:e89f89c0920b 64
dzoni 9:645f0e517017 65 int main() {
dzoni 9:645f0e517017 66
dzoni 13:f62b10a6e1c5 67 initTasks();
dzoni 9:645f0e517017 68
dzoni 9:645f0e517017 69 Thread::wait(osWaitForever);
dzoni 13:f62b10a6e1c5 70
dzoni 13:f62b10a6e1c5 71 disposeDisplay(NULL);
dzoni 9:645f0e517017 72 }
dzoni 9:645f0e517017 73