【 协议 】 freemodbus的分层结构分析

freemodbus的兼容性非常好,可以方便的在很多的平台进行移植,这与它的代码架构有很大的关系。
这里我们不考虑代码的移植过程,仅仅分析它的架构的层次结构。

我认为,freemodbus协议实际上是分了三个层次的
    1. 应用层(或者说暴露给应用层的接口):
        接口定义全部在头文件mb.h中包含,在mb.c中实现。
        包括了移植时不需要改动的部分(一些初始化,使能,poll等),还有需要修改或者说实现的部分(寄存器操作等)。
            而且在初始化中通过回调函数指向了第二层的函数接口,相当于为整个程序提供了统一的接口去访问第二层的函数,而不用考虑第二层的改变。
    2. 协议(移植)层:
        这一层体现了freemodbus的类型多样(RTU模式,ASCII模式,TCP模式等)
        接口定义类型.h(mbrtu.h/mbascii.h)中包含,在对应的.c中实现。
        目前看到的函数全部不用改动,可以直接调用。实现了具体的(RTU)初始化、开始、停止、接收处理、发送处理等部分功能。
        此层函数直接调用物理层接口。
    3. 物理层:
        接口定义在mbport.h中定义,用户只需要根据平台的不同具体实现(初始化串口、初始化最小单位为50us的定时器、使能串口和定时器等)其定义的相关接口。具体位置的话,串口相关的基本操作在portserial.c中,定时器相关的在porttimer.c中,状态机在portevent.h中
        
    4. 特殊点:    
        这里有一个地方比较特殊,就是接受和发送中断函数。实际上的接受和处理是在协议(移植)层定义并实现好的,但是清中断必须要下放到物理层来适配不同的平台。
        所以freemodbus规定了接受中断和发送中断必须分别包括两个函数,这两个函数通过回调的形式最终指向的是协议移植层的接收处理和发送处理函数。接受中断处理函数和发送中断处理函数需要注册在本层(物理层)的串口初始化部分。
        所以我认为    可以说freemodbus协议规定了中断处理函数的流程。
                           也可以说是freemodbus做好了中断处理函数,只是让用户在物理层帮忙清一下中断标志,如果需要其他操作也可以同时加入。

5. 总结:这个架构明显的分了三个层次,对应着用户移植的三中情况:
    (1)业务:串口接收数据与业务完全分离,业务只需要调用接口,而不对串口的架构做任何的修改即可。
    (2)切换协议:假设从RTU切换到ASCII,那么只需要在应用层接口中注册ASCii的回调即可完成,底层与业务无需修改。
    (3)切换平台:以单片机为例,切换的时候仅需要把物理层的硬件实现重新适配,而不需要对上层做任何的改动。
    那么其调用流程为:
                     应用->(调用)应用层的接口 -> (回调) 协议(移植)层函数->(调用)物理层接口

当然,这个协议远比我分析的复杂和具体,以后有时间和机会我还会继续学习和分析整理。

原文地址:https://www.cnblogs.com/guoqingpeng/p/12422482.html

时间: 2024-11-08 22:52:29

【 协议 】 freemodbus的分层结构分析的相关文章

关于HTTP协议跟TCP、IP协议到底在网络协议中的分层。

我们来看当我们在浏览器输入http://www.mycompany.com:8080/mydir/index.html,幕后所发生的一切. 首先http是一个应用层的协议,在这个层的协议,只是一种通讯规范,也就是因为双方要进行通讯,大家要事先约定一个规范. 1.连接 当我们输入这样一个请求时,首先要建立一个socket连接,因为socket是通过ip和端口建立的,所以之前还有一个DNS解析过程,把www.mycompany.com变成ip,如果url里不包含端口号,则会使用该协议的默认端口号.

TCP/IP协议族分层

协议族的分层抽象,一定意义上来说,每层敬职敬责的做自己的工作,同时也共同完成通讯协议的共同目标. 这是一个垂直划分的抽象层次,挺有意义. 1.链路层/数据链路层/网络接口层 操作系统中的设备驱动程序和计算机的网络接口卡,负责处理与网络电缆或其他媒介的物理接口细节.该层协议主要包括ARP.RARP. 2.网络层 处理分组在网络中的活动,如分组的选路:该层协议包括IP协议,ICMP协议,IGMP协议. 3.运输层 主要为在两台主机上的应用程序提供端到端的通信.主要包括TCP协议.UDP协议. 4.应

