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
调试进入到Clock模块的某个函数(要么是创建函数要么是析构函数)时候,asser会判断当前调用线程是否是Hw中断或者软件中断,如果是
则产生异常,最后出现以上错误.但是我想,我的串口中断函数怎么和Clock模块发生关系了?忽然想起文档中的一句话:如果系统心跳tick没有的话
,所有用到tick的API出现除0和forever外的值,都会有问题.
回头检查了下串口中断的函数,里面用到了mailbox,出现了一个10tick的超时!
Mailbox_post(SCI_Msg_MailBox, (Ptr)Buffer, 10);
修改后如下:
Mailbox_post(SCI_Msg_MailBox, (Ptr)Buffer, BIOS_NO_WAIT);
中断中不能出现无限等待这是一定的,但是如果一些信号量或者邮箱等出现了要用到tick来计量的超时值的时候,
DSP/BIOS的clock模块在每一个需要超时值的地方动态建立一个clock,然后start计时.....问题这里是中断啊.
文章评论(0条评论)
登录后参与讨论