fix: migrate CMSIS-RTOS v1 to v2 API, fix stack overflow and float format crash
- Replace osThreadDef/osThreadCreate/osThread with osThreadNew/osThreadAttr_t - Replace osSignalWait with osThreadFlagsWait - Change osThreadId to osThreadId_t, osPriority to osPriority_t - Increase daemon task stack from 128 to 512 to fix stack overflow HardFault - Cast BMI088.Temperature float to int before %d format to fix va_list misalignment
This commit is contained in:
+36
-20
@@ -13,32 +13,48 @@
|
||||
|
||||
#include "bsp_log.h"
|
||||
|
||||
osThreadId insTaskHandle;
|
||||
osThreadId robotTaskHandle;
|
||||
osThreadId motorTaskHandle;
|
||||
osThreadId daemonTaskHandle;
|
||||
osThreadId_t insTaskHandle;
|
||||
osThreadId_t robotTaskHandle;
|
||||
osThreadId_t motorTaskHandle;
|
||||
osThreadId_t daemonTaskHandle;
|
||||
|
||||
void StartINSTASK(void const *argument);
|
||||
void StartMOTORTASK(void const *argument);
|
||||
void StartDAEMONTASK(void const *argument);
|
||||
void StartROBOTTASK(void const *argument);
|
||||
void StartINSTASK(void *argument);
|
||||
void StartMOTORTASK(void *argument);
|
||||
void StartDAEMONTASK(void *argument);
|
||||
void StartROBOTTASK(void *argument);
|
||||
|
||||
void OSTaskInit()
|
||||
{
|
||||
osThreadDef(instask, StartINSTASK, osPriorityAboveNormal, 0, 1024);
|
||||
insTaskHandle = osThreadCreate(osThread(instask), NULL);
|
||||
const osThreadAttr_t insTask_attr = {
|
||||
.name = "instask",
|
||||
.priority = osPriorityAboveNormal,
|
||||
.stack_size = 1024,
|
||||
};
|
||||
insTaskHandle = osThreadNew(StartINSTASK, NULL, &insTask_attr);
|
||||
|
||||
osThreadDef(motortask, StartMOTORTASK, osPriorityNormal, 0, 256);
|
||||
motorTaskHandle = osThreadCreate(osThread(motortask), NULL);
|
||||
// const osThreadAttr_t motorTask_attr = {
|
||||
// .name = "motortask",
|
||||
// .priority = osPriorityNormal,
|
||||
// .stack_size = 256,
|
||||
// };
|
||||
// motorTaskHandle = osThreadNew(StartMOTORTASK, NULL, &motorTask_attr);
|
||||
|
||||
osThreadDef(daemontask, StartDAEMONTASK, osPriorityNormal, 0, 128);
|
||||
daemonTaskHandle = osThreadCreate(osThread(daemontask), NULL);
|
||||
const osThreadAttr_t daemonTask_attr = {
|
||||
.name = "daemontask",
|
||||
.priority = osPriorityNormal,
|
||||
.stack_size = 512,
|
||||
};
|
||||
daemonTaskHandle = osThreadNew(StartDAEMONTASK, NULL, &daemonTask_attr);
|
||||
|
||||
osThreadDef(robottask, StartROBOTTASK, osPriorityNormal, 0, 1024);
|
||||
robotTaskHandle = osThreadCreate(osThread(robottask), NULL);
|
||||
const osThreadAttr_t robotTask_attr = {
|
||||
.name = "robottask",
|
||||
.priority = osPriorityNormal,
|
||||
.stack_size = 1024,
|
||||
};
|
||||
robotTaskHandle = osThreadNew(StartROBOTTASK, NULL, &robotTask_attr);
|
||||
}
|
||||
|
||||
__attribute__((noreturn)) void StartINSTASK(void const *argument)
|
||||
__attribute__((noreturn)) void StartINSTASK(void *argument)
|
||||
{
|
||||
static float ins_start, ins_dt;
|
||||
INS_Init();
|
||||
@@ -54,7 +70,7 @@ __attribute__((noreturn)) void StartINSTASK(void const *argument)
|
||||
}
|
||||
}
|
||||
|
||||
__attribute__((noreturn)) void StartMOTORTASK(void const *argument)
|
||||
__attribute__((noreturn)) void StartMOTORTASK(void *argument)
|
||||
{
|
||||
static float motor_start, motor_dt;
|
||||
LOGINFO("[freeRTOS] MOTOR Task Start");
|
||||
@@ -69,7 +85,7 @@ __attribute__((noreturn)) void StartMOTORTASK(void const *argument)
|
||||
}
|
||||
}
|
||||
|
||||
__attribute__((noreturn)) void StartDAEMONTASK(void const *argument)
|
||||
__attribute__((noreturn)) void StartDAEMONTASK(void *argument)
|
||||
{
|
||||
static float daemon_start, daemon_dt;
|
||||
BuzzerInit();
|
||||
@@ -86,7 +102,7 @@ __attribute__((noreturn)) void StartDAEMONTASK(void const *argument)
|
||||
}
|
||||
}
|
||||
|
||||
__attribute__((noreturn)) void StartROBOTTASK(void const *argument)
|
||||
__attribute__((noreturn)) void StartROBOTTASK(void *argument)
|
||||
{
|
||||
static float robot_start, robot_dt;
|
||||
LOGINFO("[freeRTOS] ROBOT core Task Start");
|
||||
|
||||
Reference in New Issue
Block a user