6.UDP协议

1.UDP简要介绍 UDP是传输层协议,和TCP协议处于一个分层中,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议. UDP数据报结构: UDP首部格式: 解释: 源端口号:该项是任选项,默认值是0,可以被指定. 目的端口号:该项必须指定,因为这个作为接收主机内特定应用进程相关联的地址. UDP长度:该字段表示数据报文的长度(包含首部和数据部分),最小8个字节. 检验和:该字段用于防止UDP用户数据报在传输中出错.当进行检验和计算时,要在UDP数据报之

Android网络编程系列 一 TCP/IP协议族

在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必要进一步的了解,这就要我们了解网络通信层了,提到网络通信层不得不说起ISO-OSI的七层协议经典架构,如图所示: 上图的左边部分就是osi架构模型了, ISO/OSI模型,即开放式通信系统互联参考模型(Open System Interconnection Reference Model),是国际标

TCP/IP协议族(一) HTTP简介、请求方法与响应状态码

接下来想系统的回顾一下TCP/IP协议族的相关东西,当然这些东西大部分是在大学的时候学过的,但是那句话,基础的东西还是要不时的回顾回顾的.接下来的几篇博客都是关于TCP/IP协议族的,本篇博客就先简单的聊一下TCP/IP协议族,然后聊一下HTTP协议,然后再聊一下SSL上的HTTP(也就是HTTPS)了.当然TCP/IP协议族是个老生常谈的话题,网络上关于该内容的文章一抓一大把呢,但是鉴于其重要性,还是有必要系统的总结一下的. 一.TCP/IP协议组简述 在聊HTTP与HTTPS之前呢,我们先简

TCP/IP协议详解——邮差与邮局

信号的传输总要符合一定的协议.比如说长城上放狼烟,是因为人们已经预先设定好狼烟这个物理信号代表了“敌人入侵”这一抽象信号.这样一个“狼烟=敌人入侵”就是一个简单的协议. 信号的传输总要符合一定的协议(protocol).比如说长城上放狼烟,是因为人们已经预先设定好狼烟这个物理信号代表了“敌人入侵”这一抽象信号.这样一个“狼烟=敌人入侵”就是一个简单的协议.协议可以更复杂,比如摩尔斯码(Morse Code),使用短信号和长信号的组合,来代表不同的英文字母.比如SOS(***—***, *代表短信

Android网络编程系列 一 TCP/IP协议族之传输层

这篇借鉴的文章主要是用于后续文章知识点的扩散,在此特作备份和扩散学习交流. 传输层中有TCP协议与UDP协议. 1.UDP介绍 UDP是传输层协议,和TCP协议处于一个分层中,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议. 1.1.UDP协议头 1.2 UDP端口号 由于很多软件需要用到UDP协议,所以UDP协议必须通过某个标志用以区分不同的程序所需要的数据包.端口号的功能就在于此,例如某一个UDP程序A在系统中注册了3000端口,那么,以后从外面传

常见的三种存储技术以及iSCSI协议

1.常见的存储技术 DAS:Direct  Attached Storage,直接附加存储,存储设备通过SCSI接口电缆直接连接到服务器的,存储设备不带有任何操作系统.它依赖于服务器,存储设备就是将硬件设备堆叠起来的.DAS也可称为SAS(Server Attached storage,即服务器附加存储). DAS具有如下特性: 1.DAS设备不带有任何操作系统,文件系统位于服务器端,因此是以块级别进行数据传输 2.它是通过SCSI接口电缆与服务器相连,因此,会增加服务器的I/O操作,占用cpu

JAVA基础知识之网络编程——-TCP/IP协议,socket通信,服务器客户端通信demo

OSI模型分层 OSI模型是指国际标准化组织(ISO)提出的开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它将网络分为七层:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层 TCP/IP协议 TCP/IP是一系列网络通信协议的统称,其中最核心的两个协议是TCP和IP.TCP称为传输控制协议,IP称为互联网络协议. 网络分层除了OSI模型分层,还有TCP/IP模型分层,将网络划分为四层,应用层.传输层.网际层