找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 20687|回复: 38
打印 上一主题 下一主题
收起左侧

uCOS-III实时操作系统中文说明文档(共316页pdf翻译版下载)

  [复制链接]
跳转到指定楼层
楼主

译者序
很高兴终于完成了 uC/OS-III 嵌入式系统的翻译,翻译从 2011 年10 月 15 日开始到 2011 年 11 月 3 日为止 , 共 20 天时间 , 平均每天 5个小时。本想将 uC/OS-III 函数的 API 部分也翻译的,但毕竟考研更甚于爱好,我得为 2013 年 1 月的考研做准备呀 ~~ 。
在此,我要感谢:
1 、 我的导师:乐教授。是您经常带我去公司拓展视野,并让我坚定不移地往嵌入式方面发展。
2 、 我的师傅:张博士。是您无偿提供给我一些开发板,作为回报,帮您的店铺宣传一下as-robot
3 、 还有我的亲朋好友们。
特别是今天上午,用了 3 小时终于在 MDK4.0 编译器上 将uC/OS-III 移植到 stm32f103rb 处理器上,并成功运行。移植的步骤 ,我也会发布到网上的,谢谢大家。


序言
什么是 uC/OS-III?

uC/OS-III(Micro C OS Three 微型的 C 语言编写的操作系统第 3版 ) 是一个可升级的,可固化的,基于优先级的实时内核。它对任务的个数无限制。 uC/OS-III 是一个第 3 代的系统内核,支持现代的实时内核所期待的大部分功能 。 例如资源管理 , 同步 , 任务间的通信等等。然而, uC/OS-III 提供的特色功能在其它的实时内核中是找不到的 , 比如说完备的运行时间测量性能 , 直接地发送信号或者消息到任务,任务可以同时等待多个内核对象等。为什么命名一个新的版本?
uC/OS 系列,第一代产生于 1992 。经过了多年的使用和上千人的反馈,已经产生了很多的进化版本。
uC/OS-III 是这些反馈和经验的总结。在 uC/OS-II 中很少使用的功能已经被删除或者被更新 , 添加了更高效的功能和服务 。 其中最有用的功能应该是时间片轮转法( round robin), 这个是 uC/OS-II 中不支持的,但是现在已经是 uC/OS-III 的一个功能了。uC/OS-III 会提供新的功能以更好地适应新出现的处理器。特别的, uC/OS-III 被设计用于 32 位处理器,但是它也能在 16 位或 8 位处理器中很好地工作。

uC/OS-III 的目标
uC/OS-III 最主要的目标是提供一流的实时内核以适应更新很快的嵌入式产品。使用像 uC/OS-III 那样具有雄厚的基础和稳定的框架的商业实时内核,能够帮助设计师们处理日益复杂的嵌入式设计。这本书中的目标 , 是为了介绍 uC/OS-III 的内部工作 。 了解这些会帮助读者实现逻辑上的设计方案 , 协调统一硬件和软件会让你对整体的设计很有把握。

1  、简介
在重要的地方,实时系统凭借其系统性的计算和及时的处理能力工作着。一共有 2 种类型的实时系统:软实时系统和硬实时系统。软实时系统和硬实时系统的区别在于一旦没有在规定的时间内完成任务所导致后果的严重性 。 超过时限后所得到的结果即使正确也可能是毫无作用的。
硬实时系统中,运算超时是不允许发生的。在很多情况下,超时会导致巨大的灾难,会威胁人们的生命安全。但是在软实时系统中 ,超时不会导致严重后果。
实时系统的应用范围很广,但很多实时系统是嵌入式的。一个嵌入式系统是计算机中添加操作系统,但是用户不公认这是个计算机 。以下列出嵌入式系统的一些例子

