嵌入式编程设计模式——轮询模式

除了通过中断的方式获取传感器的数据或信号,另一种常用的方式就是定期检查,称为轮询。当数据或信号不是非常紧急到不能等待到下一个轮询时段来收取,或当数据或信号可用但硬件没有能力生成中断时,轮询非常有用。
轮询模式是从搞硬件上检查新数据和信号的最简单方法。轮询能定期或者不定期进行;定期轮询可以采用定时器来表示合适应该对硬件采样,而机会轮询适当系统空闲的时候进行轮询,如在主系统功能或在重复执行的周期之间进行轮询。
一般,当数据或时间不是高度紧急且数据采样的时间足够短能够是由轮询模式。
轮询模式有两个版本,一种是通过机会轮询,另一种是通过定时器轮询。不同的是机会轮询在应用函数合适的时间调用轮询函数poll(),而定时器轮询则是创建计时器,在定时器内进行轮询。它们主要有以下几个角色:
应用程序:
该元素主要用于机会轮询,应用程序循环执行,在合适的时间调用轮询函数poll()
设备:
设备通过可访问的函数提供数据或设备的状态信息,这个元素可能是传感器等设备的驱动器或能够从内存或端口中读取数据。poll()函数将逐个扫描所有设备,以刷新数据并通知相关的客户。
机会轮询器
用于机会轮询,该元素有poll()函数,用于扫描连结的设备以获取数据和设备状态,并把这些信息通知给客户
周期轮询器
与机会轮询器类似,只不过用于定时器轮询。它也有自己的poll函数,不过在定时器中断内调用。另外,它还包含一个可以设置的轮询时间,以及开始和终止轮询的服务。通过开始轮询打开定时器、终止轮询关闭定时器的方式实现
轮询数据客户
该元素是一个或多个设备数据和状态信息的客户,他们负责接收设备的信息和状态,并做相应的处理。
轮询定时器
该元素表示一个定时器和与使用该定时器相关的服务。其中,在定时器的中断处理函数中调用poll()函数

另外,硬件检查可通过硬件代理模式的数据采集服务或硬件适配器实现。此外,观察者模式也可以很好的并入。

你可能感兴趣的:(嵌入式设计模式)