1. 无系统时钟模式
无系统时钟模式,一般用于低功耗设备, 系统进入空闲任务时,可以让CPU进入低功耗模式,通过外部事件唤醒CPU。无系统时钟模式,不能使用延时服务、阻塞超时服务、定时服务以及时间片调度服务。
1.1 无系统时钟模式下,系统工作在无时间服务的状态
1)任务通过挂起内核对象来等待来自 ISR 的信号 2)由于系统任务处于挂起状态,内核切换到空闲任务,直到发生调度事件。还可以通过OSIdleTaskHook() 回调进入低功耗模式。 3)当外设中断最终发生时,系统离开低功耗状态,进入中断服务 4)在服务中断之后,ISR 通过发布内核对象让任务进入就绪状态 5)当调用 OSIntExit() 时,将会进行系统调度,执行就绪任务
1.2 无系统时钟模式下,通过硬件定时器提供简单的时间服务
1) 任务希望延迟 1 分钟,在挂起内核对象之前,将硬件定时器配置为一分钟后触发中断,并启动定时器。 2) 主动挂起任务 3) 切换到空闲任务,可能进入低功耗状态。 4) 一分钟后,定时器发生中断,退出低功耗模式,通过发布内核对象唤醒任务。
2. 周期性系统时钟模式
1)周期性系统时钟模式,通过周期性的时钟中断,来提供延时服务、超时服务、定时服务。
2)周期性系统时钟(1-100ms), 频率越高CPU消耗越高,需根据任务的实时性要求调整系时钟周期
3)可以在OSTimeTickHook()内实现不受系统抖动影响的高精度定时任务,如数据采集等。
3. 动态系统时钟模式
动态系统时钟模式,通过设置硬件定时器,提供延时服务、超时服务,但不支持时间片轮调度。系统不会定时产生周期性的时钟中断; 当有任务需要延时服务或定时服务时,通过调用接口OS_DynTickSet设置并启动硬件定时器,硬件定时器超时进入ISR并调用 OSTimeDynTick()更新系统时钟。OS_DynTickSet、OS_DynTickGet需要BSP实现。