打印
[应用相关]

基于RTOS的软件开发理论

[复制链接]
1207|73
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
黑心单片机|  楼主 | 2022-5-1 13:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
引言软件开发,大多数人依靠的是经验,缺乏理论,比如遇到问题知道怎样改可以修复问题,但不明白深层原因。有些阶段,选择高校的理论教程读读,比网红博主拼凑的技术总结,更能醍醐灌顶,提高水平。实践检验真理,但理论能指导实践

原文链接:https://mp.weixin.qq.com/s/rs0uFXObBap0dvlmzGMaVA

使用特权

评论回复
沙发
黑心单片机|  楼主 | 2022-5-1 13:35 | 只看该作者
1、RTOS的特点

操作系统是计算机中最重要的软件,类似管家,把不同的软件任务安排给硬件资源去执行。为保证服务质量,需要对任务进行合理安排,访问硬件也进行一定的安全维护,保证硬件资源不闲置,不争抢冲突,但允许合理的插队。


使用特权

评论回复
板凳
黑心单片机|  楼主 | 2022-5-1 13:36 | 只看该作者

RTOS的专业的描述:

1、执行时间的可确定性是实时操作系统的基本特性。采用合理的算法和策略,为多个任务合理地分配资源,以满足每个任务的实时性要求。

2、多任务抢占式是实时操作系统的基本特性。多个任务共同分享硬件系统资源,每个任务间彼此独立,根据任务的重要程度给任务分配不同的优先级,优先级越高的任务越容易得到 CPU 的使用权,保证任务的实时性和充分地使用硬件资源。

3、对稳定性和可靠性要求髙。


使用特权

评论回复
地板
黑心单片机|  楼主 | 2022-5-1 13:36 | 只看该作者

要成为老司机,首先要考驾*,学习如何开车,至于汽车本身各系统工作原理,内部构造暂且不用关注;能上路,在不同路况安全驾驶。达到一定水平了再去深究车的部件组成、故障排查。基于RTOS的软件开发,不仅要明白操作系统接口的作用,还要理解其组合的意义。

本文是关于软件开发的理论,作为有一定RTOS基础的参考,授人以渔。对任务、公共函数、中断服务的设计,以及行为同步、资源同步、数据通信的思想和方法进行说明,基本涵盖RTOS软件开发的全部理论。


使用特权

评论回复
5
黑心单片机|  楼主 | 2022-5-1 13:38 | 只看该作者
2、任务设计

嵌入式系统的设计都是从需求分析开始,在软件角度,对具体功能进行任务划分,是实时操作系统应用软件设计的关键。任务(task或thread)划分是否合理将直接影响软件设计的质量、执行效率和可扩展性。


使用特权

评论回复
6
黑心单片机|  楼主 | 2022-5-1 13:40 | 只看该作者
2.1 任务的特性

“任务”的状态是动态变化的,简化就是有运行和等待,而且阻塞等待是必须的,更多状态可以参考操作系统基础。多个任务宏观上是并发运行,其实对单CPU是分时复用,每个任务运行时独立的占有系统资,这也导致任务间数据传输的异步性。

好比三口之家只有一个卫生间,多人分时使用,不需要三人就配三个卫生间,每人使用时完全享有卫生间的设施,其他人有需要时,得排队或者看家庭地位强迫插队。

在对一个具体的嵌入式系统进行任务划分时,不同的角度有不同的方案,一般先考虑需求指标和硬件资源限制。

实时性指标:在最坏的情况下,系统中对时间要求高的需求能否实现。

任务数目合理:任务数目多,每个任务只实现单一功能,任务的设计简单;但任务的调度操作、任务之间的通信活动增加,资源开销大,运行效率低。一般按功能类型、时间要求合理地合并一些任务。

降低资源需求:合理划分任务,减少任务之间的同步和通信需求,选择合适的数据结构,从而降低对硬件资源的需求。


使用特权

评论回复
7
黑心单片机|  楼主 | 2022-5-1 13:40 | 只看该作者
2.2 任务划分的方法

为了使任务划分合理,通常采用以下方法。


使用特权

评论回复
8
黑心单片机|  楼主 | 2022-5-1 13:41 | 只看该作者
2.2.1 设备依赖性任务

系统任务必定是为了实现某些功能,这个功能是主动执行,如读取信息、控制外设,还是被动执行,如接收按键事件。

根据这个特性,任务可分为“主动型”和“被动型”两种。主动型任务与其他任务通过通信机制向该任务发出执行请求执行,被动型任务通常是一个中断服务程序(ISR) 和一个与之关联的任务。在这个基础上,也可以把多个同类型外设的检测合并到一个任务。

使用特权

评论回复
9
黑心单片机|  楼主 | 2022-5-1 13:43 | 只看该作者
2.2.2 关键任务

“关键性”是指某种功能在系统中的重要性,如果该功能异常将会产生严重后果,这种关键任务必须优先得到运行机会,而且其检测事件、消息队列不能遗漏,特殊情况下控制时间也要及时响应。这种任务得提高优先级来保证运行,而且其任务功能必须尽可能与其他功能剥离,独立成为一个任务,不能因为任务里面的其他功能阻塞或者异常,影响关键功能的实现。


使用特权

评论回复
10
黑心单片机|  楼主 | 2022-5-1 13:43 | 只看该作者
2.2.3 紧迫任务

