在一些情形下,可能需要实现跨组件资源预约。例如,在TI的MSP430中,一个USART组件可作为一个I2C总线、UART或者SPI线路使用。非常明显,在该芯片上,I2C总线的预约暗含着对UART和SPI服务的限制。使用跨组件预约策略需要满足以下条件。
1)为使用共享资源的每一个服务生成一个唯一的ID。
2)将这些ID映射到底层资源的ID上。
这种映射对于使用服务的用户来说是透明的。只有在两个不同的用户使用同一个服务时,才进行仲裁。例如,在MSP430中,一个I2C总线用户可能与一个SPI连接的用户竞争资源,但是它们或许有相同的服务级用户ID。为了共享USART组件,这两个服务级用户ID映射为两个唯一的资源ID。完成该映射的正确方法是使用通用组件。下面给出的例子展示了在MSP430中SPI组件是如何执行该映射的。UART和I2C总线的做法类似。(www.xing528.com)
例6.1:
MSP430_SPIO_BUS字符串在Msp430Usart.h中定义。利用该字符串在每次一个新的Msp430Spi0C组件实例化时生成一个唯一的ID。这个ID作为Msp430Spi0P组件提供的参数化Resource接口的参数使用。Msp430Spi0P组件在提供一个参数化Resource接口(Msp430Spi0P.Resource)的同时,还使用一个参数化的Resource接口(Msp430Spi0P.UsartResource)。用户利用ID号CLIENT_ID调用组件提供的Resource接口时,相当于利用相同的ID实现了Msp430Spi0P.Resource接口的底层调用。通过ID 号CLIENT_ID连接Msp430Spi0P.UsartResource接口到一个实例化的Msp430Usart0C组件提供的Resource接口可完成映射。任何针对由实例化Msp430Spi0C组件提供的Resource接口的调用都将通过一个唯一的由底层Msp430Usart0C组件提供的Resource接口实现。
当服务需要明确知道当前它所提供服务的用户数量时,使用上述映射就显得十分重要,这些服务不受底层共享资源所拥有的用户总量的影响。举个例子,一个使用底层ADC资源的传感器实现可能希望在它自身没有用户时关闭电源,而不是等到整个ADC都空闲时才关闭电源。上述映射允许TEP115中描述的潜在的能量管理组件连接到两个等级的抽象上,它们相互之间不会产生干扰。采用这种方式,组件的执行存在许多相似之处,并且可进行代码重用。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。