嵌入式实时操作系统μC/OS-II原理及应用第2版pdf免费版|百度网盘下载

编辑点评:高等院校计算机、电子技术、自动化技术、仪器仪表等信息类专业教材

详细介绍了μC/OS-II内核嵌入式实时操作系统的任务管理与调度、系统时钟与tick服务、时间管理、中断、任务通信与同步、简单的内存管理原理。给出了大量的例子,帮助读者学习和理解。最后还介绍了μC/OS-II的移植方法。

嵌入式实时操作系统μC/OS-II电子版图片预览

目录

第 1 章嵌入式 RTOS 的基本概念 1

1.1 计算机操作系统1

1.1.1 什么是计算机操作系统1

1.1.2 操作系统的作用和功能2

1.2 嵌入式系统和嵌入式操作系统 3

1.2.1 嵌入式系统的基本概念4

1.2.2 嵌入式操作系统 7

1.2.3 实时操作系统需要满足的条件9

1.2.4 嵌入式系统和嵌入式实时操作系统的任务11

1.3 嵌入式实时操作系统μC/OSII 12介绍

1.4 总结 13

1.5 练习 13

第2章基础知识14

2.1 开发工具14

2.1.1 Borland C 3.1 及其 Lite 14

2.1.2 多文件程序的编译与链接 19

2.2 项目管理工具make和makefile22

2.3 复杂工程项目的管理 30

2.3.1 批处理文件和makefile的集成使用30

2.3.2 复杂项目管理示例31

2.4 常用数据结构 35

2.4.1 程序控制块 35

2.4.2 控制块的组织——链表 39

2.4.3 位图 40

2.5 总结 40

2.6 练习 41

第 3 章 μC/OS-II 中的任务 42

3.1 任务的基本概念 42

3.1.1 任务及其内存结构 42

μC/OS-II 的任务是线程。

一个任务由三部分组成:任务控制块(保存任务属性)、任务栈(保存任务工作环境)、任务程序代码。

任务的三个要素:

1、任务代码(程序)--------函数部分(μC/OS-II任务的代码是一个带有临界区的无限循环。)

2、任务的私有栈(保护运行环境)--------对应“物理寄存器”

3、任务控制块(提供私有栈也是虚拟处理器的位置)-----主要包括栈顶指针、链表的前后链接指针、延迟时间OSTCBDly、任务状态OSTCBStat ;任务优先级 OSTCBPrio。

3.1.2 任务状态 44

5 种状态:睡眠、就绪、运行、等待和中断服务。

3.1.3 用户任务代码45的一般结构

任务未被主函数或其他函数调用。 main 函数只负责创建和启动任务,但操作系统调度正在运行的任务。

3.1.4 系统任务46

系统任务(空闲任务、统计任务)

1、空闲任务(只是做一个计数工作)------------μC/OS-II规定用户应用程序必须使用这个空闲任务,并且这个任务不能被软件用来删除(使用最低优先级)。

2、统计任务OSTaskStat():统计任务每秒钟计算单位时间CPU的使用时间,并将计算结果以百分比的形式存储在变量OSCPUsage中,以便应用程序通过访问了解CPU它。利用率(第二低优先级)。

3.1.5 任务优先级和优先级 48

用户的优先级,0为最高,每个任务的优先级唯一。

3.2 任务栈 48

3.2.1 创建任务栈 49

typedef unsigned int OS_STK;//16bit

定义一个OS_STK类型的数组,完成任务栈的创建。

注意检查处理器是否支持堆栈增长的方向是向上还是向下。

3.2.2 任务栈初始化51

应用在

3.3 任务控制块及其链表52

uc-os中用来记录任务栈指针、任务当前状态、任务优先级等一些与任务管理相关的属性的表称为任务控制块。 OS_TCB。

3.3.1 任务控制块结构52

3.3.2 任务控制块列表 53

3.3.3 任务控制块55的初始化

3.4 任务就绪列表和任务调度 56

任务就绪表OSRdyTbl[]代表组(数组); OSRdyGrp 表示组(数组中的那些组有任务就绪),从 0 到 255:

即OSRdyTbl表示一个有8个元素的数组,每个元素的值是一个8位二进制数(INT8U),每一位代表一个优先级----该数组共有64个二进制位,表示 64 个优先级。

OSRdyGrp

OSTCBBitY 存储组,OSTCBBitX 存储组内的偏移量。

OSMapTbl:用于查找组和组内的偏移量。

OSUnMapTbl:用于查找哪个组的优先级最高,组中的哪个位(即任务)的优先级最高。