“紧迫性”是指某种功能必须在规定的时间内得到运行权(及时运行),这类功能有严格的实时性要求。大多数紧迫任务是由异步事件触发的,这种紧迫任务安排在相应的中断服务中,或者优先级尽可能髙的任务。要达到“按时完成”的目的,必须使“紧迫任务”需要的执行时间尽可能短。尽可能剥离“不太紧迫”的操作,只剩下“必须立刻执行”的操作,将被剥离的“不太紧迫”的操作另外封装为一个任务。


使用特权

评论回复
11
黑心单片机|  楼主 | 2022-5-1 13:44 | 只看该作者
2.2.4 数据处理任务

用户应用程序中消耗机时最多的一般是各种数据处理单元,而且通常不只一个,它们分别为不同的功能服务,这些单元划分出来,分别包装成不同的任务。由于这类任务需要消耗较多机时,所以优先级必须较低。多个不同的数据处理任务时,可安排相同的优先级,采用时间片轮转方式运行。


使用特权

评论回复
12
黑心单片机|  楼主 | 2022-5-1 13:44 | 只看该作者
2.2.5 触发条件相同的任务

如果若干功能由相同的事件触发,就可以将这些功能合并为一个任务,从而减少事件分发给多个任务的工作量。如检测到按键中断后要进行相应数据处理、界面显示、外设控制。在任务内部,各功能的执行顺序需要尽可能按规则设定,如果各个功能之间有因果关系,则按因果关系的顺序执行;如果各个功能之间完全独立,则按实时性要求的强弱顺序执行。


使用特权

评论回复
13
黑心单片机|  楼主 | 2022-5-1 13:45 | 只看该作者
2.2.6 运行周期相同的任务

对于需要重复执行的操作,即具有周期性。这类功能组合在一起封装为一个任务,避免一个时间事件触发多个任务,省去事件分发操作与它们之间的通信。


使用特权

评论回复
14
黑心单片机|  楼主 | 2022-5-1 13:46 | 只看该作者
2.2.7 顺序操作任务

如果若干功能按固定顺序进行流水作业,相互之间完全没有"并发性",尽量将这些功能组合为一个任务。


使用特权

评论回复
15
黑心单片机|  楼主 | 2022-5-1 13:46 | 只看该作者
2.3 任务的可调度性分析

任务划分后,需要评估CPU占有率,以便确定这些任务是否可以在操作系统的调度下正常运行。简单的说就是计算在一定周期内,各任务运行的最长时间长和是否小于周期,也可以粗略确认最低优先级的任务(待机任务)是否有周期运行的机会,否则系统的正常运行可能难以保证。

类似生产流水线,如果某个环节超时,整个产线就没法持续运行。这种情况需要提高系统时钟频率或者换硬件方案,或者优化软件算法。


使用特权

评论回复
16
黑心单片机|  楼主 | 2022-5-1 13:48 | 只看该作者
2.4 任务类型

任务设计是整个应用程序的基础,按任务的执行方式可以分为三类:单次执行类、周期性执行类和事件触发类。


使用特权

评论回复
17
黑心单片机|  楼主 | 2022-5-1 13:50 | 只看该作者
2.4.1 单次执行的任务

这类任务创建后只执行一次,执行结束后即自行删除。优点一个功能运行完了,立刻销毁释放资源,但也正是这样,缺点也明显,释放不干净,或者信号量处理不当导致关联任务永久阻塞。仅适合不与其他任务进行通信(除ISR外)的孤立任务。

不过有些RTOS或者二次封装,可以提供工作队列(work queue),多个这样的功能需求,统一到一个固定的任务执行,该固定任务并不销毁,一直存在,接收其他任务的执行请求。类似共享单车,大家都是用完就还,由指定人负责维护执行。


使用特权

评论回复
18
黑心单片机|  楼主 | 2022-5-1 13:50 | 只看该作者
2.4.2 周期性执行的任务

周期性执行的任务创建一次,使用while 1永久存在,执行任务实体后休眠,再按时唤醒或者超时触发,再运行再休眠的循环操作。需要注意休眠时间和任务执行时间比值越大越好,否则时间间隔会累积误差。适用于对周期稳定性要求不高的任务,否则只能采用独立于操作系统的定时中断来触发。


使用特权

评论回复
19
黑心单片机|  楼主 | 2022-5-1 13:51 | 只看该作者
2.4.3 事件触发执行的任务

这类任务实体代码的执行需要等待某种事件的发生,在相关事件发生之前,如获取队列消息或信号量阻塞中,该任务被挂起等待。相关事件发生一次,该任务实体代码就执行一次。这种任务可以与其他任务进行通信,也可被动等待时间触发,一般情况下使用最多。


使用特权

评论回复
20
黑心单片机|  楼主 | 2022-5-1 13:52 | 只看该作者
2.5 任务优先级

不同RTOS任务优先级定义的范围和意义不同,比如有的是数值越小表示优先级越高,有的相反;最大数值的范围也与系统配置有关。任务的优先级安排原则:

中断关联性:与中断服务程序关联的任务应该安排尽可能高的优先级,以便及时处理异步事件,避免第二次中断发生时第一次中断还没有处理完成,从而产生信号丢失现象。

紧迫性:因为紧迫任务对响应时间有严格要求,所有紧迫任务按响应时间要求排序,越紧迫的任务安排的优先级越高。

关键性:任务越关键安排的优先级越髙,以保障其执行机会。

传递性:信息传递的上游任务的优先级高于下游任务的优先级,如信号采集任务的优先级高于数据处理任务的优先级。

快捷性:在前面各项条件相近时,耗时短的任务安排的优先级越高。


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

71

主题

497

帖子

0

粉丝