nesC编程中的参数化接口与高级特性解析
1. 传统命名空间管理方式的问题
在管理系统组件的命名空间时,传统的两种方式存在明显弊端。
-方式一:组件不连接定时器,由应用程序解决:这种方式给应用开发者带来巨大负担。例如,一个基于大量大型库构建的小型应用,可能需要连接八个不同的定时器。而且,这种方式导致系统组件缺乏独立性,存在依赖关系需要开发者解决。
-方式二:传递额外参数:乍一看比第一种方式好,但问题更严重。首先,很多情况下标识符在编译时已知,将其作为运行时参数传递不仅不必要,还可能引入错误。其次,这将标识符管理的责任推给调用者。例如,调用定时器时,调用组件只关心有自己的定时器,而不关心具体是哪个,将标识符作为调用的一部分会迫使模块了解并管理标识符名称。最后,对于来自其他组件的调用,问题更为突出。例如,定时器服务如何将fired()事件信号发送到正确的组件?由于标识符是运行时参数,唯一的方法是Timer.fired()向所有定时器广播,然后让它们检查标识符。
2. 参数化接口与配置
为了支持提供接口集的抽象,nesC引入了参数化接口。参数化接口本质上是一个接口数组,数组索引就是参数。
2.1 定时器示例:HilTimerMilliC
configuration HilTimerMilliC { provides interface Init; provides interface Timer <