3.4.1 任务就绪表结构56

3.4.2 任务就绪表上的操作58

3.4.3 任务调度 59

3.5 任务创建 65

3.5.1 使用函数OSTaskCreate()创建任务65

3.5.2 使用函数OSTaskCreateExt()创建任务67

3.5.3 创建任务的一般方法 67

3.6 任务的暂停和恢复 74

3.6.1 暂停任务 74

3.6.2 恢复任务 74

3.7 其他任务管理功能 80

3.7.1 修改任务优先级80

3.7.2 任务删除81

3.7.3 查询任务信息87

3.8 μC/OSII初始化和任务启动87

3.8.1 μC/OSII初始化87

3.8.2 μC/OSII启动89

3.9 总结 91

3.10 练习 92

第 4 章 μC/OSII 中断和时钟 93

4.1 μC/OSII 中断 93

4.1.1 μC/OSII中断处理93

4.1.2 中断级任务切换函数97

4.1.3 应用中的关键第 97 节

4.2 μC/OSII 时钟 99

4.3 时间管理 106

4.3.1 任务延迟106

4.3.2 延迟107取消任务

4.3.3 获取和设置系统时间112

4.4 总结 114

4.5 练习 115

第5章任务同步与通信116

5.1 任务同步和事件116

5.1.1 任务之间的同步 116

5.1.2 事件 117

5.2 事件控制块和事件处理程序129

5.2.1 事件控制块 129 的结构

5.2.2 操作事件控制块的函数131

5.2.3 空事件控制块列表133

5.3 信号量及其操作 134

5.3.1 信号量 134

5.3.2 信号量操作135

5.4 互斥信号量和任务优先级反转 144

5.4.1 任务优先级145倒置现象

5.4.2 互斥信号量 150

5.5 留言信箱及其操作153

5.5.1 留言信箱153

5.5.2 消息邮箱操作154

5.6 消息队列及其操作 159

5.6.1 消息队列 159

5.6.2 消息队列操作 162

5.7 总结 168

5.8 练习 169

第6章信号量集170

6.1 信号量集170的结构

6.1.1 基本概念 170

6.1.2 信号量集171的结构

6.1.3 等待任务列表上的操作175

6.1.4 空标志组列表 175

6.2 信号量集操作 176

6.2.1 创建信号量集 176

6.2.2 请求信号量集 178

6.2.3 向信号量集 178 发送信号

6.2.4 查询信号量集184的状态

6.2.5 删除信号量集187

6.3 总结 187

6.4 练习 187

第7章动态内存管理188

7.1 内存控制块 188

7.1.1 动态分配内存188的划分

7.1.2 内存控制块OS_MEM 189的结构

7.1.3 空内存控制块列表190

7.2 动态内存管理 190

7.2.1 创建动态内存分区191

7.2.2 请求获取内存块193

7.2.3 释放内存块 195

7.2.4 查询内存分区199的状态

7.3 总结 204

7.4 练习 204

第8章在51单片机上移植μC/OSII205

8.1 μC/OSII 移植一般问题 205

8.1.1 可重入函数的概念 205

8.1.2 时钟节拍生成 206

8.1.3 任务栈206的设计

8.2 在51系列MCU上移植μC/OSII207

8.2.1 OS_CPU.H文件修改207

8.2.2 任务栈设计 208

8.2.3 文件OS_CPU_C.C修改215

8.2.4 一些笔记 216

8.3 应用示例216

8.3.1 LED数显驱动216

8.3.2 串行接口应用程序 218

8.4 总结 226

8.5 练习 226

第 9 章基于 ARM 的 μC/OSII 227

9.1 迁移计划 227

9.1.1 编译器选择 227

9.1.2 ARM7工作模式选择227

9.2 移植 228

9.2.1 写入文件OS_CPU.H的228

9.2.2 文件OS_CPU_C.C写入230

9.2.3 写入文件OS_CPU_A.S的237

9.2.4 关于中断和时钟滴答 240

9.3 在 LPC2000 上移植 μC/OSII241

9.3.1 连接 SWI 软件中断 242

9.3.2 中断和滴答中断 242

9.3.3 基于μC/OSII和ARM的应用实例243

9.4 总结 245

9.5 练习 245

第 10 章 μC/OSII 在 80x86 246 上的移植

10.1 概述 246

10.2 任务切换 247

10.2.1 任务切换函数OSCtxSw()247

10.2.2 任务切换宏OS_TASK_SW()249

10.2.3 中断级任务切换函数OSIntCtxSw()250

