首页 理论教育 使用Default函数的注意事项

使用Default函数的注意事项

时间:2023-06-28 理论教育 版权反馈
【摘要】:例3.29:CC2420ActiveMessageP具有如下的default处理程序值得说明的是,使用default函数也可能会带来Bug。因为对于default函数,编译程序不检查组件接口的连接情况。default函数应该仅用于这样的场合:对于正常执行的组件来说,某接口是多余的。这几种情况几乎总是与参数化接口相关,因为接口的所有参数值被使用的概率都非常小,通常会有一些参数值的接口没有被使用,对于这样的接口,需要default函数来处理。

使用Default函数的注意事项

配件的作用是将组件连接起来,因此确定了模块之间的调用点。如果在配件中由于疏忽少写了某个连接语句,那么就会带来编译错误。这相当于在C中忘记包含一个库。另外,如果在程序中存在一个悬着的连接,那它将成为一个Bug。例如,组件ActiveMessageC的Receive接口。大多数应用中只包括少数几个AM类型,一般来说最多15个,也就是说,在该程序下,不是对每个协议标识号都有相应的网络协议的,例如,没有相应的上层应用发送AM类型字段值为144的分组。但是,这个分组有可能是一个具有合法AM值的分组发生错误而形成的,而巧合的是这种错误也通过了分组的校验。对于这样的分组没有对应的处理程序。

为了避免上述问题,nesC提供了default处理程序(函数)。当某个接口函数没有相应的实现时,就使用这个函数。如果某个组件连接到该接口,就使用该组件的实现;否则就会调用default处理程序。

例3.29:CC2420ActiveMessageP具有如下的default处理程序(www.xing528.com)

值得说明的是,使用default函数也可能会带来Bug。因为对于default函数,编译程序不检查组件接口的连接情况。比如,组件CC2420ActiveMessageP中有默认函数Send.send Done,在TestAMC中不应有Send.send的默认处理程序,否则,如果忘记连接TestAMC.Send,整个应用编译是无错的,但运行时并不发送分组。

default函数应该仅用于这样的场合:对于正常执行的组件来说,某接口是多余的。这几种情况几乎总是与参数化接口相关,因为接口的所有参数值被使用的概率都非常小,通常会有一些参数值的接口没有被使用,对于这样的接口,需要default函数来处理。

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

我要反馈