0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FreeRTOS入门基础知识简析

工程师邓生 来源:OS与AUTOSAR研究 作者:thatway 2022-09-06 18:19 次阅读

FreeRTOS入门-概念介绍

b74b1a88-2b72-11ed-ba43-dac502259ad0.png

开始前,先抛出一个问题:我们为什么需要操作系统?比如你使用计算器进行加减乘除等运算,人按键输入,最后计算器液晶屏显示结果,这只是一个单任务的操作,并且人的速度很慢,计算器大部分时间都在空闲等人。如果一个计算器连出来10个键盘,让10个人同时使用,这个时候就需要一个操作系统来协调,这么看来操作系统首先需要一个调度器,如上图,这样多个任务就可以同时运行了,其次还需要对各个任务需要的硬件资源进行管理,比如硬盘内存网卡,另外还需要支持任务间的通信。如下图,传统操作系统的五大模块:

b75c80d4-2b72-11ed-ba43-dac502259ad0.png


1. 操作系统分类

b781d74e-2b72-11ed-ba43-dac502259ad0.png

操作系统一般可分为三种基本类型,即批处理系统、分时系统和实时系统。另外其他扩展的网络操作系统、分布式操作系统、嵌入式操作系统等。

1.1批处理操作系统

就是把任务汇总到一块,按顺序排好,然后让计算机一个一个处理,这样计算机一次处理一批任务,空闲的时间就比较少了。其实就是把调度的工作让人干了,汇总任务是需要人工做的,没有调度这感觉不是操作系统,这现在已经不存在了,在计算机发展的早期还有。

1.2分时操作系统

b7a77350-2b72-11ed-ba43-dac502259ad0.png


所谓分时技术就是把处理器的运行时间分成很短的时间片,按时间片轮流把处理器分配给各联机作业使用。若某个作业在分配给它的时间片内不能完成其计算,则该作业暂时停止运行,把处理器让给其他作业使用,等待下一轮再继续运行。由于计算机速度很快,作业运行轮转得很快,给每个用户的感觉好像是自己独占一台计算机。例如个人电脑里面的Windows、Linux手机里面的安卓等都是分时操作系统,也是我们说的普通操作系统。

1.3实时操作系统

b7fd2b56-2b72-11ed-ba43-dac502259ad0.png


实时操作系统(RealTimeOperatingSystem,RTOS)是指使计算机能及时响应外部事件的请求在规定的严格时间内完成对该事件的处理,并控制所有实时设备和实时任务协调一致地工作的操作系统。实时操作系统从调度器算法,到断响应系统,到消息传递机制等所有的核心算法时间复杂度都是O(1),它表示系统的响应速度不依赖于系统任务的多少,负载的轻重,而只依赖于优先级的设计,就算当前系统满负荷运行,优先级高的事件发生后,系统还将会在指定的时间内立即响应事件。

这里的时间限制可以分为两种情况:如果某个动作必须绝对地在规定的时刻(或规定的时间范围)发生,则称为硬实时系统。例如,飞行器的飞行自动控制系统,这类系统必须提供绝对保证,让某个特定的动作在规定的时间内完成。如果能够接受偶尔违反时间规定,并且不会引起任何永久性的损害,则称为软实时系统,如飞机订票系统、银行管理系统。

我们AUTOSAR CP里面的RTOS就需要硬实时的操作系统。因为对于汽车的控制是需要及时的,不然可能造成事故,正所谓:人命关天

1.4其他操作系统

随着计算机体系结构的发展,又出现了许多种操作系统,它们是嵌人式操作系统、个人操作系统、网络操作系统和分布式操作系统。

网络操作系统把计算机网络中的各台计算机有机地结合起来,提供一种统一、经济而有效的使用各台计算机的方法,实现各个计算机之间的互相传送数据。

分布式计算机系统是由多台计算机组成并满足下列条件的系统:系统中任意两台计算机通过通信方式交换信息;系统中的每一台计算机都具有同等的地位,即没有主机也没有从机;每台计算机上的资源为所有用户共享;系统中的任意若千台计算机都可以构成一个子系统,并且还能重构;任何工作都可以分布在几台计算机上,由它们并行工作、协同完成。

最后汇总一个图:

b8246a68-2b72-11ed-ba43-dac502259ad0.png

2.OSEK OS

