关于RS-485的驱动编写框架
【环境】硬件接口:ARM板通过串口连接TTL转485的模块,然后485模块上挂了好几个编码器;【问题】如题,最近编写基于485的驱动(串口已经能实现数据的收发),现在如果要抽象接口给上层,想请教下实现的思路;
【抛砖引玉】:最简单的就是发一个问询命令,然后等待数据(等待的条件:超时或者数据尾),然后再问询下一个设备;
个人感觉这样写出来的话,比较笨一点,有没有高手指点以下呢~
查表 feelhyq 发表于 2017-9-12 15:30
查表
能不能细讲下,谢谢~ JK_alvin 发表于 2017-9-12 16:20
能不能细讲下,谢谢~
百度下 C语言查表法 注册,轮询是RS485经典处理方法 一事无成就是我 发表于 2017-9-13 18:53
注册,轮询是RS485经典处理方法
谢谢~{:handshake:}
我还是把我的思路写下:
我后来是按照状态机的方式进行编写的,因为我485总线上外挂了2个设备,我的状态机分了3个部分:
1.设备轮训命令,(一个静态变量用作设备地址,每下发一次读取命令,设备地址增加);
2.读取缓存数据,解析设备返回值(因为我的协议里面有设备地址,所以不用单独考虑数据的来源);
3.case不同地址,针对性的数据处理;
说下这样做的缺点:
没有做超时检测,默认每个设备在master下发命令后,只有一个循环周期(10ms)的时间进行传输,如果发送丢帧、或接收丢帧,没有重发的机制;
你太神了,居然不做容错处理,询问完毕,定时启动(可以用变量计数定时)。不但要做容错处理,而且有时候还要做协议序号处理(序号是用来表达下发的第几次命令) 一事无成就是我 发表于 2017-9-18 09:26
你太神了,居然不做容错处理,询问完毕,定时启动(可以用变量计数定时)。不但要做容错处理,而且有时候还 ...
是的,我这样处理确实很粗糙,后面必须要增加容错的机制;
另外一个就是,我外挂的这个设备读取的数据需要比较高的实时性,轮询每个设备如果设置超时的话会影响下一个设备的数据实时性。所以也没考率给每个设备几次响应时间。 JK_alvin 发表于 2017-9-18 09:42
是的,我这样处理确实很粗糙,后面必须要增加容错的机制;
另外一个就是,我外挂的这个设备读取的数据需 ...
那你还不如用双串口的芯片两条485,没必要做的这么折腾人 一事无成就是我 发表于 2017-9-18 11:44
那你还不如用双串口的芯片两条485,没必要做的这么折腾人
哎~就是因为串口不够,用的STM32F429ZIT6,6路串口都已经用完了. 学习了,谢谢。
页:
[1]