实时操作系统 (RTOS) 利用这些相同的原理实现多任务处理——
但它们的目标与非实时系统有着巨大差异。不同的
目标反映在调度策略中。设计实时/嵌入式系统
是为了对现实世界事件作出及时响应。现实世界中发生的事件
存在截止时间,因此实时/嵌入式系统必须在此之前响应,
RTOS 调度策略必须确保遵守这些截止时间的要求。
为实现这一目标,软件工程师必须首先为每个任务分配优先级。然后,RTOS 的调度策略
简单地确保能够执行的最高优先级任务,是被给予处理时间的任务。如果同等优先级的任务准备同时运行,
这可能需要在它们之间“公平”分享处理时间。
示例:
最基本的例子就是包含键盘和 LCD 的实时系统。用户应在合理时间内收到
各按键的视觉反馈——如果用户在此期间无法看到按键已被接受,则该软件产品的使用感会很差。如果最长接受时间为 100 毫秒,则任何介于 0 和 100 毫秒之间的响应都是可接受的。此功能可作为一个具有以下结构体的自主任务来实现:
void vKeyHandlerTask( void *pvParameters )
{
// Key handling is a continuous process and as such the task
// is implemented using an infinite loop (as most real time
// tasks are).
for( ;; )
{
[Suspend waiting for a key press]
[Process the key press]
}
}
现在假设实时系统也在执行依赖数字过滤输入的控制功能。必须对输入进行采样、过滤并每 2 毫秒执行一次控制周期。为使过滤器正确运行,采样时间规则必须精确到 0.5 毫秒。此功能可作为一个具有以下结构体的自主任务来实现: void vControlTask( void *pvParameters )
{
for( ;; )
{
[Suspend waiting for 2ms since the start of the previous
cycle]
[Sample the input]
[Filter the sampled input]
[Perform control algorithm]
[Output result]
}
}
软件工程师必须将控制任务的最高优先级分配为:
- 控制任务的截止时间比按键处理任务的截止日期更严格。
- 错过截止时间对控制任务的影响要大于对按键处理程序任务的影响。
下一页演示了实时操作系统如何调度这些任务。
下一页: RTOS 基本原理——实时调度
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|