《基于嵌入式实时操作系统的编程技术》笔记清单:第三章任务划分

《基于嵌入式实时操作系统的编程技术》笔记清单:第三章任务划分.
《基于嵌入式实时操作系统的编程技术》笔记清单:第四章任务设计.
《基于嵌入式实时操作系统的编程技术》笔记清单:第五章中断服务程序设计.
《基于嵌入式实时操作系统的编程技术》笔记清单:第六章行为同步.
《基于嵌入式实时操作系统的编程技术》笔记清单:第七章资源同步.
《基于嵌入式实时操作系统的编程技术》笔记清单:第八章数据通信.
《基于嵌入式实时操作系统的编程技术》笔记清单:第九章时间管理.
《基于嵌入式实时操作系统的编程技术》笔记清单:第十章采集任务设计.

前言

当不使用操作系统时(基于裸机编程编程),将“可执行程序单元”进行分类组合,就可以得到一个个“模块”,其中一个是“监听模块”,其他“模块”在“监控模块”的管理下运行。一个“模块”可以封装多个功能,比如将LED闪烁和电机启动功能封装在一起。而“监听模块”,可以将按键,AD转换等功能封装在一起,便于被监听。“监听模块”可以放在main的while中,也可以利用定时进行查询。

当使用操作系统时(基于操作系统的编程方式),将这些“可执行程序单元”进行分类组合,就可以得到一个个“任务”,这些“任务”在操作系统的调度下运行。严格地将,这里的“任务”是指“用户任务”(区别于操作系统的“系统任务”)。

对一个具体的嵌入式应用系统进行“任务划分”,是实时操作系统应用软件设计的关键,任务划分是否合理将直接影响软件设计的质量。当任务划分得合理时,软件将比较简洁、高效;否则将可能比较繁杂,甚至失败。

本章笔记清单

1. 任务状态分为三大类:
       ~~~~~~ ①就绪
       ~~~~~~ ②运行
       ~~~~~~ ③等待:挂起和阻塞

2. “任务”的“独立性”表现为逻辑上的“平等性”和信息传输上的“异步性”。
       ~~~~~~ ①平等性:可以从任务的角度去看,它像是占用整块CPU,而实际上是多任务调度。
       ~~~~~~ ②异步性:任务之间传递的信息是异步的,即不需在同一时刻进行收发。同时,可能需要一个“第三者”作为搬运工, 如消息邮箱。

3. 已就绪的高优先级任务可剥夺另一个正在运行的低优先级任务。
       ~~~~~~ 比如,在定时器中断中,释放一个信号量,一个高优先级被阻塞的任务(正在等待信号量),立刻进去就绪状态,且同时产生一个调度,假如这个任务在就绪表中时最高优先级,则立刻执行,从而打断低优先级任务。

4. 任务划分的目标:
       ~~~~~~ ① 首要目标,满足“实时性”指标:最坏情况下,对实时性有需求的功能都能实现。
       ~~~~~~ ②任务数合理:过多,效率低;过少,复杂。
       ~~~~~~ ③简化软件系统:去掉多余的系统服务,减小软件代码规模。(可以在配置文件中选择需要的服务)
       ~~~~~~ ④降低资源需求:减小、简化任务之间的同步和通信要求,减小相应数据结构的内存规模,从而降低对系统资源的需求。