OSEK OS是一个为满足汽车电子可靠性、实时性、成本敏感性等需求而打造的实时单核操作系统(RTAOS)。具备以下基本特性以及基本系统服务:

b847e290-2b72-11ed-ba43-dac502259ad0.png

AUTOSAR OS是基于OSEK OS继承发展而来,所以上述的OSEK OS的基本特点在AUTOSAR OS都能够得到满足,所以AUTOSAR OS是向后兼容的,也就意味着在OSEK OS上能够运行的应用程序同样也可以在AUTOSAR OS上运行。

AUTOSAR OS继承OSEK OS,在OSEK OS的基础上又特别明确了AUTOSAR OS至少需要提供的系统服务如下:

基于优先级的调度;

及时的中断处理的能力;

中断优先级必定高于task;

通过StartOS() 与StartOSHook()来创建启动接口

通过ShutdownOS() 与ShutdownOSHook来创建关机接口;

能够在OSEK OS中跑的APP自然也能够在AUTOSAR OS运行,但同时Autosar os也同时限制了OSEK OS的一些基本使用;

3.AUTOSAROS

3.1 AUTOSAR OS基本对象

AUTOSAR OS总共包含以下6大基本对象:Counter,Alarm,Schedule Table,Task,ISRs,Resource

b875f48c-2b72-11ed-ba43-dac502259ad0.png

这6个基本对象必须归属于一个OS Application,可以简单理解为OS Application是上述6大基本对象的容器,而归属于同一OS Application的基本对象则可以互相访问,来自其他OSApplication的基本对象则需要通过配置来限制性访问。

b89ca384-2b72-11ed-ba43-dac502259ad0.png

3.2 Task

大家在面试的时候被经常问到的一个问题就是进程和线程的区别,最典型的回答就是进程是系统资源分配的最小单位,比如分配了内存地址空间、寄存器、独占的虚拟CPU等,线程是CPU调度的最小单位,线程享用父进程的系统资源,但是自己又可以异步的去执行。

可惜在RTOS里面由于要求实时性,这种异步执行需要等待的机制需要被砍掉,首先没有了线程的概念。那么进程就是对应RTOS里面的Application,并且这个Application的资源都是独占的,不进程一样跟其他进程共享的。例如独占一个真实的CPU,这里也叫做MCU,因为性能没那么强悍,但是很稳定。有例如独占一块真实的内存区域,也就是说其资源是启动前就静态分配好的,不跟其他Application共享的,这里就是静态系统的概念。

而传统操作系统里面的进程就是动态系统,动态系统资源共享降低了实时性和安全性来提升资源利用率,在AUTOSAR AP中的微内核OS中会用到,主要支持一些对安全实时性要求不高的应用。

接下来说本章节的TASK,可以理解为一个for循环,顺序一遍一遍的去执行的列表中的任务。这些任务组成了一个Application。

AUTOSAR OS中存在两种任务:

基本任务(Basic Task)和扩展任务(Extended Task)。

基本任务则存在以下三种状态:

运行状态(Running):处于运行状态的任务可能被高优先级任务或者中断抢占从而进入就绪状态,且同一Core中任何时刻只会存在一个任务处于运行状态,任务运行结束后则将自己挂起进入阻塞状态;

就绪状态(Ready):处于就绪状态的任务由调度器决定是否启动进入运行状态,且该状态时任务切换至运行状态的前提;

阻塞状态(Suspend):处于阻塞状态的任务是被动的,可以由API函数或Alarm激活进入就绪状态;

扩展任务与之相比,则多了一个等待状态(Waiting),解释如下:

等待状态(Waiting):当任务的运行需要等待某一或某些事件被置位时,任务进入就绪状态。

基本任务与扩展任务的状态机切换如下图所示:

b8c3cacc-2b72-11ed-ba43-dac502259ad0.png

基本任务的代码示例如下:

pYYBAGMXHw-AfNZPAAAof6Em-KQ194.jpg

扩展任务的代码示例如下

pYYBAGMXHwaAK9C_AABAb826cUw932.jpg

Task调度策略

AUTOSAR OS可根据各个任务的可抢占属性配置,来提供不同的调度策略,调度策略可分为以下三种:

完全抢占式:OS所有任务均是可抢占类型;

非抢占式:OS中所有任务均是不可抢占的;

