diff --git a/main.cpp b/main.cpp index 9476fd6..f5bf7d0 100644 --- a/main.cpp +++ b/main.cpp @@ -1,4 +1,4 @@ -#define MAX_TASKS 2 +#define MAX_TASKS 3 #define TASK_STACK_SIZE 256 #include "stm32g431xx.h" @@ -101,7 +101,7 @@ void __stackless PendSV_mainHandler() else myTask->isFirstRun = false; - asm("mov LR, #0xFFFFFFFD"); + asm volatile("mov LR, #0xFFFFFFFD"); // LR - 0xFFFFFFFD (Возвращаемся в Thread режим, используем стек процесса PSP) stop = false; @@ -126,6 +126,7 @@ int func2(); uint func1Stack[TASK_STACK_SIZE]; uint func2Stack[TASK_STACK_SIZE]; +uint func3Stack[TASK_STACK_SIZE]; int a, b, c; @@ -135,9 +136,6 @@ int func1() while (1) { a++; - // asm("mov R4, #0x12"); - // asm("mov R5, #0x34"); - // asm("mov R6, #0x56"); } } @@ -146,10 +144,14 @@ int func2() while (1) { b++; - // asm("mov R5, #0x79"); } } +int func3() +{ + a = 778; +} + int mute() { while (1) @@ -175,7 +177,7 @@ int newTask(int (*new_task)(), uint *stack, uint size) cx->PC = (uint)new_task; cx->xPSR = 0x01000000; - cx->LR = 0x0800029b; // LR - 0xFFFFFFFD (Возвращаемся в Thread режим, используем стек процесса PSP) + cx->LR = (uint)mute; task_index++; @@ -197,7 +199,7 @@ void zeroTask(int (*new_task)(), uint *stack, uint size) cx->PC = (uint)new_task; cx->xPSR = 0x01000000; - cx->LR = 0x0800029b; + cx->LR = (uint)mute; } int main() @@ -213,6 +215,7 @@ int main() newTask(func1, func1Stack, TASK_STACK_SIZE); newTask(func2, func2Stack, TASK_STACK_SIZE); + newTask(func3, func3Stack, TASK_STACK_SIZE); while (true) {