freertos进入hardfault

现象: task里添加了如下代码,就进入hardfault了。
image
分析1: 栈回溯法寻找异常语句,发现异常时pxCurrentTCB->uxPriority的值是0x08000F1B,栈溢出。
image
image
分析2: 检查pxCurrentTCB发现所有的值都不对,pcTaskName都应该是有名字的,所以pxCurrentTCB指到的错误的内存地址。
image
原因:

  1. uxTaskGetNumberOfTasks()返回当前正在管理的任务数。这包括所有准备就绪、阻塞和挂起的任务。已删除但尚未被空闲任务释放的任务也将包含在计数中。
  2. init_task任务创建完后就会删除自身,并且再还没有释放的时候,就调用了uxTaskGetNumberOfTasks(),参数是uxTaskGetNumberOfTasks(),导致指针溢出。
    image
    改正:
    image
posted @ 2025-04-15 18:09  堇花还没开吗  阅读(141)  评论(0)    收藏  举报