freeRTOS中使用按键创建或者删除任务,来回按三次,系统就跑飞,卡死了。怎么办呀?
static void bms_start_screen(){
xTaskCreate((TaskFunction_t )bms_test_task1,
(const char* )"bms_test_task1",
(uint16_t )BMS_TTEST_TASK_STACK_SIZE,
(void* )NULL,
(UBaseType_t )BMS_TTEST_TASK_STACK_SIZE,
(TaskHandle_t*)&bms_test_task_handler);
}
static void bms_stop_screen(){
xTimerStop((TimerHandle_t)s_bms_admin.Timer_Handler, /* 待启动的定时器句柄 */
(TickType_t )portMAX_DELAY); /* 等待系统启动定时器的最大时间 */
trace("command_bms vTaskDelete");
vTaskDelete(bms_test_task_handler);
s_bms_admin.bms_process = bms_start;
}
1、FreeRTOS实际完成任务删除是在空闲任务里面。注意给空闲任务运行机会,否则出问题
2、注意正确的创建和删除姿势
/* K2键按下 删除任务vTaskLED */
case KEY_DOWN_K2:
printf("K2键按下,删除任务vTaskLED\\r\\n");
if(xHandleTaskLED != NULL)
{
vTaskDelete(xHandleTaskLED);
xHandleTaskLED = NULL;
}
break;
/* K3键按下 重新创建任务vTaskLED */
case KEY_DOWN_K3:
printf("K3键按下,重新创建任务vTaskLED\\r\\n");
if(xHandleTaskLED == NULL)
{
xTaskCreate( vTaskLED, /* 任务函数*/
"vTaskLED", /* 任务名 */
512, /* stack大小,单位word,也就是4字节 */
NULL, /* 任务参数*/
2, /* 任务优先级*/
&xHandleTaskLED ); /* 任务句柄*/
}
break; eric2013 发表于 2024-4-23 17:07
1、FreeRTOS实际完成任务删除是在空闲任务里面。注意给空闲任务运行机会,否则出问题
2、注意正确的创建和 ...
按几次后就没反应了 Shine123 发表于 2024-4-23 17:40
按几次后就没反应了
参考我们303的任务创建和删除例子,可以无限次创建和删除
https://www.armbbs.cn/forum.php?mod=viewthread&tid=17658
页:
[1]