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

2020-01-07 19:24发布

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

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

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

       我驱动是这样写的:

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

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

       原来写程序,分层不明显,所以也不怎么熟悉,不知道各位有没有相关的资料或者是好的例程推荐?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
31条回答
伍师傅32
1楼-- · 2020-01-08 12:18
找找现成的参考一下,看看一些通信协议的实现
qingyin2009
2楼-- · 2020-01-08 17:18
electrlife 发表于 2016-6-22 21:54
驱动接收时只判断帧头帧尾,接完一个完整帧后通知应用程序来处理这帧数据,至于这帧数据的正确与含意由应用 ...

这么做不是应用层协议(帧头,帧尾)放驱动底层里面了吗,针对特定应用是可以的,后面移植的话,还要改底层
qingyin2009
3楼-- · 2020-01-08 19:43
lantian0099 发表于 2016-6-22 22:48
这么做过,看可以参考吗:
弄一个定时器来做帧结束的判断与处理;
在串口接收中断里只管向缓冲区写入和计数 ...

这个是我比较乐意采用的
昨天细节没有想好
DiaoMao_Huang
4楼-- · 2020-01-08 20:30
 精彩回答 2  元偷偷看……
dalarang
5楼-- · 2020-01-08 21:05
帧头后跟一个长度字节比较严谨点
changer15309
6楼-- · 2020-01-08 21:43
本帖最后由 changer15309 于 2016-6-23 11:14 编辑

赞同你同事的建议,你确实把应用层放到了底层里。
建议分3-4层实现串口模块:
1. 底层实现 中断接收数据并放进(环形)队列 和 数据发送
2. 中间tp层接收上层传过来的发送/接收等请求,调用底层完成操作
3. 上层应用层,可以分1-2层,第一层做协议解析,第二层做应用

修改原因:换行

一周热门 更多>