#pragma once #include "FreeRTOS.h" #include "task.h" #include "main.h" #include "cmsis_os.h" #include "robot.h" #include "ins_task.h" #include "motor_task.h" #include "daemon.h" #include "buzzer.h" #include "bsp_log.h" osThreadId insTaskHandle; osThreadId robotTaskHandle; osThreadId motorTaskHandle; osThreadId daemonTaskHandle; void StartINSTASK(void const *argument); void StartMOTORTASK(void const *argument); void StartDAEMONTASK(void const *argument); void StartROBOTTASK(void const *argument); void OSTaskInit() { osThreadDef(instask, StartINSTASK, osPriorityAboveNormal, 0, 1024); insTaskHandle = osThreadCreate(osThread(instask), NULL); osThreadDef(motortask, StartMOTORTASK, osPriorityNormal, 0, 256); motorTaskHandle = osThreadCreate(osThread(motortask), NULL); osThreadDef(daemontask, StartDAEMONTASK, osPriorityNormal, 0, 128); daemonTaskHandle = osThreadCreate(osThread(daemontask), NULL); osThreadDef(robottask, StartROBOTTASK, osPriorityNormal, 0, 1024); robotTaskHandle = osThreadCreate(osThread(robottask), NULL); } __attribute__((noreturn)) void StartINSTASK(void const *argument) { static float ins_start, ins_dt; INS_Init(); LOGINFO("[freeRTOS] INS Task Start"); for (;;) { ins_start = DWT_GetTimeline_ms(); INS_Task(); ins_dt = DWT_GetTimeline_ms() - ins_start; if (ins_dt > 1) LOGERROR("[freeRTOS] INS Task DELAY dt=%.3f", ins_dt); osDelay(1); } } __attribute__((noreturn)) void StartMOTORTASK(void const *argument) { static float motor_start, motor_dt; LOGINFO("[freeRTOS] MOTOR Task Start"); for (;;) { motor_start = DWT_GetTimeline_ms(); MotorControlTask(); motor_dt = DWT_GetTimeline_ms() - motor_start; if (motor_dt > 1) LOGERROR("[freeRTOS] MOTOR Task DELAY dt=%.3f", motor_dt); osDelay(1); } } __attribute__((noreturn)) void StartDAEMONTASK(void const *argument) { static float daemon_start, daemon_dt; BuzzerInit(); LOGINFO("[freeRTOS] Daemon Task Start"); for (;;) { daemon_start = DWT_GetTimeline_ms(); DaemonTask(); BuzzerTask(); daemon_dt = DWT_GetTimeline_ms() - daemon_start; if (daemon_dt > 10) LOGERROR("[freeRTOS] Daemon Task DELAY dt=%.3f", daemon_dt); osDelay(10); } } __attribute__((noreturn)) void StartROBOTTASK(void const *argument) { static float robot_start, robot_dt; LOGINFO("[freeRTOS] ROBOT core Task Start"); for (;;) { robot_start = DWT_GetTimeline_ms(); RobotTask(); robot_dt = DWT_GetTimeline_ms() - robot_start; if (robot_dt > 5) LOGERROR("[freeRTOS] ROBOT core Task DELAY dt=%.3f", robot_dt); osDelay(2); } }