混合抢占式:OS部分任务是可抢占类型,部分任务是不可抢占类型;

3.3 Counter

Counter概念的引入是为了实现对硬件计数器以及软件计数器的管理,为Alarm与Schedule table提供支持。即多个Alarm可以共用一个Counter,一个Schedule Table只能由一个Counter来驱动。Counter按照AUTOSAR定义可分为以下两种:

Hardware Counter:该Counter的增加由硬件外设驱动,如Gpt或者timer等;

Software Counter:该Counter的增加通过调用API函数IncrementCounter来实现,且每次只能增加1;

基本原则:优先使用Hardware Counter,因为可以根据Task的激活状况来减少无意义的时钟中断;

3.4 Alarm

在计数器的基础上,AUTOSAR OS为应用软件提供了闹钟机制,多个闹钟可以连接一个Counter,当到达Alarm所对应的计数器设定值时,则可以激活一个任务,设定一个event,调用callback或者增加计数器等功能,但只能是一对一。

不能像Schedule Table那样,能够在Expiry point同时设定多个Task或者多个Event,这也是为什么引入Schedule Table的原因。

一个软件Counter +多个Alarm队列就可以实现静态定义的任务激活机制。但随着Schedule Table的引入,因此一般建议能用Schedule Table就不要用Alarm。

3.5 Schedule Table

如上Alarm所述,当计数器的计数值依次达到各个Alarm设定的计数值时,各个Alarm被触发,但很难保证各个Alarm有特定的时间间隔,且每个Alarm只能激活一个Task或者Event,所以需要多个Alarm来协作实现在同一时刻触发多个Task或者Event,因此ScheduleTable应运而生!

Schedule Table会定义一系列终结点(Expiry Point),且每个调度表都有一个以Tick为单位的持续时间(Duration)。每个终结点则是以Tick为单位的距离起始点的偏移量(Offset),在每个终结点可以实现多个Task或者Event的设置。

与报警器类似,一个调度表只能由一个Counter驱动,同时调度表存在以下两种调度方式:

单次执行(Single-Shot):调度表启动之后 只运行一次,到达调度表终点则终止,即每个终结点只运行一次;

循环执行(Repeating):调度表启动后可反复执行,到达调度表终点后重头开始执行,则每个终结点会被周期性的执行,一般情况下激活任务采用此模式。

如下图10所示,较为清晰了描述了调度表中Expiry Point与Task,Event激活之间的时序关系。

b8eaa87c-2b72-11ed-ba43-dac502259ad0.png

如下图所示,则较为清晰的表现了Counter,Schedule Table以及Alarm三者之间的关系。

b9110f44-2b72-11ed-ba43-dac502259ad0.png

3.6 ISRs

在AUTOSAR中定义了两类中断服务程序(Interrupt Service Routine)为:

一类中断(CategoryI)与二类中断(Category)。

两者之间的区别定义如下:

Categoty I:此类中断服务程序不能够使用OS提供的系统服务,当中断执行完成之后则会重新跳转至产生中断的地方继续执行,不会影响到任务的执行,因此占用系统资源较少。

Category II:该类中断则可以调用OS系统服务,如激活任务或者设置事件等。

在AUTOSAR OS中,中断的优先级始终高于任务的优先级,即最低优先级的中断都可以打断最高优先级的任务,即使该任务不可抢占也不例外。因此,中断服务子程序的执行时间不宜过长,否则会影响到整个系统的实时性。

3.7 Resource Management

Resouce作为OS调度过程中一个十分重要的对象,Resource管理就显得尤为重要。资源管理就是为了协调具有不同优先级的多个任务或者中断对共享内存(如内存或者硬件等)的并发访问。

不过幸运的是AUTOSAR OS采用上述的优先级天花板模式来避免任务优先级反转以及死锁问题的发生,即资源的上限优先级必须高于所有该资源的任务以及中断的优先级,但是应低于不访问该资源的任务的最低优先级。

其中为了保护共享资源而提出的锁机制-自旋锁(Spin Lock)。该自旋锁一般用于多核操作系统解决资源互斥的问题。当内核控制必须访问共享数据结构或进入临界区是,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋所的保持者已经释放了该锁,从而达到某共享资源的互斥作用。

4. AS代码中的RTOS

