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

2020-01-07 19:24发布

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

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

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

       我驱动是这样写的:

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

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

       原来写程序,分层不明显,所以也不怎么熟悉,不知道各位有没有相关的资料或者是好的例程推荐?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
31条回答
qingyin2009
1楼-- · 2020-01-10 08:06
 精彩回答 2  元偷偷看……
tianfish871216
2楼-- · 2020-01-10 10:08
学习一下分层思想,感觉自己分的很乱。
浮生未歇
3楼-- · 2020-01-10 13:11
底层驱动可以整一个环形缓冲区,用来接收数据,应用层你只需从缓冲区拿数据进行处理就行,不过向环形缓冲区填充数据时,读写指针的处理要细心一些
Huaan
4楼-- · 2020-01-10 17:09
实际上这里面包含两部分:串口驱动和协议数据
按LZ的做法,在串口接收时就去涉及协议的内容,反而是加强了驱动和协议的耦合性,一旦换一套协议,串口接收部分代码就得跟着改;这样做还有个缺点,接收完一帧必须马上处理,处理不及时要么覆盖已接收的帧,要么丢新来的帧数据。
建议串口驱动做成环形FIFO,这样串口驱动的通用性会比较好,然后应用去处理数据流
undead
5楼-- · 2020-01-10 18:44
我理解的是,底层不需要知道上层是怎么用串口数据的,只需要留好接口即可。
如果是我,底层需要实现的接口有:配置串口参数(波特率、数据位、停止位),配置最大超时间隔及回调函数,读函数,写函数,清空函数。
zhaoyuanxian
6楼-- · 2020-01-10 22:06
 精彩回答 2  元偷偷看……

一周热门 更多>