查看: 130|回复: 10
收起左侧

[嵌入式Linux] 关于RS-485的驱动编写框架

[复制链接]
     

8

主题

60

帖子

190

积分

中级技术员

 楼主| 发表于 2017-9-12 14:07 | 显示全部楼层 |返回版面||阅读模式
【环境】硬件接口:ARM板通过串口连接TTL转485的模块,然后485模块上挂了好几个编码器;
【问题】如题,最近编写基于485的驱动(串口已经能实现数据的收发),现在如果要抽象接口给上层,想请教下实现的思路;
【抛砖引玉】:最简单的就是发一个问询命令,然后等待数据(等待的条件:超时或者数据尾),然后再问询下一个设备;
个人感觉这样写出来的话,比较笨一点,有没有高手指点以下呢~
真正的设计应该是友好的,给人带来温暖和希望的。
     

4

主题

652

帖子

1990

积分

助理工程师

发表于 2017-9-12 15:30 | 显示全部楼层 |返回版面
查表

评分

参与人数 1威望 +1 收起 理由
JK_alvin + 1
     

8

主题

60

帖子

190

积分

中级技术员

 楼主| 发表于 2017-9-12 16:20 | 显示全部楼层 |返回版面

能不能细讲下,谢谢~
真正的设计应该是友好的,给人带来温暖和希望的。
     

4

主题

652

帖子

1990

积分

助理工程师

发表于 2017-9-12 21:17 | 显示全部楼层 |返回版面
JK_alvin 发表于 2017-9-12 16:20
能不能细讲下,谢谢~

百度下 C语言查表法

评分

参与人数 1威望 +1 收起 理由
JK_alvin + 1
     

0

主题

281

帖子

844

积分

高级技术员

发表于 2017-9-13 18:53 | 显示全部楼层 |返回版面
注册,轮询是RS485经典处理方法

评分

参与人数 1威望 +2 收起 理由
JK_alvin + 2
     

8

主题

60

帖子

190

积分

中级技术员

 楼主| 发表于 2017-9-18 09:05 | 显示全部楼层 |返回版面
一事无成就是我 发表于 2017-9-13 18:53
注册,轮询是RS485经典处理方法

谢谢~
真正的设计应该是友好的,给人带来温暖和希望的。
     

8

主题

60

帖子

190

积分

中级技术员

 楼主| 发表于 2017-9-18 09:16 | 显示全部楼层 |返回版面
我还是把我的思路写下:
我后来是按照状态机的方式进行编写的,因为我485总线上外挂了2个设备,我的状态机分了3个部分:
1.设备轮训命令,(一个静态变量用作设备地址,每下发一次读取命令,设备地址增加);
2.读取缓存数据,解析设备返回值(因为我的协议里面有设备地址,所以不用单独考虑数据的来源);
3.case不同地址,针对性的数据处理;
说下这样做的缺点:
没有做超时检测,默认每个设备在master下发命令后,只有一个循环周期(10ms)的时间进行传输,如果发送丢帧、或接收丢帧,没有重发的机制;
真正的设计应该是友好的,给人带来温暖和希望的。
     

0

主题

281

帖子

844

积分

高级技术员

发表于 2017-9-18 09:26 | 显示全部楼层 |返回版面
你太神了,居然不做容错处理,询问完毕,定时启动(可以用变量计数定时)。不但要做容错处理,而且有时候还要做协议序号处理(序号是用来表达下发的第几次命令)
     

8

主题

60

帖子

190

积分

中级技术员

 楼主| 发表于 2017-9-18 09:42 | 显示全部楼层 |返回版面
一事无成就是我 发表于 2017-9-18 09:26
你太神了,居然不做容错处理,询问完毕,定时启动(可以用变量计数定时)。不但要做容错处理,而且有时候还 ...

是的,我这样处理确实很粗糙,后面必须要增加容错的机制;
另外一个就是,我外挂的这个设备读取的数据需要比较高的实时性,轮询每个设备如果设置超时的话会影响下一个设备的数据实时性。所以也没考率给每个设备几次响应时间。
真正的设计应该是友好的,给人带来温暖和希望的。
     

0

主题

281

帖子

844

积分

高级技术员

发表于 2017-9-18 11:44 | 显示全部楼层 |返回版面
JK_alvin 发表于 2017-9-18 09:42
是的,我这样处理确实很粗糙,后面必须要增加容错的机制;
另外一个就是,我外挂的这个设备读取的数据需 ...

那你还不如用双串口的芯片两条485,没必要做的这么折腾人
     

8

主题

60

帖子

190

积分

中级技术员

 楼主| 发表于 2017-9-18 16:15 | 显示全部楼层 |返回版面
一事无成就是我 发表于 2017-9-18 11:44
那你还不如用双串口的芯片两条485,没必要做的这么折腾人

哎~就是因为串口不够,用的STM32F429ZIT6,6路串口都已经用完了.
真正的设计应该是友好的,给人带来温暖和希望的。
您需要登录后才可以回帖 登录 | 注册 手机登录

本版积分规则

关闭

热门推荐上一条 /3 下一条

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