首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

【转】TinyOS移植技术分析及在CC2430平台的应用 02

【转】TinyOS移植技术分析及在CC2430平台的应用 02

1.3 TinyOS的运行机制
        
在TinyOS的总体框架中,物理层硬件层为框架的最底层,在该层中,传感器、射频收发器以及时钟等硬件均能触发事件(event)发生,交由上层组件处理;软件层中相对下层的组件也能出发事件并交由上层处理,而上层会发出命令(command)交下层处理。为协调各组件间任务的有序处理,需要操作系统采取一定的调度模式。
        TinyOS采用的是事件驱动的两级调度:任务(task)和硬件事件处理句柄(Hardware Event Handlers)。TinyOS使用两种机制支持任务,task和post。task声明必须为无参数的函数声明,执行中的任务都具有原子操作性,任务完成前彼此之间不能被抢占。硬件事件处理句柄被执行去响应硬件中断,可以抢占任务的运行和其他硬件事件处理句柄。TinyOS的任务调度队列只采用最简单的FIFO算法,内核使用一个循环队列来管理任务列表,默认任务列表大小为8。这个任务队列实际上是一个函数指针的数组,提交一个任务即是向队列里插入一个函数指针。任务提交(post)到FIFO队列中等待,当任务队列头索引号等于尾索引号时,表明任务队列为空,系统进入休眠状态并等待,直到新的事件发生。如果新事件向队列中提交了任务,则处理器返回执行状态,TinyOS规定当且仅当任务已经推入队列且没有被执行时post表达式才返回fail,否则将继续休眠。当被事件触发后,TinyOS将中发出信号的事件关联的所有任务将被迅速处理,当这个时间和所有任务被处理完成后,未被使用的CPU将再次被置于睡眠状态而不是积极寻找下一个活跃事件,从而大幅降低了功耗。
   
    2 TinyOS的编译过程分析
   
    TinyOS的编译系统采用GNU Make,首先将TinyOS应用程序预编译,形成一个“*.C”文件,然后将这个文件传递给与硬件平台相对应的编译器。TinyOS的编译系统放于support/make文件夹中,包含各个平台的配置文件“*.target”和在这个平台上建立应用程序的“*.rul es”文件。所以TinyOS的编译系统可以分为两个部分:使用nesC编译的公用部分和针对具体平台的部分。目前TinyOS支持AVR的Mica系列节点,还有基于MSP430芯片的Telos系列及基于PXA27芯片的Imote,而对于CC2430目前还在开发中。假设目标平台是MICA,其编译过程如图2所示。

   
        具体进行编译操作时,编译文件根据“TOSMAKE_PATH”变量中所列的路径搜索“*.target”文件。“*.target”文件通常设置一些平台相关变量和提供编译平台的名称,并通过调用“TOSMake_include_platform”指向具体的“*.rules”文件。“*.rules”文件由平台所配备的微处理器决定,因此通常几个平台共用一个“*.rules”文件。如果以命令行的形式给定一个虚拟平台,编译系统会自动寻找“*.ex tra”文件。
   
    3 TinyOS操作系统在CC2430上的移植
    3.1 CC2430的特点
        
CC2430单片机是TI公司生产的一款专用于IEEE 802.15.4和ZigBee协议通信的片上系统解决方案。它延用了以往CC2420芯片的架构,在单个芯片上整合了ZigBee射频前端、内存和微控制器。它使用1个8位MCU(8051),具有128 kB可编程闪存和8 kB的RAM,还包含模拟数字转换器(ADC)、几个定时器(Timer)、AES128协同处理器、看门狗定时器(Watchdog Timer)、32 kHz晶振的休眠模式定时器、通电复位电路(Pow er on Reset)、掉电检测电路(Brownout Detection),以及21个可编程I/O引脚。CC2430芯片采0.18 μmCMOS工艺生产;在接收和发射模式下,电流损耗分别低于27 mA或25 mA。CC2430非常适合那些要求能耗非常低的应用,因为它具有休眠模式以及转换到主动模式的超短时间的特性。而无线传感器网络研究的一个核心问题就是节能,因为传感器节点经常需要布置在环境恶劣的无人区,所以能耗问题就成为一个关键问题。由于CC2430的低能耗特性,使其经常作为传感器节点的硬件平台。
    3.2 移植过程分析
   
    TinyOS核心代码经nesC预编译后形成的C文件可以被GCC理解编译。而GCC适用的平台包括telos系列,mica系列和intelmote2系列。但是一些平台如Motorola HCS08,Intel MCS51则不适用于GCC编译。所以将TinyOS移植到CC2430上的关键问题是,如何使GCC支持MCS-51系列的交叉编译及支持CC2430硬件组件的编写。
        在Windows和Linux两大主要平台上有许多8051编译器,其中使用最广泛并且经常进行更新的有2种:KEIL和Small Device C Complier(SDCC)。由于SDCC是一个新兴的开源项目,因此在移植过程中经常会出现许多问题,使一些模块无法正常工作。而且在调试中,SDCC只是简单地驻留在0地址,当单步执行代码时也没有任何调试信息。相比于SDCC,KEIL提供了一套良好的开发调试环境,因此,最终选用KEIL开发工具进行TinyOS的移植工作。
        具体流程如下:
        (1)根据TinyOS上层组件接口的要求,用nesC语言编写硬件表达层和硬件抽象层文件。
        (2)使用TinyOS的NCC编译器将编写的应用程序编译成app.preMangle.c文件。
        (3)将app.preMangle.c文件通过perl语言编写的脚本将其原语法转换为CC2430开发环境Keil支持的语法,生成app.c。
        (4)利用KEIL开发工具将app.c编译、连接,生成app.hex,再通过SmartRF04 Flash Programmer下载到目标板。
返回列表