diff --git a/HAL_N_Middlewares/Src/freertos.c b/HAL_N_Middlewares/Src/freertos.c index 71659f9..a889936 100644 --- a/HAL_N_Middlewares/Src/freertos.c +++ b/HAL_N_Middlewares/Src/freertos.c @@ -28,6 +28,9 @@ #include "ins_task.h" #include "motor_task.h" #include "led_task.h" +#include "monitor.h" +#include "robot.h" + /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -57,6 +60,8 @@ void StartINSTASK(void const * argument); void StartMOTORTASK(void const * argument); +void StartROBOTTASK(void const* argument); + /* USER CODE END FunctionPrototypes */ void StartDefaultTask(void const * argument); @@ -117,6 +122,9 @@ void MX_FREERTOS_Init(void) { osThreadDef(motortask, StartMOTORTASK, osPriorityNormal, 0, 256); defaultTaskHandle = osThreadCreate(osThread(motortask), NULL); + osThreadDef(robottask, StartROBOTTASK, osPriorityNormal, 0, 2048); + defaultTaskHandle = osThreadCreate(osThread(robottask), NULL); + /* USER CODE BEGIN RTOS_THREADS */ /* add threads, ... */ /* USER CODE END RTOS_THREADS */ @@ -138,6 +146,7 @@ void StartDefaultTask(void const * argument) /* Infinite loop */ for(;;) { + //1kHz led_RGB_flow_task(); osDelay(1); } @@ -150,6 +159,7 @@ void StartINSTASK(void const * argument) { while (1) { + //1kHz INS_Task(); osDelay(1); } @@ -160,10 +170,22 @@ void StartMOTORTASK(void const * argument) { while (1) { + //500Hz MotorControlTask(); - osDelay(1); + osDelay(2); } } +void StartROBOTTASK(void const * argument) +{ + while (1) + { + // 200Hz + RobotTask(); + osDelay(5); + } + +} + /* USER CODE END Application */ diff --git a/modules/remote/remote_control.c b/modules/remote/remote_control.c index 0f9c3a4..35690b8 100644 --- a/modules/remote/remote_control.c +++ b/modules/remote/remote_control.c @@ -41,7 +41,7 @@ static void sbus_to_rc(volatile const uint8_t *sbus_buf) // @todo 似乎可以直接用位域操作进行,把key_temp通过强制类型转换变成key类型? 位域方案在下面,尚未测试 // 按键值解算,利用宏+循环减少代码长度 - for (uint16_t i = 0x0001, j = 0; i < 0x8001; i *= 2, j++) // 依次查看每一个键 + for (uint16_t i = 0x0001, j = 0; i != 0x8000; i *= 2, j++) // 依次查看每一个键 { // 如果键按下,对应键的key press状态置1,否则为0 rc_ctrl[0].key[KEY_PRESS][j] = rc_ctrl[0].key_temp & i;