原创 DSP/BIOS:Cannot create/delete a Clock from Hwi or Swi thread

2012-1-12 21:33 4444 16 16 分类: MCU/ 嵌入式

DSP/BIOS:Cannot create/delete a Clock from Hwi or Swi thread
上篇文章提到Task_sleep睡死的问题解决后,添加了系统心跳clock,所有API用到ticks的都可以正常使用了.
但是调试串口的时候还是遇到其他问题了:
ti.sysbios.knl.Clock: line 432: assertion failure: A_badThreadType: Cannot create/delete a Clock from Hwi or Swi thread.
xdc.runtime.Error.raise: terminating execution

screenshot041.jpg


调试进入到Clock模块的某个函数(要么是创建函数要么是析构函数)时候,asser会判断当前调用线程是否是Hw中断或者软件中断,如果是
则产生异常,最后出现以上错误.但是我想,我的串口中断函数怎么和Clock模块发生关系了?忽然想起文档中的一句话:如果系统心跳tick没有的话
,所有用到tick的API出现除0和forever外的值,都会有问题.

screenshot043.jpg


回头检查了下串口中断的函数,里面用到了mailbox,出现了一个10tick的超时!
Mailbox_post(SCI_Msg_MailBox, (Ptr)Buffer, 10);

screenshot042.jpg


修改后如下:
Mailbox_post(SCI_Msg_MailBox, (Ptr)Buffer, BIOS_NO_WAIT);

中断中不能出现无限等待这是一定的,但是如果一些信号量或者邮箱等出现了要用到tick来计量的超时值的时候,
DSP/BIOS的clock模块在每一个需要超时值的地方动态建立一个clock,然后start计时.....问题这里是中断啊.

文章评论0条评论)

登录后参与讨论
我要评论
0
16
关闭 站长推荐上一条 /2 下一条