关于嵌入式软件的分层,驱动接口做成什么样比较好?

2020-01-07 19:24发布

本帖最后由 qingyin2009 于 2016-6-22 20:15 编辑

最近项目上用了串口,需要重写串口驱动

用到的串口帧为这样的:
            枕头1 + 字节1 + 字节2 + 字节3 + 字节 n + 帧尾1      枕头帧尾为固定值,

       我驱动是这样写的:

                若接收未完成,收到数据判断是否为接收第0字节,若是则判断帧头是否对应,若是,就接着接收,接收字节数递增。其他字节接收进对应位置,字节数递增;若字节数大于规定字节数,同时帧尾符合要求,即将接收完成标志置1。应用程序读取接收完成标志,若完成,则将数据读取,同时清除接收完成标志,准备下一帧接收

       同事说我将应用层的协议做进底层了,不建议这么做。建议做成数据缓冲区,由应用层判断帧数据是否符合要求。那么问题来了,帧与帧有发送间隔,这个间隔在数据缓冲区怎么体现?

       原来写程序,分层不明显,所以也不怎么熟悉,不知道各位有没有相关的资料或者是好的例程推荐?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
31条回答
electrlife
1楼-- · 2020-01-09 15:42
qingyin2009 发表于 2016-6-23 08:34
这么做不是应用层协议(帧头,帧尾)放驱动底层里面了吗,针对特定应用是可以的,后面移植的话,还要改底 ...

这个帧头尾相当于mac层,至于所承载的数据的含意由应用层来解析。
electrlife
2楼-- · 2020-01-09 18:27
 精彩回答 2  元偷偷看……
sbusr
3楼-- · 2020-01-09 21:30
只有帧头和帧尾?固定长度?建议加上帧长度信息,和求和校验,保证可靠传输。
e1ki0lp
4楼-- · 2020-01-10 00:37
本帖最后由 e1ki0lp 于 2016-6-25 00:58 编辑

坛里面有许多 串口循环FIFO 的源码 基本也都有超时检测 就是楼主所说的底层部分 可以搜一下

如果有单片机的modbus源码也可以看一下,都是从底层写到应用层的.底层就是串口缓冲+超时检测.
modbus让串口应用于恶劣的工业环境做了很多工作(应答与校验).
不过我之前做东西没搜到十分完美的modbus的代码,自己写又太麻烦,就没用modbus.
单飞
5楼-- · 2020-01-10 04:09
就是这么做的,由帧头帧尾断帧。误判帧头的可能是有的(帧尾不会误判,因为还有长度字段辅助判断;其实一般是不会误判的,除非上一帧出错,然后可能会接着错几帧),但是概率很小,当然就算是误判也是校验不过。交通部的808解决这个问题时用了转义的方法。
xiaoergao
6楼-- · 2020-01-10 06:26
枕头看的我好心塞啊

一周热门 更多>