1、下载FreeModbus源码,地址 https://github.com/cwalter-at/freemodbus
2、压缩包解压后,只用到modbus文件夹和demo/BARE文件夹
3、准备一个GD32最简易工程,我准备的工程编译后空间占用:
Program Size: Code=2332 RO-data=236 RW-data=4 ZI-data=1036
4、将2中提到的两个文件夹,复制到GD32工程下
5、在GD32工程中,通过Keilv5的Manage Project Items,在Groups中建立两个目录,分别为FreeModbus和FreeModbus/Port,将复制过来的文件夹中的文件,分别分配到上面两个目录中。
6、在Options for Target的C/C++中,把两个文件夹中带.h文件的目录,设置到Include Paths中,不确定设置哪个,可以去文件夹中看一下都是哪个文件夹有.h文件。
7、编译,会发现有2个错误(我这边是出现了2个,别人可能不同)。
Symbol __ARM_use_no_argv multiply defined(by demo.o and main.o),这个错误是自己原来工程的main函数和FreeModbus中的demo.c里main函数冲突,所以需要暂时屏蔽一个。
屏蔽后编译,又出现一个错误
Undefined symbol __aeabi_assert(referred from mbrtu.o)
是因为原GD32工程使用的是MicroLIB库,里面未包含__aeabi_assert这个函数,所以在Options for Target的Target中,将Use MicroLIB前面的√去掉。
重新编译,通过。
此时,空间占用情况为:
Program Size: Code=5140 RO-data=992 RW-data=132 ZI-data=2524
对比可以粗略知道,FreeModbus未改变默认配置时的空间占用情况。
未完待续!截至此行还不能真正跑起来……哈哈哈