stm32平台BACnet移植(一)

前面是吐槽,不想看直接从分割线开始看干货
首先我想表达,移植bacnet确实是一件扎心的事情。笔者费了好一番功夫,总算也是跑通了官方给的demo,是的。正常来说,官方demo是可以立马使用的,但是可能bacnet比较特殊吧,我现在(2017.10.18)最新版协议栈是0.8.5。
笔者的一向习惯,首次使用下载最新版本,以后能不更新则不更,除非出现在好用的升级。开开心心下载好了0.8.5,打开一看,哇,好简陋的官方协议栈居然doc都没有,不过好在有demo吧,虽然隐藏在port文件夹下,我用的stm32,其他几个平台忽略,打开stm32的一看。好吧,IAR编译的,stm32用惯了mdk,没有iar for arm,为了这份没有文档的代码,下载吧,不然怎么看,虽然文件都在这,但我不知道哪个有用啊,扎心。
下好IAR,安装,打开工程,唔,什么梗,缺文件,官方协议栈缺文件,官方维护人员有些走心呐,这下玩个飞机,没办法,求助伟大的网友吧,网上找资料也扎,关于bacnet资料少的可怜,好不容易找个几个稍微有用的,说的也有些抽象,不过我捕捉到一个信息 ,有人说官方协议栈是有doc的,but怎么我下的没有呢,难道我下错了?重新去下了一份,还是没doc,无奈,放弃最新版,下了旧点的(0.8.0),结尾是个偶数,应该是一个正式版不是测试版,期待比0.8.5好一些,果然不负我,里面东西相比之下太全了,有文档,demo也多了好多平台(我不知道我为什么高兴,我只用一个平台,这和我没关系啊,)

——————————————————————————

吐槽结束,开始放干货,既然网上资料少,那我应该贡献点什么了。目前只做了移植,就先把怎么在stm32上面跑通分享出来。
准备:bacnet-stack-0.8.5 bacnet-stack-0.7.5
两个协议栈是必须的(目前来看,以后官方应该会更新完0.8.5,到时候可能直接用0.8.5就好了,期待)。
相对而言0.7.5缺少的文件方便整理,所以我基于0.7.5补充,把缺少的一些东西从0.8.5copy过来,
用iar打开0.7.5里面stm32工程bacnet-stack-0.7.5.zip\bacnet-stack-0.7.5\ports\stm32f10x\bacnet.eww。看上去似乎没什么问题,编译一下,发现缺少库,把0.8.5的drivers文件夹和CMSIS文件夹覆盖copy过来,或者先删了,再把0.8.5版本的copy,完事编译,发现还是缺少两个头文件core_cmInstr.h core_cmFunc.h,这两个协议栈找不到,去网上下两个,塞到工程里,编译,终于没有错误了。
接下来解决警告,有很大部分警告来自启动文件,
Label ‘Reset_Handler’ is defined pubweak in a section implicitly declared root …/p_stm32f40_41xxx.s
可以做如下修改把REORDER(2)改为REORDER:NOROOT(2),REORDER(1)改为REORDER:NOROOT(1)
其中,NOROOT可以替换成ROOT,因为在.s中中断标号是弱定义,改成NOROOT就是未使用时优化,对应ROOT未使用时不优化。对程序没什么影响。
好了,大功告成,开始慢慢啃源码吧~~~

顺带一提,虽然doc给的后缀不尽相同,但是除了一个奇葩都可以用nodepad打开。其他软件没有试。但我觉得可以阅读文本的都能看。
有关官方协议栈和移植好的代码可以留邮箱。

猜你喜欢

转载自blog.csdn.net/main_h_/article/details/78277145