5. 任务划分方法:
       ~~~~~~ ①根据设备依赖性任务的划分:硬件模块
       ~~~~~~ ②关键任务的划分:
                 ~~~~~~~~~~~~~~~~ ✦关键任务指不能漏了一次未被执行;
                 ~~~~~~~~~~~~~~~~ ✦尽可能不与其它任务关联,独立起来;
                 ~~~~~~~~~~~~~~~~ ✦可由对应的中断来处理;
                 ~~~~~~~~~~~~~~~~ ✦中断被触发(如外部中断), 可以在其服务函数中通知其它任务,利用某种通信机制。
       ~~~~~~ ③紧迫任务的划分:
                 ~~~~~~~~~~~~~~~~ ✦紧迫任务指有严格的实时性;
                 ~~~~~~~~~~~~~~~~ ✦一般是异步事件触发,能引起一个中断,安排在相应的ISR时最有效的;
                 ~~~~~~~~~~~~~~~~ ✦如果不能使用中断,则安排在尽可能高的优先级;
                 ~~~~~~~~~~~~~~~~ ✦需达到“按时完成”的目的,必须使“紧迫任务”需要的执行时间尽可能短;
                 ~~~~~~~~~~~~~~~~ ✦对“紧迫任务”进行“瘦身”;
                 ~~~~~~~~~~~~~~~~ ✦尽可能将“不太紧迫任务”剥夺出来,将其封装成另一个任务。
       ~~~~~~ ④数据处理任务的划分:
                 ~~~~~~~~~~~~~~~~ ✦数据处理的特点:费时;
                 ~~~~~~~~~~~~~~~~ ✦将其安排在较低的优先级上;
                 ~~~~~~~~~~~~~~~~ ✦多个数据处理任务的合作方式:如对电压进行AD转换,然后,将数据交另一个任务进行图像处理…
                          ~~~~~~~~~~~~~~~~~~~~~~~~~ ◍将一个大的数据处理任务,拆分成多个任务,每个任务完成其中一个运算阶段;
                          ~~~~~~~~~~~~~~~~~~~~~~~~~ ◍按优先级,从高到低排列;
                          ~~~~~~~~~~~~~~~~~~~~~~~~~ ◍形成了一条流水线。
       ~~~~~~ ⑤功能聚合任务的划分:
                 ~~~~~~~~~~~~~~~~ ✦将关系密切的若干功能组合成一任务,达到功能聚合的效果;
                 ~~~~~~~~~~~~~~~~ ✦关系密切两层含义:数据关联紧密和时序关联紧密。
       ~~~~~~ ⑥触发条件相同的任务划分:
                 ~~~~~~~~~~~~~~~~ ✦触发条件相同是指一个事件,能触发多个功能;
                 ~~~~~~~~~~~~~~~~ ✦如果实时性得到满足,且能顺序执行这些功能,则可以安排在同一个任务中;(不并发执行)
                 ~~~~~~~~~~~~~~~~ ✦被外部中断触发的任务,通常时关键任务和紧迫任务;
       ~~~~~~ ⑦运行周期相同任务的划分:
                 ~~~~~~~~~~~~~~~~ ✦将周期相同的功能组合在一起,封装成一个任务,就可以避免一个时间事件触发几个任务;
                 ~~~~~~~~~~~~~~~~ ✦比如:将亮度采集、温度采集、气体采集…合并成一个任务,这个任务专门用来封装不断重复的功能。
       ~~~~~~ ⑧顺序操作任务的划分:
                 ~~~~~~~~~~~~~~~~ ✦若干功能按固定顺序流水线作业,相互之间没有“并发性”,则封装成一个任务。

6. 任务划分小结(书上原文):
       ~~~~~~ ①首先,以CPU为中心,将与各种输入/输出设备(或端口)相关的功能分别划分为独立的任务。
       ~~~~~~ ②发现“关键”功能,将其最“关键”部分“剥离”出来,用一个独立任务(或ISR)完成,剩余部分用另一个任务实现,两者之间通过通信机制沟通。
       ~~~~~~ ③发现“紧迫”功能,将其最“紧迫”部分“剥离”出来,用一个独立的高优先级任务(或ISR)完成,剩余部分用另外一个任务实现,两者之间通过通信机制沟通。
       ~~~~~~ ④对于既“关键”又“紧迫”的功能,按“紧迫”功能处理。
       ~~~~~~ ⑤将消耗时间较多的数据处理功能划分出来,封装为低优先级任务。
       ~~~~~~ ⑥将关系密切的若干功能组合成一个任务,达到功能聚合的效果。
       ~~~~~~ ⑦将运行周期相同的功能组合成为一个任务,从而避免时间事件分发机制。
       ~~~~~~ ⑧将若干按固定顺序执行的功能组合为一个任务,从而免除同步接力通信的麻烦。

猜你喜欢

转载自blog.csdn.net/weixin_38956024/article/details/107159549