Thread 中讨论的其他器件: SYSBIOS
工具/软件:TI-RTOS
我们使用 CC1310 + TI-RTOS SDK 的应用程序出现异常错误并停止
工作
持续执行期间。
TI-RTOS SDK 版本:v2.20.0.06
编译器:v15.12.1 LTS
CCS:v6.1.3.00034
通过一些研究,我们发现这个问题发生在的 Semaphore_post()上
rf_runCmd 命令。
为了更加精确、在 Semaphore_post()函数内
elem->tpElem.clock 的地址变为
对已排成队的"elem"变量不确定/非法、进而导致这些变量
目标位置
Clock_stop (elem->tpElem.clock)的地址不确定并导致异常。
SYSBIOS/KNL/Semaphore.c
----------------------
/*从信标队列中删除 tsk */
Elem=(Semaphore_PendElemm *) Queue_dequeue (pendQ);
/*将信标标记为已发布*/
elem->pendState = Semaphore_PendState_布置;
/*禁用时钟对象*/
if (BIOS_clockEnabled &&(elem->tpElem.clock!= NULL)){
clock_stop (elem->tpElem.clock);}
--------------------
我们对 TI-RTOS 源代码有一些疑问...
查看 Semaphore.c 源代码 Semaphore_pend()函数
表现
"排队"我们发现、包含"tpelem.clock"的"elem"被声明为
局部变量"Semaphore_PendElem"、如下所示。
源代码行161..
--------------
bool semaphore_pend (Semaphore_Object * sem、uint32超时)
{
UINT hwiKey、tskKey;
Semaphore_PendElem;
queue_handle pendQ;
Clock_StructclockStruct;
--------------
它按如下所示排队(源代码行242/246)
----------------
Queue_insert ((Queue_elm *) tmpElem、(Queue_Elem *)(&E));
}
其他
{
/*将任务置于待决问题的末尾*/
Queue_enqueue (pendQ、(Queue_Elem *)&elem);
}
--------------
问题:
1.我们想知道是否排队被宣布的 elem 变量
局部变量
函数内的函数是否正常? 这是中的一个错误
TI-RTOS?
2.我们想了解更多有关信标和队列的详细信息
功能、
执行它的顺序以及存储器管理。
请告诉我们是否有任何有关此内容的参考资料。
