diff --git a/application/robot_task.h b/application/robot_task.h index 19cb46c..d87e5f8 100644 --- a/application/robot_task.h +++ b/application/robot_task.h @@ -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"); diff --git a/bsp/bsp_tools.c b/bsp/bsp_tools.c index efcdd1f..63b642c 100644 --- a/bsp/bsp_tools.c +++ b/bsp/bsp_tools.c @@ -17,24 +17,24 @@ typedef struct static uint8_t sig_idx = 0; static uint32_t tmp_sig = 1; // tmp_sing << sig_idx从而生成对应信号量 -static osThreadId cbkid_list[MX_SIG_LIST_SIZE]; +static osThreadId_t cbkid_list[MX_SIG_LIST_SIZE]; static CallbackTask_t cbkinfo_list[MX_SIG_LIST_SIZE]; // 死循环任务,执行cbk函数指针,每次执行完毕后等待sig信号 -__attribute__((noreturn)) static void CallbackTaskBase(void const *cbk) +__attribute__((noreturn)) static void CallbackTaskBase(void *cbk) { - void (*cbk_func)(void const *) = (void (*)(void const *))((CallbackTask_t const *)cbk)->callback; - void const *ins = ((CallbackTask_t const *)cbk)->ins; - uint32_t sig = ((CallbackTask_t const *)cbk)->sig; + void (*cbk_func)(void *) = (void (*)(void *))((CallbackTask_t *)cbk)->callback; + void *ins = ((CallbackTask_t *)cbk)->ins; + uint32_t sig = ((CallbackTask_t *)cbk)->sig; for (;;) { cbk_func(ins); - osSignalWait(sig, osWaitForever); + osThreadFlagsWait(sig, osFlagsWaitAny, osWaitForever); } } -uint32_t CreateCallbackTask(char *name, void *cbk, void *ins, osPriority priority) +uint32_t CreateCallbackTask(char *name, void *cbk, void *ins, osPriority_t priority) { if (sig_idx >= MX_SIG_LIST_SIZE) while (1) @@ -44,13 +44,12 @@ uint32_t CreateCallbackTask(char *name, void *cbk, void *ins, osPriority priorit cbkinfo_list[sig_idx].sig = tmp_sig << sig_idx; cbkinfo_list[sig_idx].ins = ins; - osThreadDef_t threadDef; - threadDef.name = name; - threadDef.pthread = &CallbackTaskBase; - threadDef.tpriority = priority; - threadDef.instances = 0; - threadDef.stacksize = 128; - cbkid_list[sig_idx] = osThreadCreate(&threadDef, (void *)&cbkinfo_list[sig_idx]); + const osThreadAttr_t threadAttr = { + .name = name, + .priority = priority, + .stack_size = 128, + }; + cbkid_list[sig_idx] = osThreadNew(CallbackTaskBase, (void *)&cbkinfo_list[sig_idx], &threadAttr); return cbkinfo_list[sig_idx++].sig; // 返回信号量,同时增加索引 } \ No newline at end of file diff --git a/bsp/bsp_tools.h b/bsp/bsp_tools.h index ea046c7..ea30915 100644 --- a/bsp/bsp_tools.h +++ b/bsp/bsp_tools.h @@ -13,5 +13,5 @@ * @param priority 任务优先级,决定了在中断结束后能否保证立刻执行 * @return uint32_t 信号量,用于唤醒该任务 */ -uint32_t CreateCallbackTask(char *name, void *cbk, void *ins, osPriority priority); +uint32_t CreateCallbackTask(char *name, void *cbk, void *ins, osPriority_t priority); diff --git a/modules/imu/ins_task.c b/modules/imu/ins_task.c index 8fc1592..d460c56 100644 --- a/modules/imu/ins_task.c +++ b/modules/imu/ins_task.c @@ -176,10 +176,15 @@ void INS_Task(void) IMU_Temperature_Ctrl(); } - if ((count++ % 1000) == 0) + if ((count % 1000) == 0) { // 1Hz 可以加入monitor函数,检查IMU是否正常运行/离线 + LOGINFO("[IMU] Temperature: %d C, PWM: %d", (int)(BMI088.Temperature * 100), (int)TempCtrl.Output); } + + count++; + if (count >= 10000) + count = 0; } /**