实时系统的设计,调试和配置比非实时系统难得多。
1-1 前后台系统 前后台系统 前后台系统 前后台系统简单的小型系统设计一般是基于前后台的或者无限循环的系统。包含一个无限循环的模块实现需要的操作(后台 ) 。中断处理程序实现异步事件(前台 ) 。前台也叫做中断级,后台也叫作任务级。临界操作应该在任务级中被执行,不可避免地必须在中断处理程序中执行也要确保是在很短的时间内完成 。 因为这会导致 ISR 占用更长的时间 。 通常的 , ISR 中使能相关的信息而在后台程序中执行相应的操作 。 这叫做任务级响应 。 任务级响应的时间依赖于后台循环一次所需的时间 , 通常这不是一个固定常量 。 另外 , 如果其中的代码稍有改动,那么循环一次所用的时间也将有所变化。

大多数高产量低成本微控制器的应用软件 ( 例如微波炉 , 电话玩具等)都是基于前后台系统的。

1-2 实时内核
实时内核是一个能管理 MPU 、 MCU 、 DSP 时间和资源的软件。
实时内核的应用包括迅速地响应,可靠地完成工作的各个部分。
任务(也叫做线程)是一段简单的程序,运行时完全地占用 CPU 。在单 CPU 中,任何时候只有 1 个任务被执行。
内核的责任是管理任务 , 也做多任务处理 。 多任务处理的作用是协调和切换多个任务依次享用 CPU 。多任务处理最大化 CPU 的功能同时会让我们感觉是多个 CPU 在同时运行。多任务处理也有利于处理模块化的应用 。 多任务处理一个最重要的方面在于它允许程序员管
理复杂的实时应用 。 在多任务处理中程序员可以简单的维护和升级产品。
uC/OS-III 是一个抢占式内核 , 这意味着 uC/OS-III 总是执行最重要的就绪任务,如图 1-2 。

F1-2 ( 1 ) 一个低优先级的任务正在被执行
F1-2 ( 2 )发生一个中断, CPU 转向 ISR
F1-2 ( 3 ) ISR 响应中断请求设备 , 但是 ISR 只做非常少的工作 。 ISR应该标记或发送消息到一个高优先级的任务 , 让中断能够快速处理完毕 。 例如 , 如果一个中断来自于以太网控制器 , ISR 标记任务 , 在任务级响应以太网控制器。
F1-2 ( 4 ) 当 ISR 执行完毕 , uC/OS-III 注意到 ISR 创建的一个更高优先级的任务就绪。 uC/OS-III 将不会返回到中断前的任务,它会切换到这个更高优先级的任务。
F1-2 ( 5 )高优先级任务执行必要的处理答复中断请求设备。
F1-2 ( 6 )当高优先级任务完成时,返回原任务中断前的代码。
F1-2 ( 7 )原任务在它被中断的地方开始执行。
uC/OS-III 内核也负责管理任务间的交流,系统的资源(内存 和I/O ) 。
系统中加入内核需要额外的支出,因为内核提供服务时需要时间去处理 。 大多数的额外支出取决于服务的调用频繁度 。 在一个优秀的设计中,内核占用 CPU 的时间介于 2% 到 4% 之间。因为 uC/OS-II I是一个软件,添加到目标系统中需要额外的 ROM 和 RAM 。低档的单片机很有可能不支持像 uC/OS-III 那样的实时内核 , 因为它只有很少的 RAM 可供访问。 uC/OS-III 内核需要 1K 到 4K 之间 的RAM , 加上每个任务自己所需的堆栈空间 。 至少有 4K 大小 RAM 的处理器才有可能成功移植 uC/OS-III 。
最后,为了更好地使用 CPU , uC/OS-III 提供了大约 70 种常用的服务。当用过像 uC/OS-III 那样的具有实时内核的系统后,你将不会再去使用前后台系统了。

