Chinaunix首页 | 论坛 | 博客
  • 博客访问: 400459
  • 博文数量: 87
  • 博客积分: 1171
  • 博客等级: 少尉
  • 技术积分: 1068
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-19 14:34
文章分类

全部博文(87)

文章存档

2014年(10)

2013年(24)

2012年(53)

我的朋友

分类: 嵌入式

2012-10-26 14:56:22

 
   本文是仿照一个学长contiki2.5移植到IAR上的工程,经行移植的,主要参考里面的配置文件怎么处理的,具体细节会再下面一步步记录下来。
 
 
  出现问题的地方比较多,但是类型就哪几种,将每种遇到的问题及解决方式列出来
  1,头文件问题cc253x.h
 
  1,在建立工程目录,配置好工程后,首先进行编译,
 
 
一阵莫名其妙,调试了两天硬是不知道哪里出问题了,真是憋成硬伤了。很奇怪,这个iocc2530.h是编译器自带的头文件,怎么会莫名冒出来1W+个错误呢,郁闷之极,就开始认真比对学长的contiki-2.5版,最后在8051def.h中找到了一点不同:
#if !defined(__SDCC_mcs51) && !defined(SDCC_mcs51)
#define __data
#define __xdata
#define __code
#define __bit bool
#define __sfr volatile unsigned char
#define __sbit volatile bool
#define __critical
#define __at(x)
#define __using(x)
#define __interrupt(x)
#define __naked
 
在contiki-2.6版本中有上面的宏定义,目测是contiki是在linux上发行的,支持sdcc编译器,而现在用的是IAR,__data 在IAR里面是用来定义变量属性的,怎么能定义为空呢,所以果断把这里给屏蔽了。然后进行编译,果断剩下600+个错误,大喜。接下来应该很多是语法方面的,比如中断服务函数定义方式之类的。继续
 
3,600+中的第一个问题就是中断服务函数定义方式问题
   \contiki-2.6\cpu\cc253x\rtimer-arch.c
   \contiki-2.6\cpu\cc253x\rtimer-arch.h
 
//void rtimer_isr(void) __interrupt(T1_VECTOR);
  #pragma vector=T1_VECTOR
  __near_func __interrupt void rtimer_isr(void);
 上面是声明,改了。在定义处,只需要把冒号去掉就行了。其他地方出现同样的问题,照此处理就行了。
 
 
 
 
  #pragma vector=P0INT_VECTOR
 __interrupt void port_0_isr(void);
 
4.在platform\cc2530dk\dev\Adc-sensor.c 中
static int
configure(int type, int value)
{
  switch(type) {
  case SENSORS_HW_INIT:
#if TEMP_SENSOR_ON
    /* Connect temperature sensor to the SoC */
    ATEST = 1;
    TESTREG0 = 1;
#endif
    APCFG = 0; /* Disables Input Channels */
    break;
  }
  return 1;
}
 
这个函数中的TESTREGO是cc2530中的测试寄存器,地址是
SFRX(TESTREG0,   0x624B); /* Test register 0 */
这是定义在cc253x.h中的,由于我们使用IAR自带的头文件iocc2530.h iocc2531.h 来完成2530头文件的定义,所以命名难免有多不同,不过只需找到contiki-2.6中cc253x.h该符号所对应的地址,然后在iocc2530.h中找到对应的符号,修改掉该处即可。
 
 
5,有些不是contiki2.6 core中的所有文件都是要包含的,有些是用不到的,所以那些可以去掉
 如 :
 
 cc2420是一款射频芯片,目测在cc2530里面应该没用,暂时去掉。
 
 
 
6,core->cfs cfs-coffee.c中包含了#include "cfs-coffee-arch.h"
在source-sight中查找了此头文件,只有在
从上面可以看到,这个和cc2530貌似没什么关系,既然不知道这个头文件的关系,那就直接先将cfs相关的文件暂时编译,毕竟我们现在只是把contiki-2.6换下工作环境,而不是实现它的所有模块,这个在用的时候再去自己分析。
 
此类还有很多,有的是.c中的,尽量不踢出网络方面的东西,其他外围可以踢出。
 
 
 
 
7关于__bit的声明,必须声明成bool型。

     extern volatile __no_init __bit bool sleep_flag;

    #include "stdbool.h"

 

 

 

8

阅读(7087) | 评论(3) | 转发(3) |
给主人留下些什么吧!~~

duanpb2013-05-27 16:32:12

icehot029:你好啊,能发一份工程文件给我么?我移植出现错误太多了。。。。。

今天刚刚把 2.5的移植成功了,开始的时候好多错误啊,一点点弄好了,同学要的话加我 414340714 我给你发一份我移植好的,能点灯了.....

回复 | 举报

icehot0292013-05-27 09:42:45

你好啊,能发一份工程文件给我么?我移植出现错误太多了。。。。。

yxpaladin2012-12-20 16:05:49

同学你好 我最近也在学习contiki,在移植contiki到IAR 2530的时候出现了许多问题,能否把你文中提到的移植文档给我 发一份呢。 谢谢你了