10.3 系统时钟 251

10.3.1 PC中DOS系统时钟251

PC中10.3.2 μC/OSII系统时钟251

10.3.3 μC/OSII系统时钟中断服务程序253

10.3.4 μC/OSII系统时钟中断向量安装253

10.3.5 从μC/OSII返回DOS254

10.4 总结 255

第 11 章实现 μC/OSII 可定制性 256

11.1 文件 OS_CFG.H 中用于系统定制的常量 256

11.2 配置常量258解释

11.2.1 OS_MAX_EVENTS258

11.2.2 OS_MAX_MEM_PARTS259

11.2.3 OS_MAX_QS259

11.2.4 OS_MAX_MEM_TASKS259

11.2.5 OS_LOWEST_PRIO259

11.2.6 OS_TASK_IDLE_STK_SIZE260

11.2.7 OS_TASK_STAT_EN260

11.2.8 OS_TASK_STAT_STK_SIZE260

11.2.9 OS_CPU_HOOKS_EN260

11.2.10 OS_MBOX_EN261

11.2.11 OS_MEM_EN261

11.2.12 OS_Q_EN261

11.2.13 OS_SEM_EN261

11.2.14 OS_TASK_CHANGE_PRIO_EN261

11.2.15 OS_TASK_CREATE_EN261

11.2.16 OS_TASK_CREATE_EXT_EN262

11.2.17 OS_TASK_DEL_EN262

11.2.18 OS_TASK_SUSPEND_EN262

11.2.19 OS_TICKS_PER_SEC262

文件 PC.C 263 中的附录 A 函数

A.1 字符显示函数263

A.1.1 显示字符函数PC_DispChar263

A.1.2 清除屏幕一栏显示的函数PC_DispClrCol263

A.1.3 清除屏幕一行显示的函数PC_DispClrRow263

A.1.4 清屏函数PC_DispClrScr264

A.1.5 显示字符串函数PC_DispStr264

A.1.6 颜色常数 264 的定义

A.2 DOS环境的保存和恢复函数 265

A.2.1 函数PC_DOSSaveReturn() 265 保存DOS环境

A.2.2 函数PC_DOSReturn() 265 恢复DOS环境

A.3 函数265设置和获取中断向量

A.3.1 函数PC_VectSet() 265 设置中断向量

A.3.2 获取中断向量函数PC_VectGet()265

附录 B 数据类型 266 用于 μC/OSII

附录C C51开发工具μVision2介绍267

C.1 C51 语言扩展 267

C.1.1 数据类型 267

C.1.2 内存类型 268

C.1.3 存储模式 269

C.1.4 指针 270

C.1.5 可重入函数 271

C.1.6 汇编语言 272 的接口

C.1.7 库函数 273

C.2 创建项目 273

C.2.1 启动 μVision2 并创建项目 273

C.2.2 新建源文件274

C.2.3 添加和配置初始化代码274

C.2.4 为目标 275 设置工具选项

C.2.5 构建项目并生成HEX文件275

C.3 常用菜单选项 276

C.3.1 查看菜单 View276

C.3.2 项目菜单 Project276

C.3.3 调试菜单 Debug276

C.3.4 外设菜单 Peripherals277

参考 278

简介

μC/OS-Ⅱ是一个开源的嵌入式实时操作系统内核。本书详细介绍了嵌入式实时操作系统μC/OS-Ⅱ内核的任务管理与调度、系统时钟与节拍服务、时间管理、中断、任务通信与同步、内存的简单管理原理。大量实例帮助读者学习和理解。最后还介绍了μC/OS-Ⅱ的移植方法。

本书可作为高等院校计算机、电子技术、自动化技术、仪器仪表等相关专业的教材,也可供对嵌入式操作感兴趣的工程技术人员参考。系统。

图书精选

μC/OSII 是著名的开源实时内核。它专为嵌入式应用而设计,可用于各种 8 位、16 位和 32 位微控制器或 DSP。从μC/OS开始,内核已经应用了10多年,在很多领域得到了广泛的应用。本书是MicroC/OSII The Real Time Kernel一书的第二版,在第一版(V2.0)的基础上进行了重大改进和升级。通过对μC/OSII源代码的分析和描述,介绍了多任务实时、竞争与调度算法、任务间同步与通信、存储与时序管理等基本概念,以及如何处理优先级反转问题。 /OSII移植到不同的CPU,如何调试移植的代码。本书可作为高等院校嵌入式实时系统课程的教材或工程师培训教材,也可用于嵌入式应用。

阅读剩余
THE END