1. e-works数字化企业网
  2. 书屋
  3. 书籍列表
  4. TinyOS实用编程——面向无线传感网节点软件开发
  5. 模块

第三章 TinyOS编程语言nesC

第四节 模块


    例3.14:

    typedef enum {

      STATE_OFF = 0,

      STATE_STARTING = 1,

      STATE_ON = 2,

      STATE_STOPPING = 3

    } state_t;

    程序中需要定义变量state,该变量的有效值范围是0~3。我们可以采用下述两种不同的方式来定义变量state。

    方式一:

    state_t state; // platform int size (e.g., 2-4 bytes)

    方式二:

    uint8_t state; // one byte

    在第一种方式下,将变量state定义为枚举类型。由于该类型变量的存储单位是本地整数宽度,在微控制器上可能是2~4个字节(依据不同微控制器而不同)。在第二个方式下,由于使用类型unit8_t,因此只分配单个字节。所以当变量所需长度比较短时,应该避免使用枚举类型声明变量。

    另外,模块中的数据是局部的,模块之间通过接口函数实现数据(状态)的交互。除了这些局部数据之外,nesC程序中还需要一些全局可用的数据结构、数据类型及函数,比如message_t、error_t以及ecombine(…)。为了说明方便,这些统称为全局名字。与C一致,nesC中的这些全局名字通常在头文件中定义。例如,TinyOS的error_t类型和错误常量在\opt\tinyos-2.x\tos\types\TinyError.h中定义。如例3.15。

    例3.15:

    …

    enum {

      SUCCESS = 0,

      FAIL = 1, // Generic condition: backwards compatible

      ESIZE = 2, // Parameter passed in was too big.

      ECANCEL = 3, // Operation cancelled by a call.

      EOFF = 4, // Subsystem is not active

      EBUSY = 5, // The underlying system is busy; retry later

      EINVAL = 6, // An invalid parameter was passed

      ERETRY = 7, // A rare and transient failure: can retry

      ERESERVE = 8, // Reservation required before usage

      EALREADY = 9, // The device state you are requesting is already set

    };

    typedef uint8_t error_t;

    需要使用相应的全局名字时,只需要在模块、接口或配件等源文件中的适当位置(通常是关键字modoule、interface和configuration之前)使用文件包含(#include)来声明即可。另外,在nesC中还可以使用文件包含,使得在模块等内部使用的是标准C库或者是用户私有C代码库。

系列微信

数字化企业网
PLM之神
e-works制信科技
MES百科
工业自动化洞察
智能制造IM
AI智造圈
智能工厂前线
工业机器人洞察
智造人才圈
工业软件应用
智能制造网博会
ERP之家
供应链指南针
© 2002-2025  武汉制信科技有限公司  版权所有  ICP经营许可证:鄂B2-20030029-1(于2003年首获许可证:鄂B2-20030029)
鄂公网安备:420100003343号 法律声明及隐私权政策     投诉举报电话:027-87592219

关于我们    |    联系我们    |    隐私条款

ICP经营许可证:鄂B2-20080078
(于2003年首获许可证:鄂B2-20030029)
鄂公网安备:420100003343号
© 2002-2025  武汉制信科技有限公司  版权所有
投诉举报电话:027-87592219

扫码查看