Chinaunix首页 | 论坛 | 博客
  • 博客访问: 51419
  • 博文数量: 14
  • 博客积分: 48
  • 博客等级: 民兵
  • 技术积分: 82
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-16 18:35
文章分类

全部博文(14)

文章存档

2013年(11)

2012年(3)

我的朋友

分类:

2012-11-03 15:53:37

原文地址:contiki-2.6移植到IAR上笔记 作者:hnylcxq

 
   本文是仿照一个学长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

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