FreeRTOS 任务挂起位置调查

本文探讨了在ARM平台上使用FreeRTOS时,如何找到任务被挂起的位置。通过分析任务控制块(TCB)、栈顶地址以及PendSV_Handler函数,揭示了挂起任务的调用路径,特别关注了vTaskDelay函数的作用。通过对汇编代码的检查,确定了任务挂起的具体原因。
摘要由CSDN通过智能技术生成

在ARM平台上使用多任务操作系统时,因为程序设计存在缺陷,容易导致进入hard fault,网上对此有很多的资料介绍。在实际的程序调试中,我们也经常遇到另外一个问题。即想要执行的任务被挂起,CPU 在idle task 里面运行,这个问题同样也会困扰我们的功能调试。以下将结合一个简单的例子来分析如何找到任务被挂起的位置。

在freeRTOS 创建任务时,会创建一个任务控制块(TCB),并且该信息会通过指针进行返回。如下图所示

在本示例中,该参数传入了一个NULL值,因此该函数后不能直接得到这个“vLEDTask”的任务控制块信息。但也不需要着急,实际创建任务时,肯定会有相关的信息的存在。

继续进入该创建任务xTaskGenericCreate的函数内部,发现该函数动态创建了一个TCB的结构体,在本例中该结构体的地址为0x20000130。我们需要记录该地址,因为该结构体被一个局部变量保存,在退出该函数后,局部变量将被释放。

跳出该任务创建函数。将上述步骤中记录的0x20000130 添加到变量监视区。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值