Shine123 发表于 2024-4-23 16:50:17

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;
}



eric2013 发表于 2024-4-23 17:07:30

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;

Shine123 发表于 2024-4-23 17:40:52

eric2013 发表于 2024-4-23 17:07
1、FreeRTOS实际完成任务删除是在空闲任务里面。注意给空闲任务运行机会,否则出问题
2、注意正确的创建和 ...

按几次后就没反应了

eric2013 发表于 2024-4-23 21:20:37

Shine123 发表于 2024-4-23 17:40
按几次后就没反应了

参考我们303的任务创建和删除例子,可以无限次创建和删除
https://www.armbbs.cn/forum.php?mod=viewthread&tid=17658
页: [1]
查看完整版本: freeRTOS中使用按键创建或者删除任务,来回按三次,系统就跑飞,卡死了。怎么办呀?