AS代码:里面是有RTOS的,是作者自己写的一个叫做askar,同时里面还有FreeRTOS等十个左右的RTOS,下次文章再介绍。

b9352442-2b72-11ed-ba43-dac502259ad0.png

后记:

最比较忙近停更了一段时间,但是公众号的事一直在心里。9月是开学季,也是学习的好时节,接下来再接再厉,先写一系列OS入门的文章,直接介绍五六种OS的入门资料,绝对够猛够有料,敬请期待。


审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4981

    文章

    18274

    浏览量

    288361
  • 操作系统
    +关注

    关注

    37

    文章

    6280

    浏览量

    121870
  • FreeRTOS
    +关注

    关注

    12

    文章

    473

    浏览量

    61347

原文标题:FreeRTOS入门-概念介绍

文章出处:【微信号:OS与AUTOSAR研究,微信公众号:OS与AUTOSAR研究】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    射频与微波基础知识

    射频与微波基础知识
    的头像 发表于 01-16 10:05 257次阅读
    射频与微波<b class='flag-5'>基础知识</b>

    电气技术基础知识

    电气技术基础知识
    的头像 发表于 12-14 09:11 739次阅读
    电气技术<b class='flag-5'>基础知识</b>

    电子元器件的基础知识

    电子元器件的基础知识
    的头像 发表于 12-04 10:42 2575次阅读
    电子元器件的<b class='flag-5'>基础知识</b>

    sql数据库入门基础知识

    数据库开发人员或数据库管理员的重要基础。本文将介绍SQL的入门基础知识,详细介绍SQL的语法、常用操作以及一些实用技巧。 一、SQL的基本概念和语法 数据库和表格:数据库是一个存储数据的容器,而表格是数据库内部的一种数据结构,类似于Excel表格。每个表格都由行和列组成
    的头像 发表于 11-23 14:24 1115次阅读

    电工入门必备基础知识大全

    电工共分五个级别。技能鉴定为:初级技能(5级资格)、中级技能(4级资格)、高级技能(3级资格)、技师(2级资格)、高级技师(1级资格)。今天小编要讲的是电工入门必备基础知识大全。
    的头像 发表于 09-09 11:34 7442次阅读
    电工<b class='flag-5'>入门</b>必备<b class='flag-5'>基础知识</b>大全

    电路基础知识总结

    电路基础知识介绍
    的头像 发表于 08-30 09:49 3688次阅读
    电路<b class='flag-5'>基础知识</b>总结

    运放-2. 基础知识

    运放基础知识
    的头像 发表于 08-18 10:59 1817次阅读
    运放-2. <b class='flag-5'>基础知识</b>

    无功补偿原理基础知识详解

    无功补偿原理基础知识详解
    的头像 发表于 08-11 09:48 525次阅读
    无功补偿原理<b class='flag-5'>基础知识</b>详解

    EMC基础知识讲解解析

    EMC基础知识分享
    发表于 06-30 15:37 10次下载

    讲解电路的基础知识

    下文总结了电路基础知识点。
    的头像 发表于 06-27 17:12 1069次阅读
    讲解电路的<b class='flag-5'>基础知识</b>

    C语言基础知识(5)--循环语句

    C语言基础知识(5)--循环语句
    的头像 发表于 06-15 10:18 1380次阅读
    C语言<b class='flag-5'>基础知识</b>(5)--循环语句

    被动元件基础知识

    被动元器件基础知识介绍
    发表于 06-02 17:12 12次下载

    关于MOS管的基础知识

    文章主要是讲一下关于MOS管的基础知识,例如:MOS管工作原理、MOS管封装等知识
    发表于 05-23 10:09 947次阅读
    关于MOS管的<b class='flag-5'>基础知识</b>

    MOS管的基础知识介绍

    文章主要是讲一下关于mos管的基础知识,例如:mos管工作原理、mos管封装等知识
    的头像 发表于 05-18 10:38 2004次阅读
    MOS管的<b class='flag-5'>基础知识</b>介绍

    STM32中C语言的基础知识

    C语言是单片机开发中的必备基础知识,本文列举了部分STM32学习中比较常见的一些C语言基础知识,希望能对大家有所帮助。
    的头像 发表于 04-27 17:42 991次阅读
    STM32中C语言的<b class='flag-5'>基础知识</b>