@armink
2016-09-04T07:07:51.000000Z
字数 2106
阅读 2238
《玩转嵌入式微处理器多任务程序设计——使用RT-Thread》
学习笔记
1、重点概念(笔记)
1.1 什么是“上下文”
1.1.1 计算机基础组成
1.1.2 指令执行步骤
- 取指(Instruction Fetch)
- 解码(Instruction Decoding)
- 执行(Execution)两大功能:数据的存储及数据的计算
1.1.3 程序分支
1.1.4 通用寄存器
- 寄存器页是算术逻辑单元与外部地址空间进行数据交换的唯一接口
- 内核往往不止一个寄存器页,例如:Cortex-M0 只有一个,而 Cortex-A 系列拥有多个寄存器页
- 窥孔优化
1.2 什么是“任务”
1.2.1 上下文切换总用有几种
- 任务切换时间 = 调度算法的时间 + 出入栈的时间
1.2.2 进程、线程、中断处理程序是任务吗
- 完全切换:线程切换
- 部分切换
- 合作式切换:FSM、函数嵌套
- 抢占式切换(临时切换):中断/异常处理
1.2.3 如何实现上下文切换(部分暂无)
1.2.4 RT-Thread 完整的移植范例(暂无)
1.3 什么是“多任务”
1.3.1 假并行,真并发
- 并行(Parallel):在给定的时间范围内,多个目标任务同时(或者有能力)同时得到执行。
- 并发(Coucurrent):在给定的时间范围内,目标任务都得到执行,就可以判定这些任务是并发的。
1.3.2 CPU 究竟跑得有多快
1.3.3 什么是多任务
- 多单核单流水线微控制器来说,并发实现多任务的唯一方式。
- 在内核上实现“多任务”不过是一个处理器时间(CPU Time)的资源分配问题。
- 手动调度(Compile-time Schedule)
- 自动调度(Runtime Schedule)
- 多任务系统设计的两大核心问题:多任务的通信和同步问题
1.4 什么是“共享资源”
1.4.1 怎么研究多任务的行为
- 1、通过观察发现问题;(Logs、Debug Watch)
- 2、提出解决方案并加以实现;
- 3、通过观察来判断方案是否有效。如果发现新的问题,则跳转至步骤2);如果发现所有问题都得到了满意的答案,则整个过程结束。
1.4.2 什么是任务平面(Task Plane)
- 在任意时刻,当任务 A 运行的时候,任务 B 无法将其打断,我们就说任务 A 对任务 B 具有原子性。
- 互有原子性的任务在同一个任务平面上。
- TT图:任务(Task)相对时间(Time)为函数的图像。横轴是时间轴,表示处理器时间;纵轴为任务轴,用来标记不同的任务
1.4.3 一切从数据完整性开始
- 数据完整性问题:在多任务平面间,有针对目标资源的非原子性操作发生交错所引发的读写冲突问题
1.4.4 什么是共享资源
1.5 暂无
1.6 什么是“实时性”
1.6.1 什么是实时性
1.6.2 “细思极恐”的通杀策略
1.6.3 挽救“实时性”(暂无)
1.6.4 “以小换大”的通用优化策略(暂无)
1.6.5 如何确保“实时性”
- 系统实时性的保证是依靠合理的多任务程序设计来实现的。
1.7 暂无
1.8 “完美逻辑”
1.8.1 “生产者”与“消费者”模型
1.8.2 “完美逻辑”(部分暂无)
- 当一个串行的数据加工中存在前后的两个工序有明显不同的实时性要求,我们就应该将他们分开--分别作为“生产者”和“消费者”拆分到不同的任务中来。
- “生产者”与“消费者”的差费首先是为了解决由“耦合”带来的实时性问题。
- 两种常用的妥协思想帮助应对生产者与消费者的速度差异问题:偏心范式和缓冲范式。
1.8.3 偏心范式(部分暂无)
- 偏心范式讨论前提:生产者平均速度小于等于核心消费者平均速度。
1.8.4 缓冲范式(部分暂无)
- 缓冲范式讨论前提:生产者的平均速度小于消费者,但瞬时速度可能大约消费者
2、笔误
2.1 第 12 页
在函数调用和返回时时是否对其进行压栈和出栈完全由编译器决定
=> 在函数调用和返回时,是否对其进行压栈和出栈完全由编译器决定
2.2 第 16 页
拥有多过个寄存器页
=> 拥有多个寄存器页
typedefenum
=> typedef enum
2.3 第 17 页
battery_status_testimate_battery_status(void)
=> battery_status_t estimate_battery_status(void)
voiddelay_ms
=> void delay_ms
2.4 第 19 页
尤其需要注“意确保数据操作的完整性”
=> 尤其需要注意“确保数据操作的完整性”
2.5 第 38、39 页
2.6 第 84 页
细思极恐”的通杀策略
=> “细思极恐”的通杀策略
2.7 第 92 页
3、建议
3.1 第 10 页
- DE 应替换为 ID ?
- 介绍了过多的程序分支时的流水线切换,好像跟书的主题关联不大
3.2 第 34 页
- 编程风格最好保证前后一致(注释、命名等),否则看上去不太协调