【引言】
移植的必要性
通过移植Contiki到IAR环境,可以很清晰的查看contiki操作系统的细节,同时IAR开发环境支持CC2530在线仿真,这对于WSN网络是十分有用的,有效地。这也是为什么喜欢2530的原因。
概述
通过移植Contiki到IAR环境,可以很清晰的查看contiki操作系统的细节,同时IAR开发环境支持CC2530在线仿真,这对于WSN网络是十分有用的,有效地。这也是为什么喜欢2530的原因。
你将学到
- 如何移植contiki到IAR环境。
- 关于移植的细节
【IAR文件路径】
1 | $TOOLKIT_DIR$\INC\DLIB\C\ |
【相关宏定义】
1 | UIP_CONF_IPV6=1 |
【GDCC到IAR的编译修改】
(1) asm未定义
GCC下关键字asm,等同于IAR的asm。不过,从文档《IAR C/C++ Compiler Reference Guide.pdf》来看,推荐使用关键字asm(英文原文:the asm keyword is not available when the option –strict is used. The asm keyword is always available)。在相应文件增加如下代码,即可解决:
1 | #ifdef __IAR_SYSTEMS_ICC__ |
(2)变量
1 | __xdata __at(0x0000) static unsigned long timer_value = 0; |
变成
1 | static volatile unsigned long timer_value = 0; |
更恰当的修改
1 | //static CC_AT_DATA struct timer debouncetimer; |
变成
1 | #ifdef SDCC |
关于中断
1 | void 2 port_0_isr(void) __interrupt(P0INT_VECTOR) |
修改成
1 | #ifdef SDCC |
1, 根据iocc2530.h修改了cc253x.h
为了找到cc2530的IEEE Addres,在cc253x.h(改编自iocc2530.h)中添加了
1 | #define X_IEEE_ADDR PXREG(0x780C ) /* Start of unique IEEE Address */ |
2,中断服务函数 linux 下是SDCC 要改成IAR格式
1 | void rtimer_isr(void) __interrupt(T1_VECTOR); |
改成
1 | #ifdef SDCC |
此时还有90个错误
1 | //__xdata __at(0x0000) static unsigned long timer_value = 0; |
修改了button-sensor.h 使之符合IAR格式
修改了button-sensor.c 清除了cc2531的情况
–这样做,不合算,仅是为了更快的修改而已,以后也要加上cc2531这种情况
1 | Error[e46]: Undefined external"BUTTON_IRQ_CHECK::?relay"referredinbutton-sensor ( F:\Contiki OS\2530contiki2.7\Debug\Obj\ |
1 | 相应的文件没有添加上 |
在8051def.h 屏蔽了部分宏(没用明确定义)
1 | //#if !defined(__SDCC_mcs51) && !defined(SDCC_mcs51) |
在cc253x.h文件中主要修改了关于读取芯片MAC的地址,如下
1 | /* ------------------------------------------------------------------------------------------------ |
主要是第8行,根据这个地址,程序可以读取芯片的MAC地址,由此作为网络IP或者节点IP等。
系统莫名其名重启—溢出问题和看门狗设置
1,修改看门狗启动— WDCTL|=0x08
2,溢出–适当减少XDATA;
编译器的bug—更改一次烧写 linker 换成128_banked.xcl (芯片对应版本) 就好了。
作者:古鲁咕噜
来源:CSDN
原文:https://blog.csdn.net/zzuzpb/article/details/48090521
版权声明:本文为博主原创文章,转载请附上博文链接!