想实现一个非阻塞性的串口屏收发程序

2019-07-21 06:37发布

最近在编写一个串口屏的程序,移植了一个UCOS系统,数据收发使用DMA方式,但是屏上加上了LCD校验返回确认,也就是说每发送一条指令,液晶都会有成功/失败返回,这个时候
如果用延时等待的方式,软件的实时性又无法获得保障了,因此提出了软件的需求,发送指令失败后,自动重发,又不影响软件的实时性。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
nashui_sx
1楼-- · 2019-07-21 09:39
按你的思路,不阻塞也只是不阻塞cpu,串口发送还是要等待返回的OK,直接信号量同步下就可以了,发送完就等待信号量,超时自动重发   接收到ok就释放信号量
ajianyes
2楼-- · 2019-07-21 10:03
我自己想到的方法就是:每发送一条指令后,不做任何等待,接收与发送分开成两个不同的线程,发送线程每发送完毕一条指令之后,发送消息至接收线程查询一定时间内是否接收正确应答。但这样每次只能间隔一定时间只能发送一条信息,需要发送多条的时候,又改如何处理。
不存在的时间
3楼-- · 2019-07-21 14:44
 精彩回答 2  元偷偷看……
ajianyes
4楼-- · 2019-07-21 18:51
本帖最后由 ajianyes 于 2018-12-18 15:25 编辑
不存在的时间 发表于 2018-12-17 21:25
串口接收也可以用DMA通道啊

接收与发送都是用DMA方式的,但有时需要收到接收方的正确应答时,就涉及到了数据的重新发送与查询接收问题,这个时候如果是用查询等待应答软件只能写成阻塞型的了
ajianyes
5楼-- · 2019-07-21 20:49
nashui_sx 发表于 2018-12-18 21:47
按你的思路,不阻塞也只是不阻塞cpu,串口发送还是要等待返回的OK,直接信号量同步下就可以了,发送完就等 ...

嗯,想了想,想不阻塞很难,只有种方式了,非常感谢回复

一周热门 更多>