硬汉嵌入式论坛

 找回密码
 立即注册
查看: 152|回复: 3
收起左侧

[FreeRTOS] freeRTOS中使用按键创建或者删除任务,来回按三次,系统就跑飞,卡死了。怎么办呀?

[复制链接]

1

主题

2

回帖

5

积分

新手上路

积分
5
发表于 2024-4-23 16:50:17 | 显示全部楼层 |阅读模式

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[BMS_PORT1_A].Timer_Handler,   /* 待启动的定时器句柄 */
               (TickType_t     )portMAX_DELAY);        /* 等待系统启动定时器的最大时间 */

    trace("command_bms vTaskDelete");
    vTaskDelete(bms_test_task_handler);
    s_bms_admin[BMS_PORT1_A].bms_process = bms_start;
}



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2024-4-23 17:07:30 | 显示全部楼层
1、FreeRTOS实际完成任务删除是在空闲任务里面。注意给空闲任务运行机会,否则出问题
2、注意正确的创建和删除姿势
[C] 纯文本查看 复制代码
                   /* 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;
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2024-4-23 17:40:52 | 显示全部楼层
eric2013 发表于 2024-4-23 17:07
1、FreeRTOS实际完成任务删除是在空闲任务里面。注意给空闲任务运行机会,否则出问题
2、注意正确的创建和 ...

按几次后就没反应了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2024-4-23 21:20:37 | 显示全部楼层
Shine123 发表于 2024-4-23 17:40
按几次后就没反应了

参考我们303的任务创建和删除例子,可以无限次创建和删除
https://www.armbbs.cn/forum.php?mod=viewthread&tid=17658
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-5 19:25 , Processed in 0.336256 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表