最近这段时间一直在研究无线固件升级和串口升级固件,在研究中出现了好多问题,有些问题在TI官方文档和在TI官方论坛也没找到答案,发的帖基本就是没人搭理成了死帖。在论坛或QQ群经常看到初学者问是否可以串口下载zigbee程序呢?我刚学zigbee时也问过老板,老板说不行,只支持用仿真器烧写。后来慢慢学,发现真的是可以串口烧写程序,TI官方的资料也讲了如何制作可以用串口烧写的bin文件。过年前就研究过这个功能,但是当时出现了问题,什么问题呢?zigbee协议栈版本太低了,不支持无线固件升级这个功能和没带串口固件升级的一些配置问题(这些配置文件不是编译器带的是TI工程师自己制作的),于是升级到最高的版本。打开tools文档,看到里面确实带了sb-boot.xcl。当时相当兴奋,编译了下bootloader的工程,哇塞,郁闷了,怎么会出现错误呢?竟然出现了Fatal Error[e72]: Segment PDATA_Z must be defined in a segment definition option (-Z, -b or -P) 这个问题,我之前也在论坛发了帖子问过类似的问题,不过貌似也成了死贴,可能真的没什么人真正去研究或者不屑回答吧。看错误我们可以很明白就是段PDATA_Z 没有定义,问题是怎么会出现这个问题呢?我猜想可能是IAR版本太高了对于一些段的映射可能更严格吧,所以需要定义。问题来了。如果要改的话,我们在那改呢?其实就是在sb-boot.xcl这个文件里面
////////////////////////////////////////////////////////////////////////////////
//
// XDATA memory
//
-Z(XDATA)XSTACK+_XDATA_STACK_SIZE=_XDATA_START-_XDATA_END
-Z(XDATA)XDATA_Z,XDATA_I=_XDATA_START-_XDATA_END
-P(XDATA)XDATA_N=_XDATA_START-_XDATA_END
-cx51
颜色为绿色的地方修改。修改成-Z(XDATA)PDATA_Z,XDATA_Z,XDATA_I=_XDATA_START-_XDATA_END。以后碰到了类似的情况也可以这样修改。这样就没问题。现在看起来很简单,当时可是花费了我好多时间。细节的东西很值得玩味,TI的文档真的需要多看几遍。不然真的好难理解,省略了好多细节的东西,真有点是摸着石头过河的味道,现在看下效果如何。解决了这个问题,制作可以用串口烧写的bin文件就相当容易了。后面的我就不多说了,就是对照TI文档做了(可不要认为简单哦,没什么东西是简单的)下面来两张图片,一个是没修改之前的错误信息图片,后面一个是修改之后的编译正确的图片。(如果你们做到这个功能,觉得对你们有帮助就留下什么吧)不知为何有一张图片不能上传,反正做了这个实验的就明白了