版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
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窗口就会有解释(英文的,可以找个翻译工具)。具体配置太多了,我们将在下节实验课中讲解其基本配置,不常用的还是留到深入篇中吧
附:返回总目录的传送门如下
->返回总目录<-