我有一个基于嵌入式产品的FreeRTOS(v9.0,如果它很重要)。此产品具有多个任务,这些任务使用多个信号量,互斥锁,队列和其他任务阻止资源相互交互。不幸的是,我有一个很少发生的错误,导致一个任务永久阻止某些资源(也许是一个致命的拥抱?)。
我到目前为止陷入困境的努力毫无结果。但是,我可以在问题发生后将调试器附加到正在运行的目标,并暂停处理器。由于我将每个任务都作为全局变量处理,因此我希望提取一些关于任务被阻止的资源的有用信息。但是,句柄只不过是一个指针,我无法弄清楚如何从中获取有用的信息。
有没有人对如何找出哪个任务阻止资源阻碍任务有任何想法?
更新:在我看来,由于我知道卡住的任务,我应该能够查看其堆栈并提取一些有用的信息。不幸的是,我不确定如何访问当前的堆栈指针,也不知道堆栈的深度,我必须去了解那里的内容。