nesC编程:组件、接口、配置与布线详解
1. 组件与接口
在编程中,除了简单类型,还有使用nx_struct和nx_union声明的与平台无关的结构体和联合体。平台无关结构体或联合体的每个字段都必须是平台无关类型。非位字段按字节边界对齐,位字段则按位边界打包。
例如,TinyOS 2.0 声明 CC2420 头文件的方式如下:
typedef nx_struct cc2420_header_t { nxle_uint8_t length; nxle_uint16_t fcf; nxle_uint8_t dsn; nxle_uint16_t destpan; nxle_uint16_t dest; nxle_uint16_t src; nxle_uint8_t type; } cc2420_header_t;任何编译此结构的硬件架构都会对所有字段使用相同的内存布局和字节序,这使得平台代码可以打包和解包结构体,而无需借助宏或实用函数(如 UNIX 套接字的htonl和ntohs)。
编程提示 7:定义消息结构时,使用与平台无关的类型。
在底层,nesC 将网络类型转换为字节数组,并在每次访问时进行打包和解包操作。对于大多数 nesC 代码而言,这种运行时成本可以忽略不计。例如: