TinyOS操作系统开发技术及实践课件第2章nesC语言基础.ppt

TinyOS操作系统开发技术及实践课件第2章nesC语言基础.ppt

第2章 nesC语言基础       2.1 nesC概述   nesC(Network Embedded System C)是专门为编写TinyOS以及进行TinyOS编写应用程序而发明的一种语言,用nesC而不是C语言编写TinyOS(TinyOS最初是由C和汇编编写的)主要基于以下两点:   nesC在语法上支持TinyOS需要的并发执行模型。   nesC编写的源码为编译器的优化提供了可能,最终可以缩小可执行代码尺寸。   因此,使用nesC生成的程序,更加适合无线传感网络节点。由于nesC的学习有点难度,建议从C和nesC的区别入手,辅之以示例,逐渐掌握其编程规则。   nesC的版本并没有遵循与TinyOS的版本标识一同发布,TinyOS目前的最新版本是2.1.2,而nesC语言的最新版是1.3。nesC的主要版本变化如表2-1所示。       2.2 nesC和C的比较   按照TinyOS官方说法,nesC来源于C,是C语言的一种变种,所有的C语言中的结构体、函数、甚至指针(建议少使用指针)、数据类型以及注释格式在nesC中依然是合法的,对于C程序员来说,nesC提出了三个“新概念”:   组件:一组可重用的代码和数据组合,类似于C++中的类。   接口:一组可为其他组件服务的函数和事件集合,是组件之间交互的界面。   并发执行模型:基于任务和中断的处理机制,定义了组件之间如何调用,以及中断代码和非中断代码如何交互执行规则。 nesC与C语言的区别主要有程序组成主体、模块之间的调用、命名空间、编程思想等几方面,下面将对这几个方面进行分析。 2.2.1 程序组成主体   C程序是由一系列的函数组成的,而nesC程序是由“组件”组成的。用C语言实现第1章中的LedOn示例如示例2-1所示。   【示例2-1】 main.c、LedOn.h、LedOn.c    /*C语言实现LedOn示例*/    //main.c文件    #include “LedOn.h”    int main()    {      LedOn();  while(1)  { ;  }    } //LedOn.h文件 #include iocc2530.h void LedOn(); //LedOn.c文件 #include LedOn.h void LedOn() { //将P1_0设置为输出 P1DIR |= 0x01; //点亮LED1 P1_0 = 0; }   上述C程序符合一般项目的编写规则,共分为3个文件:   main.c:main( )函数所在文件,包含程序的主逻辑代码。 LedOn.h:头文件,配合LedOn.c文件实现函数声明,即LedOn模块的接口声明文件。   LedOn.c:LedOn模块的实现文件,通过LedOn( )函数实现LED的点亮。   通过上述代码与第1章中的nesC程序示例相比较可以看出:   nesC程序组成:以文件为单位来组织程序,每个文件由一个“组件”组成,“组件”是nesC程序的基本“模块”,在组件中可以声明“使用(uses)”接口或“提供(provides)”接口,可以定义变量和函数。   C程序组成:以文件为单位来组织程序,文件由一系列函数组成,函数是C程序的基本“模块”。   nesC“接口”类似于C语言中的头文件,它声明了一系列的函数集合,为组件提供服务,即被组件使用或由某个组件向外提供其实现。 2.2.2 模块之间的调用   C程序与nesC程序的模块之间调用规则有以下不同:   nesC程序模块(即组件)之间的调用,需要显示指定(通过“配件”指定,如第1章示例中的“LedOnAppC”组件)其连接关系,其在编译之前就已经明确了,因此是“静态”调用关系。   C程序模块(即函数)之间的调用,根据代码逻辑可以“随意”调用,甚至可以通过“函数指针”动态改变调用关系。 2.2.3 命名空间   从语法上看,nesC“组件”本质上是由C语言的变量和函数组成的,nesC组件、函数和变量的作用域(命名空间)有以下特点:   在nesC中也可以定义全局变量,但建议尽量少使用全局变量。   nesC组件作用域是全局的。   nesC组件中的变量和函数对整个组件可见,组件外部不可以访问。 2.2.4 编程思想   相对于C语言来说,nesC的程序组成主体、模块调用等不同所带来的直接结果就是编程思想的不同,这也是nesC与C语言最本质的区别。   nesC编程思想就是事件驱动、组件式编程。基于此,程序设计时要注意以下两点:   通过使用“组件”来划分程序的业务功能。   要注意捕捉系统事件(如硬件中断),并且通过处理事件来完成整个程序的运行。   另外,在进

文档评论(0)

1亿VIP精品文档

相关文档