Contiki在CC2530上的内核移植

版权声明:转载请注明出处^_^ https://blog.csdn.net/zhou307/article/details/51308144

我发现win10上有一个markdown编辑器也很爽,名叫markdownPad2。现在越来越习惯markdown了,用的真爽啊哈哈哈。ubuntu上没有用过Emacs,但是感觉emacs好像也是这样的语法?
毕设的需要,接触了contiki,没多少时间研究,以前也从来没有接触过网络这块啊(血崩)前段时间看了一会TCP/IP协议。主要是参考各位大神的文章,CSDN上搜索到了好几个大神,看的真爽啊哈哈。关注的”xukai871105”大神,参考了他的移植配置。可惜自己内核+网络一起移植不成功,弄得一头雾水,所以先移植一个最简内核(我认为)来试试水找个自信。有一个contiki论坛里有移植教程,艾玛看的我一头雾水,不过那个论坛有篇学习心得很好,今天刚在看^-^。对了,contiki从2.7开始就有cc2530的例程了,基本不用自己编写时钟之类的。

内核移植

前言

内核移植是蛮简单的,最终实现的是blink-hello,灯闪+串口发送数据;
先介绍一下contiki关键目录的作用,我觉得看文件里面的英文注释有时候蛮有用的。

  • core这是contki核心文件(废话)

    • cfs 貌似是一个文件系统,内核移植不需要
    • ctk 看里面的描述貌似是和GUI有关
    • dev 就用到了就是一些系统所谓的外设,用到了led配置
    • lib 库文件夹,但是里面的文件内核移植的时候我去掉了一些
    • loader 这个估计是动态加载的哇,没鸟他
    • net 和网络有关,内核移植不需要;
    • sys 有一些不需要加,点开c文件看注释即可。因为有的文件和GUI,文件系统有关,所以不需要添加;
  • cpu 直接使用cc253x文件夹里面的文件:

    • dev 这就是芯片的片上外设
    • 其次cc253x下的8051def.h以及cc23x.h很有用
  • doc 里面的文档好像读读很有用!然而并没有看过;

  • example 里面都是例程,需要用到bilnk-hello
  • platfom里面的cc2530dk文件夹,里面是配置文件以及主函数;

需要添加的文件

不确定到底要不要添加的文件可以打开看看里面的描述,比如看见

This file is part of the Contiki desktop OS
说明是用于桌面系统的,所以不需要;
This file is part of the Contiki operating system.
类似这种的一般会用;

  • core下面的五六个.h文件
    • dev/ 先添加个leds的,剩下的等报错了再添加;
    • lib库:lib
    • sys: 名字含有profile的文件没有添加。
  • cpu 里面的基本要添加;dev里面添加uart和clock以及看门狗
  • example 里面就添加blink-hello即可;
  • platform里面添加conf配置文件,main文件,还有debug文件,putchar文件 。dev下添加led。

建立工程

  1. 按照目录结构建立工程目录。
  2. 按照cc2530最基本的工程配置,去设置option。
    1.General Option->Target->device information选择 cc2530f256
    2.Linker连接文件就选择2530banked即可
    3.Debugger里面就选择使用8052.ddf即可
  3. 设置好文件包含路径

错误处理

建立完工程后直接make,针对错误去改,要记录下来错误的解决办法。

  1. 没有stdint.h:在General Option->Library Configuration里面选择Normal Dlib库即可
  2. 没有compiler.h:是linux内核源码需要包含的内容;在cc253x.h里面直接包含iocc2530.h即可;
  3. type qualifier specified more than once 错误:重复定义了,删除8051def.h里面的定义。就是从这句开始的#if !defined(__SDCC_mcs51) && !defined(SDCC_mcs51)一直到#endif要删除

  4. 中断函数错误:类似void rtimer_isr(void) __interrupt(T1_VECTOR);
    改为#ifdef SDCC
    void rtimer_isr(void) __interrupt(T1_VECTOR);
    #else
    #pragma vector=T1_VECTOR
    __near_func __interrupt void rtimer_isr(void);
    #endif

  5. _xdata __at(0x0000) static unsigned long timer_value = 0;
    改为static unsigned long timer_value = 0;

  6. memory attributes not allowed on auto variables or parameters 这和存储位置有关系,加上static即可;(忘记了本次移植到底有没有这个错误了,反正第一次的时候有过)。

  7. putchar声明和stdio.h里面的重复了;putchar.c里面改个名字就行,并在debug.h里面声明;
  8. pa050警告太多,编译器设置中Diagnostics里面添加进来屏蔽掉
  9. 警告:pointless comparison of unsigned integer with zero;编译器的问题,使用带符号的变量就要用signed char ,不能光用char;
  10. Error[e46]: Undefined external “autostart_processes” referred in contiki-main
    在C编译器设置里面添加:AUTOSTART_ENABLE即可;

  11. 其他就是头文件没包含,需要添加一两个rime的头文件。

  12. 将putchar里面的putchar函数重命名后,把该函数里面的发送函数全部改为uart0_writeb,这样就能串口通信了。时钟,led,串口之类的不需要配置,人家都给你配置好了,可以看一下寄存器的实现。

最后

这样说好像没什么卵用,没时间好好写了。main函数照理说不要乱改,可是我光运行内核的话我把许多网络的东西去掉了,并且关了几个conf里面的配置。毕竟只是移植内核。但contiki最终是要用网络的,所以只能算成功了第一步,等毕设完了再好好写吧,今天开始好好看contiki。希望能成功。

猜你喜欢

转载自blog.csdn.net/zhou307/article/details/51308144