remote control init

This commit is contained in:
TuxMonkey
2025-12-15 21:31:36 +08:00
parent 2d905efeb7
commit a78fe6ea11
10 changed files with 893 additions and 109 deletions

View File

@@ -121,14 +121,14 @@ const osThreadAttr_t WS2812Task_attributes = {
/* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN FunctionPrototypes */
//Todo: 测试instask
//@Todo:测试instask
const osThreadAttr_t instask_attributes = {
.name = "instask",
.priority = osPriorityAboveNormal, // 较高优先级
.stack_size = 1024 * 4 // 栈大小单位是字节通常是字数的4倍
.name = "instask",
.priority = osPriorityAboveNormal, // 较高优先级
.stack_size = 1024 * 4 // 栈大小单位是字节通常是字数的4倍
};
//Todo:测试使用
//@Todo:测试使用
osThreadId insTaskHandle;
void StartINSTASK(void const *argument);
@@ -136,28 +136,38 @@ void StartINSTASK(void const *argument);
/* USER CODE END FunctionPrototypes */
void StartDefaultTask(void *argument);
void ShootTask(void *argument);
void GimbalTask(void *argument);
void ChassisTask(void *argument);
void StartInitTask(void *argument);
void VisionTask(void *argument);
void CmdTask(void *argument);
void RefereeTask(void *argument);
extern void ws2812Task(void *argument);
extern void MX_USB_DEVICE_Init(void);
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
/* Hook prototypes */
void vApplicationStackOverflowHook(xTaskHandle xTask, signed char *pcTaskName);
void vApplicationMallocFailedHook(void);
/* USER CODE BEGIN 4 */
void vApplicationStackOverflowHook(xTaskHandle xTask, signed char *pcTaskName)
{
/* Run time stack overflow checking is performed if
configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook function is
called if a stack overflow is detected. */
/* Run time stack overflow checking is performed if
configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook function is
called if a stack overflow is detected. */
}
/* USER CODE END 4 */
@@ -165,16 +175,16 @@ void vApplicationStackOverflowHook(xTaskHandle xTask, signed char *pcTaskName)
/* USER CODE BEGIN 5 */
void vApplicationMallocFailedHook(void)
{
/* vApplicationMallocFailedHook() will only be called if
configUSE_MALLOC_FAILED_HOOK is set to 1 in FreeRTOSConfig.h. It is a hook
function that will get called if a call to pvPortMalloc() fails.
pvPortMalloc() is called internally by the kernel whenever a task, queue,
timer or semaphore is created. It is also called by various parts of the
demo application. If heap_1.c or heap_2.c are used, then the size of the
heap available to pvPortMalloc() is defined by configTOTAL_HEAP_SIZE in
FreeRTOSConfig.h, and the xPortGetFreeHeapSize() API function can be used
to query the size of free heap space that remains (although it does not
provide information on how the remaining heap might be fragmented). */
/* vApplicationMallocFailedHook() will only be called if
configUSE_MALLOC_FAILED_HOOK is set to 1 in FreeRTOSConfig.h. It is a hook
function that will get called if a call to pvPortMalloc() fails.
pvPortMalloc() is called internally by the kernel whenever a task, queue,
timer or semaphore is created. It is also called by various parts of the
demo application. If heap_1.c or heap_2.c are used, then the size of the
heap available to pvPortMalloc() is defined by configTOTAL_HEAP_SIZE in
FreeRTOSConfig.h, and the xPortGetFreeHeapSize() API function can be used
to query the size of free heap space that remains (although it does not
provide information on how the remaining heap might be fragmented). */
}
/* USER CODE END 5 */
@@ -184,25 +194,26 @@ void vApplicationMallocFailedHook(void)
* @param None
* @retval None
*/
void MX_FREERTOS_Init(void) {
void MX_FREERTOS_Init(void)
{
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* USER CODE BEGIN RTOS_MUTEX */
/* add mutexes, ... */
/* add mutexes, ... */
/* USER CODE END RTOS_MUTEX */
/* USER CODE BEGIN RTOS_SEMAPHORES */
/* add semaphores, ... */
/* add semaphores, ... */
/* USER CODE END RTOS_SEMAPHORES */
/* USER CODE BEGIN RTOS_TIMERS */
/* start timers, add new ones, ... */
/* start timers, add new ones, ... */
/* USER CODE END RTOS_TIMERS */
/* USER CODE BEGIN RTOS_QUEUES */
/* add queues, ... */
/* add queues, ... */
/* USER CODE END RTOS_QUEUES */
/* Create the thread(s) */
@@ -234,16 +245,15 @@ void MX_FREERTOS_Init(void) {
WS2812TaskHandle = osThreadNew(ws2812Task, NULL, &WS2812Task_attributes);
/* USER CODE BEGIN RTOS_THREADS */
/* add threads, ... */
//TodoINS_Task是测试版本
// 创建线程
insTaskHandle = osThreadNew(StartINSTASK, NULL, &instask_attributes);
/* add threads, ... */
//@Todo:INS_Task是测试版本
// 创建线程
insTaskHandle = osThreadNew(StartINSTASK, NULL, &instask_attributes);
/* USER CODE END RTOS_THREADS */
/* USER CODE BEGIN RTOS_EVENTS */
/* add events, ... */
/* add events, ... */
/* USER CODE END RTOS_EVENTS */
}
/* USER CODE BEGIN Header_StartDefaultTask */
@@ -258,11 +268,11 @@ __weak void StartDefaultTask(void *argument)
/* init code for USB_DEVICE */
MX_USB_DEVICE_Init();
/* USER CODE BEGIN StartDefaultTask */
/* Infinite loop */
for (;;)
{
osDelay(1);
}
/* Infinite loop */
for (;;)
{
osDelay(1);
}
/* USER CODE END StartDefaultTask */
}
@@ -276,11 +286,11 @@ __weak void StartDefaultTask(void *argument)
__weak void ShootTask(void *argument)
{
/* USER CODE BEGIN ShootTask */
/* Infinite loop */
for (;;)
{
osDelay(1);
}
/* Infinite loop */
for (;;)
{
osDelay(1);
}
/* USER CODE END ShootTask */
}
@@ -294,11 +304,11 @@ __weak void ShootTask(void *argument)
__weak void GimbalTask(void *argument)
{
/* USER CODE BEGIN GimbalTask */
/* Infinite loop */
for (;;)
{
osDelay(1);
}
/* Infinite loop */
for (;;)
{
osDelay(1);
}
/* USER CODE END GimbalTask */
}
@@ -312,11 +322,11 @@ __weak void GimbalTask(void *argument)
__weak void ChassisTask(void *argument)
{
/* USER CODE BEGIN ChassisTask */
/* Infinite loop */
for (;;)
{
osDelay(1);
}
/* Infinite loop */
for (;;)
{
osDelay(1);
}
/* USER CODE END ChassisTask */
}
@@ -330,11 +340,11 @@ __weak void ChassisTask(void *argument)
__weak void StartInitTask(void *argument)
{
/* USER CODE BEGIN StartInitTask */
/* Infinite loop */
for (;;)
{
osDelay(1);
}
/* Infinite loop */
for (;;)
{
osDelay(1);
}
/* USER CODE END StartInitTask */
}
@@ -348,11 +358,11 @@ __weak void StartInitTask(void *argument)
__weak void VisionTask(void *argument)
{
/* USER CODE BEGIN VisionTask */
/* Infinite loop */
for (;;)
{
osDelay(1);
}
/* Infinite loop */
for (;;)
{
osDelay(1);
}
/* USER CODE END VisionTask */
}
@@ -366,11 +376,11 @@ __weak void VisionTask(void *argument)
__weak void CmdTask(void *argument)
{
/* USER CODE BEGIN CmdTask */
/* Infinite loop */
for (;;)
{
osDelay(1);
}
/* Infinite loop */
for (;;)
{
osDelay(1);
}
/* USER CODE END CmdTask */
}
@@ -384,36 +394,38 @@ __weak void CmdTask(void *argument)
__weak void RefereeTask(void *argument)
{
/* USER CODE BEGIN RefereeTask */
/* Infinite loop */
for (;;)
{
osDelay(1);
}
/* Infinite loop */
for (;;)
{
osDelay(1);
}
/* USER CODE END RefereeTask */
}
/* Private application code --------------------------------------------------*/
/* USER CODE BEGIN Application */
//Todo:INS_Task是测试阶段使用。
//@Todo:INS_Task是测试阶段使用。
__attribute__((noreturn)) void StartINSTASK(void const *argument)
{
static float ins_start;
static float ins_dt;
INS_Init(); // 确保BMI088被正确初始化.
// LOGINFO("[freeRTOS] INS Task Start");
for (;;)
{
// 1kHz
// ins_start = DWT_GetTimeline_ms();
INS_Task();
// ins_dt = DWT_GetTimeline_ms() - ins_start;
// if (ins_dt > 1)
// Todo: LOGERROR("[freeRTOS] INS Task is being DELAY! dt = [%f]", &ins_dt);
// // VisionSend(); // 解算完成后发送视觉数据,但是当前的实现不太优雅,后续若添加硬件触发需要重新考虑结构的组织
osDelay(1); // 1ms, 1kHz
}
static float ins_start;
static float ins_dt;
INS_Init(); // 确保BMI088被正确初始化.
// LOGINFO("[freeRTOS] INS Task Start");
for (;;)
{
// 1kHz
// ins_start = DWT_GetTimeline_ms();
INS_Task();
// ins_dt = DWT_GetTimeline_ms() - ins_start;
// if (ins_dt > 1)
// @Todo: LOGERROR("[freeRTOS] INS Task is being DELAY! dt = [%f]", &ins_dt);
// // VisionSend(); // 解算完成后发送视觉数据,但是当前的实现不太优雅,后续若添加硬件触发需要重新考虑结构的组织
osDelay(1); // 1ms, 1kHz
}
}
/* USER CODE END Application */