OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1908|回复: 5

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

[复制链接]

18

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
354
金钱
354
注册时间
2016-8-2
在线时间
79 小时
发表于 2018-12-17 15:18:59 | 显示全部楼层 |阅读模式
20金钱
最近在编写一个串口屏的程序,移植了一个UCOS系统,数据收发使用DMA方式,但是屏上加上了LCD校验返回确认,也就是说每发送一条指令,液晶都会有成功/失败返回,这个时候
如果用延时等待的方式,软件的实时性又无法获得保障了,因此提出了软件的需求,发送指令失败后,自动重发,又不影响软件的实时性。

最佳答案

查看完整内容[请看2#楼]

按你的思路,不阻塞也只是不阻塞cpu,串口发送还是要等待返回的OK,直接信号量同步下就可以了,发送完就等待信号量,超时自动重发 接收到ok就释放信号量
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-12-17 15:19:00 | 显示全部楼层
按你的思路,不阻塞也只是不阻塞cpu,串口发送还是要等待返回的OK,直接信号量同步下就可以了,发送完就等待信号量,超时自动重发   接收到ok就释放信号量
回复

使用道具 举报

18

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
354
金钱
354
注册时间
2016-8-2
在线时间
79 小时
 楼主| 发表于 2018-12-17 15:22:05 | 显示全部楼层
我自己想到的方法就是:每发送一条指令后,不做任何等待,接收与发送分开成两个不同的线程,发送线程每发送完毕一条指令之后,发送消息至接收线程查询一定时间内是否接收正确应答。但这样每次只能间隔一定时间只能发送一条信息,需要发送多条的时候,又改如何处理。
回复

使用道具 举报

2

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
349
金钱
349
注册时间
2017-3-20
在线时间
86 小时
发表于 2018-12-17 21:25:12 | 显示全部楼层
串口接收也可以用DMA通道啊
回复

使用道具 举报

18

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
354
金钱
354
注册时间
2016-8-2
在线时间
79 小时
 楼主| 发表于 2018-12-18 15:20:56 | 显示全部楼层
本帖最后由 ajianyes 于 2018-12-18 15:25 编辑
不存在的时间 发表于 2018-12-17 21:25
串口接收也可以用DMA通道啊

接收与发送都是用DMA方式的,但有时需要收到接收方的正确应答时,就涉及到了数据的重新发送与查询接收问题,这个时候如果是用查询等待应答软件只能写成阻塞型的了
回复

使用道具 举报

18

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
354
金钱
354
注册时间
2016-8-2
在线时间
79 小时
 楼主| 发表于 2018-12-19 11:37:58 | 显示全部楼层
nashui_sx 发表于 2018-12-18 21:47
按你的思路,不阻塞也只是不阻塞cpu,串口发送还是要等待返回的OK,直接信号量同步下就可以了,发送完就等 ...

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-30 01:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表