1-3 实时系统 RTOS
一个实时系统通常包括一个实时内核以及其他高级的服务 , 例如 :文件管理 , 堆栈协议 , 图形用户接口等等 。 大多数服务都是跟 I/O 有关的。Micrium 提供了 RTOS 一套完整的组件 , 包括 uC/FS 、 uC/TCP-IP 、uC/GUI 、 uC/USB 等 。 这些组件大部分都可以单独执除了 uC/TCP-IP 。实时内核在应用中不是必须的 。 事实上 , 用户可以单独选择您的应用所需用的组件。详情和购买请联系 Micrium 。
1-4  uC/OS-III
uC/OS-III 是一个可扩展的 , 可固化的 , 抢占式的实时内核 , 它管理的任务个数不受限制 。 它是第三代内核 , 提供了现代实时内核所期望的所有功能包括资源管理、同步、内部任务交流等。 uC/OS-III 也提供了很多特性是在其他实时内核中所没有的 。 比如能在运行时测量运行性能 , 直接得发送信号或消息给任务 , 任务能同时等待多个信号量和消息队列。
以下列出 uC/OS-III 的特点:
源代码 : uC/OS-III 完全根据 ANSI-C 标准写的。代码的规范 是Micrium 团队的一种文化 。 虽然很多商业内核供应商提供他们产品的源代码 , 但是这些产品很有可能是笨重且难以利用的 。 除非代码严格地遵循标准并且产品有完整的带例子的说明书以展示代码是怎样工作的。通过这本书,你将会对 uC/OS-III 内部的工作情况有一个很深的了解。应用程序接口 ( API ) : uC/OS-III 是很直观的 。 如果你熟悉类似的编码规范 , 你能轻松地知道函数名所对应的服务 , 以及需要怎样的参数 。 例如 : 指向对象的指针通常是第一个参数 , 指向错误代码的指针
通常是最后一个参数。
抢占式多任务处理 : uC/OS-III 是一个抢占式多任务处理内核 , 因此, uC/OS-III 正在运行的经常是最重要的就绪任务。时间片轮转调度 : uC/OS-III 允许多个任务拥有相同的优先级 。 当多个相同优先级的任务就绪时,并且这个优先级是目前最高的。uC/OS-III 会分配用户定义的时间片给每个任务去运行。每个任务可以定义不同的时间片。当任务用不完时间片时可以让出 CPU 给另一个任务。
快速响应中断: uC/OS-III 有一些内部的数据结构和变量。
uC/OS-III 保护临界段可以通过锁定调度器代替关中断。因此关中断的时间会非常少。这样就使 uC/OS-III 可以响应一些非常快的中断源了。
确定性的 : uC/OS-III 的中断响应时间是可确定的 , uC/OS-III 提供
的大部分服务的执行时间也是可确定的。
可扩展的 :根据应用的需求,代码大小可以被调整。 编译时 通过调整 uC/OS-II I 源代码中的大 约 4 0 个 #define( 见 OS_CFG.H) 可以在添加或移除一些功能。 uC/OS-III 的服务还提供一些实时检查功能。特别的, uC/OS-III 能检传递的参数是否为 NULL 指针, ISR 是否就绪了任务级服务 。 参数有允许范围 , 指定选项都是有用的 。 检测功能可以被关闭(在编译时)以提供更好的性能和缩减代码大小。实际上 ,可扩展的 uC/OS-III 支持更广泛的应用和项目。易移植的 : uC/OS-III 可以被移植到大部分的 CPU 架构中。大部分的支持 uC/OS-II 的器件通过改动就能支持 uC/OS-III 。而 uC/OS-I I已经移植到 45 种 CPU 架构中了。
可固化的 : uC/OS-III 专为嵌入式系统设计 , 它可以跟应用程序代码一起被固化。
可实时配置的: uC/OS-III 允许用户在运行时配置内核。特别的 ,所有的内核对象如任务、堆栈、信号量、事件标志组、消息队列 、 消息、互斥信号量、内存分区、软件定时器等都是在运行时分配的 , 以免在编译时的过度分配。
任务数无限制 : uC/OS-III 对任务数量无限制 。 实际上 , 任务的数量限制于处理器能提供的内存大小 。 每一个任务需要有自己的堆栈空间, uC/OS-III 在运行时监控任务堆栈的生长。 uC/OS-III 对任务的大小无限制,
优先级数无限制 : uC/OS-III 对优先级的数量无限制 。 然而 , 配置uC/OS-III 的优先级在 32 到 256 之间已经满足大多数的应用了。内核对象数无限制: uC/OS-III 支持任何数量的任务、信号量 、 互斥信号量 、 事件标志组 、 消息队列 、 软件定时器 、 内存分区 。 用户在运行时分配所有的内核对象。
服务 : uC/OS-III 提供了高档实时内核所需要的所有功能 , 例如任务管理、时间管理、信号量、事件标志组、互斥信号量、消息队列 、软件定时器、内存分区等。互斥信号量( Mutexes Mutexes Mutexes Mutexes ) : 互斥信号量用于资源管理。它是一个内置优先级的特殊类型信号量 , 用于消除优先级反转 。 互斥信号量可以被嵌套,因此,任务可申请同一个互斥信号量多达 250 次。当然 , 互斥信号量的占有者需要释放同等次数。
嵌套的任务停止 : uC/OS-III 允许任务停止自身或者停止另外的任务。停止一个任务意味着这个任务将不再执行直到被其他的任务恢复 。 停止可以被嵌套到 250 级 。 换句话说 , 一个任务可以停止另外的任务多达 250 次 。 当然 , 这个任务必须被恢复同等次数才有资格再次获得 CPU 。
软件定时器: 可以定义任意数量的一次性的、周期性的、或者两者兼有的定时器 。 定时器是倒计时的 , 执行用户定义的行为一直到计数减为 0 。 每一个定时器可以有自己的行为 , 如果一个定时器是周期性的,计数减为 0 时会自动重装计数值并执行用户定义的行为。
挂起多个对象 : uC/OS-III 允许任务等待多个事件的发生 。 特别的 ,任务可以同时等待多个信号量和消息队列被提交 。 等待中的任务在事件发生的时候被唤醒。
任务信号量 : uC/OS-III 允许 ISR 或者任务直接地发送信号量给其它任务 。 这样就避免了必须产生一个中间级内核对象如一个信号量或者事件标志组只为了标记一个任务。提高了内核性能。任务消息 : uC/OS-III 允许 ISR 或者任务直接发送消息到另一个任务。这样就避免产生一个消息队列,提高了内核性能。
任务寄存器 :每一个任务可以拥有用户可定义的任务寄存器,不同于 CPU 寄存器。
错误检测 : uC/OS-III 能检测指针是否为 NULL 、 在 ISR 中调用的任务级服务是否允许 、 参数在允许范围内 、 配置选项的有效性 、 函数的执行结果等。每一个 uC/OS-III 的 API 函数返回一个对应于函数调用结果的错误代号。
内置的性能测量 : uC/OS-III 有内置性能测量功能 。 能测量每一个任务的执行时间 , 每个任务的堆栈使用情况,任务的执行次数, CP U的使用情况 , ISR 到任务的切换时间 , 任务到任务的切换时间 , 列表中的峰值数,关中断、锁调度器平均时间等。
可优化: uC/OS-III 被设计于能够根据 CPU 的架构被优化。
uC/OS-III 所用的大部分数据类型能够被改变 , 以更好地适应 CPU 固有的字大小 。 优先级调度法则可以通过编写一些汇编语言而获益于一些 特 殊 的 指 令 如 位 设 置 、 位 清 除 、 计 数 清 零 指 令( CLZ ) ,find-first-one(FF1) 指令。
死锁预防 : uC/OS-III 中所有的挂起服务都可以有时间限制 , 预防死锁。
任务级的时基处理 : uC/OS-III 有时基任务,时基 ISR 触发时基任务。 uC/OS-III 使用了哈希列表结构,可以大大减少处理延时和任务超时所产生的开支。

