人们通常根据需要达到的目标来合理选择工作方式和需要使用的工具。例如去不远的超市购物,我们会走着去,然后将买好的东西拎回来。如果开着汽车去附近的超市,虽然只要一两分钟就可以到达,但找停车位和付停车费可能会更麻烦。如果是要到外地出差,我们会坐汽车或者火车去,甚至坐飞机去,没有人会徒步去外地出差。这里就有两种本质不同的环境:徒步行走(脚沾地)的出行环境和使用交通工具(脚不沾地)的出行环境。同样的道理,在电子产品的软件设计过程中,也需要根据软件的规模和复杂程度来合理选择编程环境:直接与所有硬件打交道的“基于裸机的编程环境”和基本上与硬件隔离的“基于嵌入式实时操作系统的编程环境”。本节将介绍这两种基本的编程环境。
现在用一个直观的例子来说明这两种编程环境下产生的软件有什么本质不同。假设有三种工作(做饭、打扫卫生和洗衣服)需要在规定的时间之内同时完成,一般我们会选择以下两种方式之一:
①请一个厨师来完成做饭的任务,请一个清洁工来完成打扫卫生的任务,再请一个洗衣工来完成洗衣服的任务。三个人各做各的工作,在规定的时间之内完成各自的任务将是非常轻松的事情,但三个人的工资总和肯定不低。
第1章 绪论
1.1 嵌入式系统的编程环境
1.1.1 基于裸机的编程环境
1.1.2 基于嵌入式实时操作系统的编程环境
1.2 学习使用实时操作系统之前必须具备的能力
1.2.1 软件设计能力的要求
1.2.2 硬件设计能力的要求
1.2.3 工程项目开发能力的要求
1.3 实时操作系统的快速人门方法

第2章 建立开发环境
2.1 CPU芯片与硬件平台的选择
2.2 嵌入式实时操作系统的选择
2.3 嵌入式实时操作系统的移植
2.4 开发调试环境的建立
2.5 工程模板分析

2.6 工程模板的使用

第3章 有关任务的基本知识
3.1 仿多CPU环境的实现
3.2 任务的特性
3.2.1 任务的独立性
3.2.2 任务的并发性
3.2.3 任务的动态性
3.3 任务的划分
3.3.1 设备依赖性任务的划分
3.3.2 关键任务的划分
3.3.3 紧迫任务的划分
3.3.4 数据处理任务的划分
3.3.5 功能聚合任务的划分
3.3.6 触发条件相同任务的划分
3.3.7 运行周期相同任务的划分
3.3.8 顺序操作任务的划分
3.3.9 任务划分小结
3.4 任务的可调度性分析
3.5 与任务管理有关的常用函数
3.5.1 创建任务
3.5.2 删除任务

第4章 任务设计
4.1 任务函数的结构
4.1.1 单次执行的任务
4.1.2 周期性执行的任务
4.1.3 事件触发执行的任务
4.2 任务优先级安排
4.2.1 任务的优先级资源
4.2.2 任务优先级安排原则
4.3 任务的数据结构设计
4.3.1 与操作系统有关的数据结构
4.3.2 与操作系统无关的数据结构
4.4 任务函数设计中的问题
4.4.1 公共函数的调用
4.4.2 与其他任务的协调
4.4.3 共享资源的访问
4.4.4 与其他任务进行数据通信
4.5 任务函数的代码设计过程
4.5.1 系统总体任务关联图
4.5.2 任务的关联分析

4.5.3 任务的程序流程图
4.5.4 编写任务函数的程序代码

第5章 中断服务程序设计
5.1 中断优先级
5.1.1 中断的优先级资源
5.1.2 中断优先级安排原则
5.2 在工程模板中加人中断服务程序
5.3 中断服务程序设计
5.3.1 中断服务程序的结构
5.3.2 选择与关联任务的通信手段
5.3.3 带中断服务程序的示例

第6章 行为同步
6.1 用于行为同步的通信手段
6.1.1 二值信号量
6.1.2 计数信号量
6.1.3 事件标志组
6.1.4 消息邮箱
6.1.5 消息队列
6.1.6 通信手段的选择

6.2 行为同步
6.2.1 ISR和任务之间的同步
6.2.2 两个任务之间的单向同步
6.2.3 两个任务之间的双向同步
6.2.4 两个以上任务同步一个任务
6.2.5 多个任务相互同步

第7章 资源同步
7.1 关中断
7.1.1 保障数据可靠性
7.1.2 保障数据完整性
7.1.3 关中断小结
7.2 关调度
7.3 使用互斥信号量
7.4 使用计数信号量

第8章 数据通信
8.1 全局变量
8.2 内存数据块
8.3 消息邮箱
8.4 消息队列

第9章 时间管理
9.1 控制任务的执行周期
9.2 控制任务的运行节奏
9.3 状态查询
9.4 终止周期性任务

第10章 采样任务设计
10.1 使用延时函数控制采样周期
10.2 使用定时中断控制采样周期
10.3 使用节拍钩子函数进行采样
10.4 被动采样

第11章 串行通信任务设计
11.1 通信协议设计
11.2 风险评估
11.3 帧缓冲区
11.4 数据发送
11.5 数据接收
11.6 双向数据通信
第12章 键盘任务设计
12.1 可靠地获取键盘操作信息
12.2 基于菜单操作的监控流程
12.2.1 系统功能分析和菜单结构设计
12.2.2 监控程序设计
12.3 与显示任务的通信

第13章 显示任务设计
13.1 GUI简介
13.2 画面设计
13.3 与其他任务的接口
13.4 短消息设计
13.5 显示任务设计

第14章 嵌入式操作系统的裁剪
14.1 服务功能的裁剪
14.1.1 任务管理功能的裁剪
14.1.2 通信服务功能的裁剪
14.1.3 其他功能的裁剪
14.2 数据结构的裁剪
14.2.1 与任务有关的数据结构

《基于嵌入式实时操作系统的程序设计技术(第2版)》介绍了在“嵌入式实时操作系统”环境下的程序设计技术,共分15章。内容有绪论、建立开发环境、有关任务的基本知识、任务设计、中断服务程序设计、行为同步、资源同步、数据通信、时间管理、采样任务设计、串行通信任务设计、键盘任务设计、显示任务设计、嵌入式操作系统的裁剪和设计示例。书中介绍的内容以源码开放的嵌入式实时操作系统“UC/OS-II为软件运行环境,以SmartCortex M3-1700通用教学/竞赛/工控开发平台为硬件环境。其内容深入浅出。为便于读者加深理解,书中还带有很多程序设计实例和实验。
《基于嵌入式实时操作系统的程序设计技术(第2版)》可作为大学电子类本科生和研究生的学习参考书,也可以作为从事嵌入式应用系统研制开发的电子技术人员的参考书。