在前面已经说明了freemodbus在GD32的另类移植办法。接下来就是说明如何利用freemodbus这个抽象化的协议栈上,更快速地开发自己的通信应用部分。
Freemodbus在获取到一帧数据之后,如果功能码对应的上,则通过查表跳转到相对应的执行函数当中,比如写多个保持寄存器的功能码为0x16,则跳转到eMBFuncWriteMultipleHoldingRegister函数,
file:///C:/Users/RCSN/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
这个写多个保持寄存器的函数接口就是抽象在freemodbus里面的,最终实现回调的还是就是寄存器的数据,寄存器地址,长度,还有读写模型。这个接口是针对对保持寄存器进行所有操作的通用接口。同样,线圈的也有相对应的通用接口,这里我使用的都是对保持寄存器的操作,故以此作为分析点。
file:///C:/Users/RCSN/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg
既然freemodbus提供这个回调接口,那么我们就可以实现自己的应用部分,比如上位机下发时间设置参数,利用这个参数来修改RTC时间,或者上位机请求一次GD32的RTC系统时间,那么我们就返回参数。
file:///C:/Users/RCSN/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg
图中的rtc_Time_Data_t全局结构体如下:
file:///C:/Users/RCSN/AppData/Local/Temp/msohtmlclip1/01/clip_image007.png
RtcSetup()函数接口是指RTC时间设置。内部代码如下:
file:///C:/Users/RCSN/AppData/Local/Temp/msohtmlclip1/01/clip_image009.jpg
本帖最后由 RCSN 于 2018-9-30 20:17 编辑