原创 【转贴】430也能玩嵌入式:Contiki内核在IAR+MSP430下移植(六)

2013-1-24 09:53 2376 12 12 分类: MCU/ 嵌入式

 

430下也能跑操作系统,本文转自:http://blog.chinaunix.net/uid-9112803-id-3146985.html
 

3.3 重复段Error[e24]

链接时提示如下错误:

9112803_1332594813O07l.png

图6 IAR Error[e24]示意图

    造成这个问题的原因是有些文件包含了msp430.h,而有些文件包含了io430.h。以MSP430F1611为例,前者通过宏定位到msp430f1600.h,通过则是定位到iox16x.h,而这两个文件有很多重叠的地方(如本例的IE1)。cpu/msp430/rom.c包含了io430.h,flash.c包含了msp430.h,在这里,将flash.c包含的msp430.h改成io430.h。

    同样的问题也发生在cpu/msp430/watchdog.c、core/dev/sht11.c、platform/MSP430-169LCD/dev/button-sensor.c(这个还得从包含的头文件追溯,在cpu/msp430/dev/hwconf.h文件)、cpu/msp430/leds-arch.c、cpu/msp430/clock.c、cpu/msp430/cc2420-arch-sfd.c等,可以通过Find in Files寻找msp430.h来替换。

3.4 外部符号未定义

(1) BV

    在cpu/msp430/button.c提示外部符号BV未定义,通过Find in Files查找,可知该宏通常是定义在contiki-conf.h或者platform-conf.h文件,如下:

9112803_1332594826oq22.png

图7 BV宏定义位置

这里,模仿其他例程,在platform/MSP430-169LCD/contiki-conf.h文件加入如下代码:

 

  1. #ifndef BV
  2.   #define BV(x) (1<<(x))
  3. #endif

 

(2)cc2420_sfd_counter、cc2420_sfd_start_time和cc2420_sfd_end_time

    在cpu/msp430/cc2420-arch-sfd.c提示外部符号cc2420_sfd_counter.c、cc2420_sfd_start_time和cc2420_sfd_end_time未定义,该文件将这三个变量声明为外部变量,源码如下:

 

  1. extern volatile uint8_t cc2420_sfd_counter;
  2. extern volatile uint16_t cc2420_sfd_start_time;
  3. extern volatile uint16_t cc2420_sfd_end_time;

 

    事实上,这三个变量已经在contiki-2.5/core/dev/cc2420.c文件定义了, 而这个文件已经被我工程目录删除了,因为编译cc2420.c会引发一系列端口未定义(如TXEPT、UTXIFG0),而这些端口大概是跟cc2420芯片有关吧。这里,我们简单将cpu/msp430/目录下的cc2420*.c文件从工程移除。

 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
12
关闭 站长推荐上一条 /3 下一条