摘要: 本文详细记录了Contiki内核在IAR+MSP430下移植步骤,遇到的问题,分析解决,最后附上工程源码。
前言 分析了Contiki有一段时间了,但本人还没真正移植过。之前是我们项目组一哥们移植好了(IAR+ARM),我在调试Contiki文件系统Coffee遇到了难题,于是就想在MSP430平台上调试,理由是MSP430硬件比较简单。最近,CU网友kangerbiao45d已经把Contiki移到IAR+Telosb,给了我莫大鼓舞(感谢他)。我手头有MSP430-169LCD,于是下决心移植Contiki到IAR+MSP430-169LCD。终于跑通了,遂将过程详细记录,以供分享。
官方的Contiki源码是在Linux开发环境进行的,移植到IAR,首要解决的就是GCC与IAR之间的差异,包括: (1)GCC是用Makefile来管理工程编译,而IAR是IDE,通过工程文件目录来反映文件间的关系,所以必要时需要将路径加到preprocesses; (2)嵌入式汇编,GCC内嵌汇编与IAR内嵌汇编格式差异甚大,需要全面修改Contiki出现内嵌汇编的地方; (3)文件差异,Linux平台下的Contiki会调用Linux的头文件或者文件名不同(比如io.h与io430.h)。 再者需要解决版子间的差异,如果节点恰是Contiki支持的,那最好(比如Telosb),否则选择一个相近的节点进行修改,比如我的板子MSP430-169LCD,其MCU是MSP430F169,与Telosb的MSP430F1161属于同一序列。
一、下载源码及创建工程文件 1.1 下载源代码 Contiki最新版本是2.5,可以从SourceForge下载源码,猛击这里下载。 1.2 创建工程文件 移植的指导思想是先把内核跑起来,而后根据需求再把文件系统、动态加载、网络模块加上去。所以这里只需把Contiki内核相关的源文件加到工程目录,不过加多了也没关系,还有后续的调试嘛:-)取一个Contiki支持的节点来修改,这里选择Tosek(因其MCU是MSP430F1611),将platform/sky/下文件拷贝到新建文件夹platform/MSP430-169LCD。我的工程目录如下(期间删了若干文件): 图1 Contiki_msp430工程目录示意图 接下来,就一步步修改吧。值得一提的是,考虑到后续还要移植文件系统、动态加载、网络模块,本次遇到错误是尽可能的修改,实在不行,才从工程目录将该文件删除。所以,实际移植Contiki内核要比以下描述的要简单得多。
|