AutoSAR系列讲解(实践篇)7.6-OS原理进阶(下)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/xyfx_fhw/article/details/102667295

OS原理进阶(下)

->返回总目录<-

一、OS运行实例

我们上节课讲述了OS的一些理论上的内容,下面我们还是用一个例子来消化一下:
下面图中的例子包含了我们上一节课中所讲的所有内容,这是一个流程图,反应了从OS启动开始的运行流程。大家可以自己先看看图,自己分析一下该流程,然后博主将详细讲解,大家对照一下看看自己的分析是否有误
在这里插入图片描述

1、启动OS

红色线路表示当前流程运行中的地方。在启动OS之后,会触发三个能AutoStart的Task(Task可以配置成自启动、Alarm周期触发或者手动触发等)。

  • BtInit: 先运行Initlalization代码;然后由于BtInit和BtCyclic跨核,这里就使用了IOC跨核传输,将被传量放入IOC中,等待其他核读取;最后Terminate结束
  • EtReceive: 先运行到Application Code2处;然后就开始等待事件1的触发
  • EtTransmit: 先运行到Application Code4处;然后获取OSResource数据,并且一直占用

然后到此,如果没有Alarm和中断的话,能运行的代码就运行结束了
在这里插入图片描述

2、Alarm周期

接着上面的继续,这里突然来了一个Alarm,它会先触发BtCyclic和设置一个事件Event1

  • BtCyclic(左): 先运行Application Code1;然后读取在IOC中的内容;然后Terminate
  • EtReceive: 由于等待的Event1事件到来了,那么就继续执行下面的代码,这里的代码是触发右边的BtCyclic代码
    在这里插入图片描述
    由于EtReceive触发了BtCyclic,那么如下图,将继续运行
  • BtCyclic(右): 先执行Application Code3;然后设置Event2,这时就会触发EtTeansmit继续运行;然后获取OSResource,但是由于EtTeansmit一直占用该资源未释放,所以获取失败;然后Terminate
  • EtTransmit: 在被BtCyclic触发事件Event2之后,就会继续运行Application Code5的内容
    在这里插入图片描述
    以上就是Alarm之后,能够执行的全部内容了

3、中断事件

在这里插入图片描述
然后接着上面继续分析,这时来了中断。

  • ISR Cat2: 先获取OSResource的资源,同样会获取失败,因为被占用未释放;然后设置事件Event3,但是由于EtTransmit已经执行进入Application Code5中了,没有在等待状态,所以本次触发没有效果
  • EtTransmit: 继续执行Application Code5的内容

其实上面只是一种情况,大家可以想想,如果中断比Alarm先到的话,运行过程又会是什么样呢?还有,假如EtTransmit还未执行到GetResource就来了中断,那么OSResource会被谁占用呢?这些问题在看懂之后都很简单,就留给大家思考了。

二、Cfg配置简述

在DaVinci Cfg中对OS的配置就如下图所示,右边的各个详细选项(就是All下面那些)相信看了之前的介绍,大家都知道是怎么回事了,还有个别没讲的都是很简单或者不常用或者高级用法(例如最后的内存保护)。大家想知道是干啥的可以点击该选项,下面的Properties->Description窗口就会有解释(英文的,可以找个翻译工具)。具体配置太多了,我们将在下节实验课中讲解其基本配置,不常用的还是留到深入篇中吧
在这里插入图片描述

附:返回总目录的传送门如下
->返回总目录<-

猜你喜欢

转载自blog.csdn.net/xyfx_fhw/article/details/102667295