初级会员

- 积分
- 74
- 金钱
- 74
- 注册时间
- 2018-7-10
- 在线时间
- 17 小时
|
10金钱
我使用的是STM32F407,UCOS3,完全按照原子方法移植的系统,测试无误。程序里一共起了8个任务,我在串口中断(DMA收发)里收到的数据都用消息队列传递给任务(任务里是带超时的阻塞等数据)。现在遇到了许多奇怪的问题,麻烦大家指导下:
1、在任务A里使用消息队列1接收AT指令反馈进行通信模块初始化配置,都是好的,但是配置完后我把任务A挂起,在任务B里继续接收消息队列1传来的数据,队列的长度和内容都是空,延长超时等待时间也不行;无奈,我只好改用串口1中断里收到数据就用信号量通知任务B,任务B是无限等待信号量,等到后直接去处理USART1_RX_BUF, 问题解决;
2、任务C里我觉得使用的消息队列2, 和队列1走的不是一个串口应该没有问题,但是实测发现消息队列2还是不可使用,只好还用信号量通知直接处理串口2数据的方法,不过这次发现串口2明明收到数据了,但任务C里去判断USART2_ReceiveSize却是0. 我在任务C里收到信号量通知后用printf打印任意数据,再去判断USART2_ReceiveSize就一切正常了。
我真的是无语了,搜了半天也找不到相关解释,希望在此得到大家指导。而且我也想问,是不是实际工程用UCOS的很少,或者裸跑,或者用更高端的工控机一类的了。谢谢!!!!!
|
|