首页 理论教育 通用化模块:适用于多种类型的模块设计

通用化模块:适用于多种类型的模块设计

时间:2023-06-28 理论教育 版权反馈
【摘要】:比如下面QueueC的例子中,通用模块的形参类型queue_t像标准的C类型一样,可以用于声明数组(队列)的类型、接口函数返回值的类型等。例3.35:QueueC1.类型参数声明通用组件要检查类型。在通用模块ConstantSensorC中,在类型参数width_t后使用了属性@integer(),表明可以进行整数方面的操作。例3.36:实例化通用组件ConstantSensorC时,width_t必须作为整型类型使用,下面两条语句中,第一条是合法的,而第二条是不合法的。通过上述的通用模块QueueC例子,不难理解这一点。

通用化模块:适用于多种类型的模块设计

通用模块是可以使用诸如类型、常量等通用参数的模块。比如下面QueueC的例子中,通用模块的形参类型queue_t像标准的C类型一样,可以用于声明数组(队列)的类型、接口函数返回值的类型等。参数QUEUE_SIZE就像C常量一样,定义模块中的数组queue(队列)的大小。

例3.35:QueueC

1.类型参数

声明通用组件要检查类型。默认情况下,允许对类型参数的操作只有声明变量赋值

例:类型参数的操作。

下面两条语句是合法的。

如下的操作是不合法的。

然而,如果需要的话,可以在类型参数后添加后缀@integer()。属性@integer()允许对该类型参数进行整数操作。

例:在类型参数后添加后缀@integer()以允许整数操作。(www.xing528.com)

在通用模块ConstantSensorC中,在类型参数width_t后使用了属性@integer(),表明可以进行整数方面的操作。该类型参数用于指定通用接口Read的类型,进一步的,在通用模块的实现代码中,该类型参数在接口Read的通知事件Read.readDone(SUCCESS,(width_t)val)中,用该类型参数对读取的感知数据val进行了类型强制转换,即val可以被强制转换为整数类型。

例3.36

实例化通用组件ConstantSensorC时,width_t必须作为整型类型使用,下面两条语句中,第一条是合法的,而第二条是不合法的。

另外,也有属性@number()可以作为后缀,这表示类型参数是一个整型或浮点型。对该类型参数只可进行整型操作或浮点型操作。@number()和@integer()表示nesC语句的属性。

2.通用抽象数据类型

在TinyOS中,有些数据类型,比如队列、比特向量以及通信消息等都是较为通用的,也就是说,往往多个组件都要使用。这些组件对这些通用数据类型可能的需求也不尽一致,比如,对于队列来说,不同的组件可能需要使用不同类型、不同最大长度的队列。如何以一种较为方便的方式来使用这些通用数据类型呢?

通用模块是一种有效的方式,具体的做法是:使用模块变量来存放通用数据状态;使用接口中的命令来访问这些通用数据状态。通过上述的通用模块QueueC例子,不难理解这一点。在通用模块的变量queue中存放队列的状态,为了对队列进行访问,可以使用通用接口Queue<queue_t>,该接口中提供了一系列命令(访问操作),如取队列头元素head()、入队enqueue()、出队dequeue()等等。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