TinyOS 中的电源锁与硬件抽象架构解析
1. 电源锁概述
在编程视角下,无线电栈的接收部分需完成一系列步骤:
1. 从无线电读取数据包。
2. 检查数据包,判断是否发送确认信息。
3. 将无线电切换到传输模式。
4. 发送确认信息。
5. 将无线电恢复到接收模式。
这些步骤通常是独立的分阶段操作。以 CC2420 无线电为例,每个操作都需要通过 SPI 总线发送读写数据的命令。但 SPI 总线被多个芯片和子系统共享,比如闪存存储驱动可能在节点接收数据包时也想使用该总线。因此,无线电栈需要一种方式来请求对总线的独占访问,完成操作后再释放总线供其他设备使用。
2. 分阶段锁
TinyOS 通过分阶段锁支持对资源的独占访问。传统的锁(如互斥锁和信号量)是阻塞结构,用于保护关键部分或共享数据结构。但 TinyOS 没有阻塞调用,所以其锁必须是分阶段的。组件通过调用命令请求电源锁,获取锁时会收到一个事件通知。锁接口名为Resource,其定义如下:
interface Resource { async command error_t request (); async command error_t immediateRequest (); event void granted (); async command void release (); async command