用户可定义的钩子函数: uC/OS-III 允许程序员定义 hook 函数 ,hook 函数被 uC/OS-III 调用。 hook 函数允许用户扩展 uC/OS-III 的功能。有的 hook 函数在任务切换的时候被调用,有的在任务创建的时候被调用,有的在任务删除的时候被调用。
时间戳 :为了测量时间, uC/OS-III 需要一个 16 位或者 32 位的时时间戳计数器。这个计数器值可以在运行时被读取以测量时间 。 例如 : 当 ISR 提交消息到任务时 , 时间戳计数器自动读取并保存作为消息 。 当接收者接收到这条消息 , 时间戳被提供在消息内 。 通过读取现在的时间戳,消息的响应时间可以被确定。
嵌入的内核调试器 : 这个功能允许内核调试器查看 uC/OS-III 的变量和数据结构通过一个用户定义的通道 。 (但是只能在调试器遇到断点的时候查看 ) 。 uC/OS-III 内核也支持 uC/Probe ( 探针 ) 在运行时显示信息。
对象名称 : 每个 uC/OS-III 的内核对象有一个相关联的名字 。 这样就能很容易的识别出对象所指定的作用 。 分配一个 ASCII 码的名字给任务 、 信号量 、 互斥信号量 、 事件标志组 、 消息队列 、 内存块 、 软件定时器。对象的名字长度没有限制,但是必须以空字符结束。



