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