小谦· 2023-03-22 09:06 采纳率: 100%
浏览 152
已结题

FreeRTOS有任务卡死

FreeRTOS在单片机上长时间运行后,有任务卡死
是构建了四个任务,然后长时间运行后,按键根本不响应了,但是显示还在刷新,显示的数据来源于HT7036_task_function,数据是正确的,说明只有按键任务没有被2执行,这个现象只发生在长时间运行后,刚上电的第一天没有问题。

//创建按键扫描任务
xTaskCreate((TaskFunction_t )key_task_function,
                (const char*    )"key_task",
                (uint16_t       )128,
                (void*          )NULL,
                (UBaseType_t    )2,
                (TaskHandle_t*  )&keytask_handler);

    //创建显示任务
    xTaskCreate((TaskFunction_t )display_task_function,
                (const char*    )"display_task",
                (uint16_t       )128,
                (void*          )NULL,
                (UBaseType_t    )3,
                (TaskHandle_t*  )&display_handler);

    //创建HT7036运行任务,读取电能数据 
    xTaskCreate((TaskFunction_t )HT7036_task_function,
                (const char*    )"HT7036_task",
                (uint16_t       )128,
                (void*          )NULL,
                (UBaseType_t    )2,
                (TaskHandle_t*  )&HT7036_handler);
    
    //485数据接收超时检测 
    xTaskCreate((TaskFunction_t ) receiver_task_function,
                (const char*    ) "receiver_task",
                (uint16_t       ) 128,
                (void*          ) NULL,
                (UBaseType_t    ) 2,
                (TaskHandle_t*  ) &receiver_handler);

  • 写回答

7条回答 默认 最新

  • 社区专家-Monster-XH 2023-03-22 09:43
    关注

    基于Monster 组和GPT的调写:

    • 可能跟任务优先级、资源争用或任务阻塞等问题导致的。

    问题以及解决方案:

    • 1.任务优先级设置不正确:要按键任务的优先级比其他任务都要高。这样,当按键被按下时,它将立即响应。
    • 2.资源争用:如果按键任务和其他任务正在争用某些共享资源(例如,IO口、共享内存等),则会出现任务阻塞的情况。在访问共享资源时用适当的同步机制,例如信号量、互斥量等。
    • 3.任务阻塞:任务可能会由于等待事件而阻塞。例如,如果按键任务在等待队列中的数据,则它可能会一直阻塞,直到队列中有新数据。考虑用超时机制,保证任务不会一直阻塞。
    • 4.堆栈溢出:如果任务的堆栈空间不足,可能会任务卡死。保证每个任务都有足够的堆栈空间,根据需要增加堆栈大小。
    • 5.任务死循环:如果任务处于死循环中,则它将无法响应其他任务或中断。保证任务的代码中没有死循环。
    • 另外,考虑在FreeRTOS中启用任务监视器来检测任务阻塞的情况,以便能够及时发现问题并进行调试。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

问题事件

  • 系统已结题 4月3日
  • 已采纳回答 3月26日
  • 赞助了问题酬金15元 3月22日
  • 创建了问题 3月22日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