完整的pdf格式文档51黑下载地址(共316页):
uCOS-III中文说明文档.pdf (5.31 MB, 下载次数: 894)

评分

参与人数 1黑币 +5 收起 理由
szcoffee + 5 很给力!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏16 分享淘帖 顶4 踩
回复

使用道具 举报

沙发
ID:384661 发表于 2018-8-16 19:03 | 只看该作者
好东西,学了这么久 看了这本书才明白了实时操作系统的精髓,不错 推荐给大家看看
回复

使用道具 举报

板凳
ID:452104 发表于 2018-12-22 15:05 | 只看该作者
楼主很给力,下载来学习下
回复

使用道具 举报

地板
ID:328121 发表于 2019-2-2 09:10 | 只看该作者
好书,谢谢楼主
回复

使用道具 举报

5#
ID:367113 发表于 2019-2-21 12:00 | 只看该作者
正要学习,多谢楼主
回复

使用道具 举报

6#
ID:472104 发表于 2019-2-24 17:04 | 只看该作者
好东西,学了这么久 看了这本书才明白了实时操作系统的精髓,不错 推荐给大家看看
回复

使用道具 举报

7#
ID:516930 发表于 2019-4-21 21:19 | 只看该作者
中文的用户手册,太好了。等黑币够了,就下载下来学习一下。谢谢楼主
回复

使用道具 举报

8#
ID:516930 发表于 2019-4-22 10:46 | 只看该作者
黑币够了,就马上下载了。楼主即是译者-屈环宇吧,谢谢楼主
回复

使用道具 举报

9#
ID:336453 发表于 2019-6-14 14:39 | 只看该作者
非常感谢,谢谢中文
回复

使用道具 举报

10#
ID:573362 发表于 2019-6-27 13:50 | 只看该作者
翻译这样的文章是很花时间的,楼主真的厉害!
回复

使用道具 举报

11#
ID:581023 发表于 2019-7-9 16:17 | 只看该作者
楼主很给力,下载来学习下
回复

使用道具 举报

12#
ID:581023 发表于 2019-7-9 16:18 | 只看该作者
好书! 谢谢楼主!
回复

使用道具 举报

13#
ID:282095 发表于 2019-7-10 09:28 | 只看该作者
需要好好学习一下
回复

使用道具 举报

14#
ID:484801 发表于 2019-7-12 16:12 | 只看该作者
不得不说,你真的有耐心
回复

使用道具 举报

