ZigBee TI ZStack CC2530 8.4 用高版本IAR打开低版本协议栈
(配套源码、软件、开发板等资源,可移步博客同名QQ群:拿破仑940911)
一、前言
目前IAR for 8051都更新到10.10.1版本了,但很多朋友却仍在使用着IAR 8.x.x,甚至还有在用IAR 7.x.x的......
A:人家都出到IAR 10.10.1了,你还在用将近十几年前的版本啊!
B:我比较怀旧,就喜欢用十几年前的(IAR)!
A:呃,但这样你就用不了新的协议栈了呀(Z-Stack 3.0.1)!
B:我比较怀旧,就喜欢用十几年前的(协议栈)!
二、Z-Stack最新版本
截止至本篇博客发布,TI的ZigBee协议栈的最新版本为Z-Stack 3.0.1,进入TI官网,可以找到:
三、IAR for 8051最新版本
截止至本篇博客发布,IAR for 8051最新版本为IAR 10.10.1,进入IAR官网,可以找到:
四、版本匹配问题
关于协议栈与IAR的版本匹配问题,请参照《ZigBee TI ZStack CC2530 2.4 IAR软件版本》(<-点击链接)。
在TI的Z-Stack 3.0.1的《Z-Stack 3.0 Release Notes.txt》中,明确指出了该版本的协议栈所使用的IAR版本:
就是EW8051 10.10.1。这个时候问题就来了:
1、我想使用最新版本的协议栈:Z-Stack 3.0.1,就得装最新版本的IAR:EW8051 10.10.1。
2、我想使用老版本的协议栈:ZStack-CC2530-2.5.1a,就得装最新版本的IAR:EW8051 8.10.4。
3、我用新版本的IAR去打开原来老版本的协议栈,就各种不对,编译都不成功!
五、用高版本IAR打开低版本协议栈
以ZStack-CC2530-2.5.1a的GenericApp为例。
1、打开工程
装了最新版本的IAR之后,找到对应的工程文件:GenericApp.eww,发现图标已经不一样了:
双击GenericApp.eww之后,首先会弹出如下窗口:
IAR这里已经提示我们了:版本太老,是否转换为新版本?这里当然选“Yes”,直接“Enter”回车即可。
紧接着就是一系列的加载:
看上去确实变得高级了许多!
等到全部加载成功之后,就看到了我们“陌生而又熟悉”的界面:
2、编译工程
点击上图中红色圆圈中的图标,即可开始编译整个工程!
编译结束之后,发现编译结果如下:
仔细看报的error:
大体都是这一种形式:Error[e46]: Undefined external "?V1" referred in AF......
3、第一步更改操作
更改Number of virtual
找到下图中所示的位置:
Number of virtual原本值为16,将这个值改为8。
再次编译,编译结果变为:
4、第二步更改操作
替换启动文件chipcon_cstartup.s51
定位到ZStack-CC2530-2.5.1a\Projects\zstack\ZMain\TI2530DB目录下:
将其中的启动文件chipcon_cstartup.s51删除掉,加入新的同名启动文件chipcon_cstartup.s51。
(这里上传不了附件,所以大家如果需要的话,可以去群文件里面下载)
替换之后,最好是先按下图提示“clean”一下:
再次编译,编译结果如下:
此时可见,error已经没有了!
5、第三步更改操作
大功告成!禁用所有LCD相关代码
大家肯定已经发现了:自始至终都有11个warning存在!
作为一个有轻微强迫症的程序员,怎么能忍受warning的存在呢?!当然,如果你不介意warning的存在的话,那到这里就已经结束了。
仔细看编译结果中报的11条warning:
发现其实全部都是出现在hal_lcd.c文件中的。由于只有我们在使用TI原装开发板的时候,才有可能会用到Z-Stack中的lcd相关代码,一般都是不会去用的。因此,最简单的办法就是:禁用所有LCD相关代码。
找到协议栈的预编译选项所在位置:
在红色方框中的“LCD_SUPPORTED=DEBUG”前面加上“x”,改为“xLCD_SUPPORTED=DEBUG”。
并在下面新增一行:HAL_LCD=FALSE。
预编译部分更改完成后,如下图所示:
点击“OK”保存后,再次编译:
(配套源码、软件、开发板等资源,可移步博客同名QQ群:拿破仑940911)