请问周工: 我用easyarm615学习cortex-m3和ucos-ii。 现在写了这样一段程序(使用ZLG的移植模板): 系统中有两个任务,一个任务A定时翻转LED1状态(优先级为10),一个任务B从消息队列中接收数据,并发送到串口(优先级为7),另有两个系统任务,系统统计任务(优先级为30),空闲任务(优先级为31)。 系统中有一个定时器中断,定时翻转LED2状态(优先级2<<5)。另有一个串口接收中断(未设优先级)。 系统是这样工作的:当串口产生接收中断后,将接收到数据作为消息向消息队列发送,任务B接收到数据后再通过串口发送出去。 程序运行后通过PC串口工具向EasyARM615发送数据,程序按照预定方式工作,PC机串口接收的数据与发送的数据相同。 但当程序运行时间较长时(有时一个多小时),任务B即停止工作(状态是ready),不再从消息队列中取消息,此时串口中断仍不断地向队列中发送消息,定时器中断仍在工作(LED2闪),任务A不工作(LED1不闪)。如果调整任务A的优先级高于任务B,则任务B停止工作时(状态是ready),任务A仍在工作(LED1闪)。 将串口中断优先级也设为2<<5时,程序连续工作了11个小时,但最终还是出现了上述情况。 PC串口每次发送10个字节数据,发送间隔300ms。 请问为什么会现这种情况呢?是这种工作机制有问题?任务B为什么不能从消息队列中收到数据?感觉是消息队列被破坏了? 在使用消息队列前我用了邮箱,是同样的结果。
|