15#
ID:365464 发表于 2019-7-26 16:43 | 只看该作者
谢谢分享,学习啦
回复

使用道具 举报

16#
ID:216371 发表于 2019-8-21 13:49 | 只看该作者
请问楼主,我是新兵,可以直接学习UC/OS-Three吗?
回复

使用道具 举报

17#
ID:602929 发表于 2019-8-23 08:02 | 只看该作者
学习交流一下,收获不少
回复

使用道具 举报

18#
ID:421595 发表于 2019-12-10 14:28 | 只看该作者
支持一下
回复

使用道具 举报

19#
ID:357487 发表于 2019-12-14 20:31 | 只看该作者
谢谢楼主分享,下载学习一下
回复

使用道具 举报

20#
ID:902297 发表于 2021-4-8 10:17 | 只看该作者
论坛审核方式是不是有点落后了,不能马上看到自己回复的内容。
回复

使用道具 举报

21#
ID:902297 发表于 2021-4-9 11:34 | 只看该作者
回复

使用道具 举报

22#
ID:324602 发表于 2021-4-22 19:20 | 只看该作者
强,版主真有毅力和耐心,感谢。
回复

使用道具 举报

23#
ID:113700 发表于 2021-5-31 17:10 | 只看该作者
想学精髓肯定少不了看源码
回复

使用道具 举报

24#
ID:138955 发表于 2021-6-1 08:52 | 只看该作者
不错不错,为什么自己的评论看不到了
回复

使用道具 举报

25#
ID:374793 发表于 2021-6-30 13:38 | 只看该作者
好东西,学了这么久 看了这本书才明白了实时操作系统的精髓,不错 推荐给大家看看
回复

使用道具 举报

26#
ID:120616 发表于 2021-7-2 19:28 | 只看该作者
好东西,学了这么久 看了这本书才明白了实时操作系统的精髓,不错 推荐给大家看看
回复

使用道具 举报

27#
ID:507681 发表于 2021-7-21 15:44 | 只看该作者
看看,学习学习,和freertos rtx有啥区别
回复

使用道具 举报

28#
ID:620390 发表于 2021-9-24 16:31 | 只看该作者
刚刚下载了,还没有详细看
回复

使用道具 举报

29#
ID:858898 发表于 2021-10-14 20:17 | 只看该作者
我觉得,这真的是太棒了,太有毅力了
回复

使用道具 举报

30#
ID:263813 发表于 2021-11-13 23:38 | 只看该作者
学学看对以后学习linux系统有没有帮助
回复

使用道具 举报

31#
ID:59830 发表于 2021-11-14 08:53 | 只看该作者
翻译后的 US0S-III  学习起来快多了,谢谢分享!
回复

使用道具 举报

32#
ID:730993 发表于 2021-11-14 23:37 | 只看该作者
楼主辛苦了,非常感谢分享!!
回复

使用道具 举报

33#
ID:1000982 发表于 2022-1-10 22:21 | 只看该作者
非常感谢楼主,这个材料对我有很大帮助
回复

使用道具 举报

34#
ID:143080 发表于 2022-3-29 11:16 | 只看该作者
楼主辛苦,非常感谢你的分享!!
回复

使用道具 举报

35#
ID:52721 发表于 2022-3-31 17:34 | 只看该作者
很好的资料,可以学习一下!
回复

使用道具 举报

36#
ID:1070394 发表于 2023-4-7 17:49 | 只看该作者
刚好在找这个,在这找到了
回复

使用道具 举报

37#
ID:821429 发表于 2023-4-27 15:25 | 只看该作者
已下载留存学习
回复

使用道具 举报

38#
ID:374110 发表于 2023-7-10 15:41 | 只看该作者
不好意思没加载出来
回复

使用道具 举报

39#
ID:1089659 发表于 2023-7-26 10:31 | 只看该作者
希望可以了解一下UCOS实现http客户端的内容
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表