aboutsummaryrefslogtreecommitdiff
path: root/projects/rtos-test
diff options
context:
space:
mode:
Diffstat (limited to 'projects/rtos-test')
-rw-r--r--projects/rtos-test/Makefile18
-rw-r--r--projects/rtos-test/mutex-test.c40
-rw-r--r--projects/rtos-test/semaphore-test.c34
-rw-r--r--projects/rtos-test/thread-test.c24
4 files changed, 116 insertions, 0 deletions
diff --git a/projects/rtos-test/Makefile b/projects/rtos-test/Makefile
new file mode 100644
index 0000000..dd2cab5
--- /dev/null
+++ b/projects/rtos-test/Makefile
@@ -0,0 +1,18 @@
+TEST = thread-test semaphore-test mutex-test
+
+all: $(TEST:=.elf)
+
+%.elf: %.o $(BOARD_OBJS) $(LIBS)
+ $(CC) $(CFLAGS) $^ -o $@ -T$(LDSCRIPT) -g -Wl,-Map=$*.map
+ $(OBJCOPY) -O ihex $*.elf $*.hex
+ $(OBJCOPY) -O binary $*.elf $*.bin
+ $(OBJDUMP) -St $*.elf >$*.lst
+ $(SIZE) $*.elf
+
+clean:
+ rm -f *.o
+ rm -f *.elf
+ rm -f *.hex
+ rm -f *.bin
+ rm -f *.map
+ rm -f *.lst
diff --git a/projects/rtos-test/mutex-test.c b/projects/rtos-test/mutex-test.c
new file mode 100644
index 0000000..402f9ba
--- /dev/null
+++ b/projects/rtos-test/mutex-test.c
@@ -0,0 +1,40 @@
+#include "cmsis_os.h"
+
+#include "stm-init.h"
+#include "stm-uart.h"
+
+osMutexId stdio_mutex;
+osMutexDef(stdio_mutex);
+
+void notify(const char* name, int state) {
+ osMutexWait(stdio_mutex, osWaitForever);
+ //printf("%s: %d\n\r", name, state);
+ uart_send_string(name);
+ uart_send_string(": ");
+ uart_send_integer(state, 1);
+ uart_send_string("\r\n");
+ osMutexRelease(stdio_mutex);
+}
+
+void test_thread(void const *args) {
+ while (1) {
+ notify((const char*)args, 0); osDelay(1000);
+ notify((const char*)args, 1); osDelay(1000);
+ }
+}
+
+void t2(void const *argument) {test_thread("Th 2");}
+osThreadDef(t2, osPriorityNormal, DEFAULT_STACK_SIZE);
+
+void t3(void const *argument) {test_thread("Th 3");}
+osThreadDef(t3, osPriorityNormal, DEFAULT_STACK_SIZE);
+
+int main() {
+ stm_init();
+ stdio_mutex = osMutexCreate(osMutex(stdio_mutex));
+
+ osThreadCreate(osThread(t2), NULL);
+ osThreadCreate(osThread(t3), NULL);
+
+ test_thread((void *)"Th 1");
+}
diff --git a/projects/rtos-test/semaphore-test.c b/projects/rtos-test/semaphore-test.c
new file mode 100644
index 0000000..3a3b5de
--- /dev/null
+++ b/projects/rtos-test/semaphore-test.c
@@ -0,0 +1,34 @@
+#include "cmsis_os.h"
+
+#include "stm-init.h"
+#include "stm-uart.h"
+
+osSemaphoreId two_slots;
+osSemaphoreDef(two_slots);
+
+void test_thread(void const *name) {
+ while (1) {
+ osSemaphoreWait(two_slots, osWaitForever);
+ //printf("%s\n\r", (const char*)name);
+ uart_send_string((const char*)name);
+ uart_send_string("\r\n");
+ osDelay(1000);
+ osSemaphoreRelease(two_slots);
+ }
+}
+
+void t2(void const *argument) {test_thread("Th 2");}
+osThreadDef(t2, osPriorityNormal, DEFAULT_STACK_SIZE);
+
+void t3(void const *argument) {test_thread("Th 3");}
+osThreadDef(t3, osPriorityNormal, DEFAULT_STACK_SIZE);
+
+int main (void) {
+ stm_init();
+ two_slots = osSemaphoreCreate(osSemaphore(two_slots), 2);
+
+ osThreadCreate(osThread(t2), NULL);
+ osThreadCreate(osThread(t3), NULL);
+
+ test_thread((void *)"Th 1");
+}
diff --git a/projects/rtos-test/thread-test.c b/projects/rtos-test/thread-test.c
new file mode 100644
index 0000000..8b31a26
--- /dev/null
+++ b/projects/rtos-test/thread-test.c
@@ -0,0 +1,24 @@
+#include "cmsis_os.h"
+
+#include "stm-init.h"
+#include "stm-led.h"
+
+void led2_thread(void const *args)
+{
+ while (1) {
+ led_toggle(LED_BLUE);
+ osDelay(1000);
+ }
+}
+osThreadDef(led2_thread, osPriorityNormal, DEFAULT_STACK_SIZE);
+
+int main()
+{
+ stm_init();
+ osThreadCreate(osThread(led2_thread), NULL);
+
+ while (1) {
+ led_toggle(LED_GREEN);
+ osDelay(500);
+ }
+}