首页 理论教育 通用组件的重要性

通用组件的重要性

时间:2023-06-28 理论教育 版权反馈
【摘要】:nesC 1.0和1.1中没有支持通用组件。如果它是单一组件,每个比特向量都是一个具有不同名字的组件,也就是说,需要多次定义、多次实现。如果比特向量是通用组件,就可以对它进行一次定义、多次使用。这不仅简化了实例化工作,还可以为通用组件提供类型等参数。综上,为了提供简单、易于理解和高效运行的组件,nesC在通用组件实例化时使用代码复制的机制。

通用组件的重要性

默认情况下,组件是单一的,即在全局范围内只有一个,任意配件都可以直接使用。某单一组件(如LedsC)在不同的配件中声明,但对应的都是LedsC。具体的,如果两个配件都连接了LedsC,他们连接的是相同的代码,访问的是相同的变量

nesC 1.0和1.1中没有支持通用组件。任何时候组件都需要一个通用的数据结构,编程者必须复制数据结构组件,给它一个新的名字;或者是分割所需通用数据结构的功能,并通过本地分配数据结构和使用库程序来分配功能。

除了单一组件,nesC 1.2还支持通用组件。通用组件可以多次实例化。例如,硬件的底层软抽象是一个单一组件,即只有硬件寄存器的一个备份。但是软件数据结构是可以实例化的。实例化使得组件代码可以重用。以组件BitvectorC为例,BitvectorC组件提供了比特向量的抽象,在多个组件中都需要使用比特这个抽象。如果它是单一组件,每个比特向量都是一个具有不同名字的组件,也就是说,需要多次定义、多次实现。如果比特向量是通用组件,就可以对它进行一次定义、多次使用。

为了实现通用组件的重用,通用组件实例化使用代码复制的机制。代码复制可以带来2个好处:简单和匹配类型。如果通用模块没有使用代码复制的方法,则会有一个单独的代码复制,这个单独的代码复制作用于所有组件实例。nesC仅仅创建代码的副本。所有的副本都是从一个单一的源文件得来,所以它们是一致的,不会出现多个源文件所导致的维护问题。但复制代码的方法降低了减小代码大小的可能性。

为了实现代码重用,通用组件实例化使用代码复制的机制。这不仅简化了实例化工作,还可以为通用组件提供类型等参数。(www.xing528.com)

首先,如果通用组件没有使用代码复制的方法,那么在组件的所有实例中都会对应一个单一代码复制。如果通用组件采用了类型参数,如分配大小、偏移量等,将会使得每个实例的单一代码复制方法变得更加复杂。即便通用组件采用非类型参数时也会导致这样的问题,这是因为非类型参数可能会用来指定数组大小,转换case values等。

其次,如果采用通用组件的各个实例可共享代码的方式,就需要给各实例的函数添加一个类似于指针作用的参数,指明在执行哪个实例,但相应的各实例中的变量访问均需避开这个参数,因此,执行时间和函数成本会有大的改变。

综上,为了提供简单、易于理解和高效运行的组件,nesC在通用组件实例化时使用代码复制的机制。

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

我要反馈