没有合适的资源?快使用搜索试试~ 我知道了~
1. 基本原理和 RTOS 概念 1. AVR 架构简单 2. 有免费可用的开发工具 WinAVR (GCC) development tools. 3. 非常
资源详情
资源评论
资源推荐
从基本原理到实现
本文描述 FreeRTOS(飞拓)是如何实现的。
如果你
1. 希望修改 FreeRTOS 源代码
2. 移植实时内核到另一个微控制器或者原型板(prototyping board)
3. 第一次接触 FreeRTOS,希望得到关于它们在操作和实现上的更多信息
这些文档会有用。
本文档分为两个章节:
1. 基本原理和 RTOS 概念
包括多任务的背景信息和基本实时概念,这是为初学者准备的(is intended for beginners)
2. 从底向上(from the bottom up)解释实时内核源代码
FreeRTOS 实时内核已经移植到许多不同的微控制器架构下。这份文档是以 Atmel AVR 为范例,因
为:
1. AVR 架构简单
2. 有免费可用的开发工具 WinAVR (GCC) development tools.
3. 非常便宜的原型板 STK500 prototyping board
在本文的最后,还一步一步地详细描述了一个完整的上下文切换(context switch)。
RTOS
基本原理
多任务
调度
上下文切换
实时应用
实时调度
这一节提供一个关于实时和多任务概念的简介。读下一节之前必须理解这些概念。
多任务(Multitasking)
在一个操作系统内部,内核[kernel]是最核心的部件。像 Linux 那样的操作系统使用的内核,从表
面上看(seemingly),允许用户并发(simultaneously)访问 计算机。多个用户似乎(apparently)
可以并行(concurrently)执行多个程序。
在操作系统的控制下,每个正在执行的程序就是一个任务[task]。如果一个操作系统能够以这种方法
执行多个任务,这就叫做多任务[multitasking].
多任务操作系统的使用可以简化应用程序的设计:
1.操作系统的多任务和任务间通信的机制允许复杂的应用程序被分成一系列更小的和更多的可以管
理的任务。
2.(程序的)划分(partitioning)让软件测试更容易, 团队工作分解(work breakdown within tea
ms),也有利于代码复用。
3. 复杂的定时和先后顺序的细节 可以从应用程序代码中 删除。(因为)这成为操作系统的职责。
多任务
Vs
并发
传统的(conventional)的处理器同时只能执行一个任务。但通过快速的任务切换,一个多任务操作
系统可以使它看起来(appear)好像每个任务并行执行一样。这可以下面的示意图来描述(depicted)。
它显示了有关(with respect to)时间的 3 个任务的执行模式。任务名用颜色标注出来,写在左手边。
时间从左到右增加,相应的颜色的线条 显示该任务在某个特殊时间正在执行。上面的图 演示的是用
户所觉察到的并行执行模式,下面的图是实际的多任务执行模式。
----所有可用的任务都好像在执行,但实际上在任何一个时刻都只有一个任务在执行
调度
调度器(scheduler)是内核中负责 决定在某个特殊时间 哪个任务应该执行的部分。内核可以在任
务的生命期(lifetime) 挂起(suspend) / 恢复(resume)一个任务许多次。
调度策略(scheduling policy)是调度器用来决定哪个任务在哪个时间点执行的算法。一个(非实
时)多用户系统的策略很可能分配(allow)给每个任务一个"公平"(fair)的处理器时间片(proportion
of processor time)。用在实时系统/嵌入式系统的策略稍后再描述。
除了被 RTOS 内核无意的挂起外,一个任务还可以自己挂起自己。如果一个任务想延迟一段固定的
时间(也就是 sleep),或者等待(也就是 block)某个资源可用(比如一个串口),或者等待一个事件出
现(比如一个键按下)。一个阻塞或者睡眠的任务是不能执行的,不会为它分配任何处理时间。
上图中提到的编号:
1) Task1 正在运行
2) 内核挂起 Task1
3) 恢复任务 Task2
4) Task2 正在执行,为独占访问(exclusive access),它锁定一个处理器外设
5) 内核 挂起 Task2
6) 恢复 Task3
7) Task3 试图访问同样的处理器外设,发现它被锁定,Task3 不能继续,所以自己挂起自己。
8) 内核恢复 Task1
………….
9) 接下来(the next time),Task2 在 9 处执行。它完成了对处理器外设的访问,所以解锁它
10) 再下来,Task3 在 10 处执行。它发现 现在可以访问处理器外设了,于是开始执行,直到被内
核挂起。
上下文切换
跟任何其他程序一样,一个任务执行时,它使用 处理器/微控制器 的寄存器,访问 RAM ROM。这
些资源(处理器的寄存器,stack 等)一起组成任务的执行上下文(the task execution context).
一个任务是一个连续有序的代码片断。它并不知道它将何时被内核挂起或者恢复,甚至不知道这些事
情(挂起或者恢复)在什么时候已经发生了。下面考查(Consider)的这个例子是用来求两个处理器
中的寄存器值之和,该任务在执行 1 条指令后就立即被挂起。
-->任务将要执行 ADD 指令时,被挂起
-->先前的指令已经把数取到寄存器(Reg1,Reg2)中了,而这些寄存器(Reg1,Reg2)将要被 ADD 指
令用到。当这个任务被恢复后,ADD 就是要执行的第 1 条指令。这个任务不知道是否有另一个的任
务会在中间时期 修改 Reg1 或者 Reg2)
当这个任务挂起时,其他任务继续执行,可能会修改处理器寄存器的值。在恢复之后,这个任务也不
知道处理器的寄存器被修改过(altered).如果它使用这个修改过的值,就会导致计算的和的结果不正
确。
剩余26页未读,继续阅读
高工-老罗
- 粉丝: 20
- 资源: 314
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0