AUTOSAR OsTask切换原理

admin 2024年9月2日08:55:19评论73 views字数 1981阅读6分36秒阅读模式

前言

在《【OS】AUTOSAR Os是如何启动第一个Task的》一文和《【OS】AUTOSAR OS如何实现Task抢占》一文中都涉及了Task的切换过程,但是对于Task切换时的具体细节没有讲清楚,比如:

问题1:不同的Task使用独立的栈,Task切换的时候是如何进行不同Task的栈切换的了?

问题2CSA存储上下文信息,栈存储的也是上下文的信息,二者有啥关系?

在《英飞凌Aurix2G TC3XX 芯片内核详解(二)——TriCore上下文切换及CSA机制》一文中我们介绍了TriCore上下文切换及CSA机制,核心内容如下:

1)一个核上只有一个Task任务在Running时,函数调用、中断处理程序、异常处理程序会涉及到上下文的切换。

2)一个核上只有一个Task任务在Running时,函数调用、中断处理程序、异常处理程序的上下文的切换都又硬件实现,不用用户写代码去控制上下文切换。

3)一个核上只有一个Task任务在Running时,函数调用会对应汇编语言的call指令,call指令会让硬件自动保存upper context. 也就是说,TricoreFCX寄存器指向的Free Context List的一个CSA会用来保存upper context, 然后这个CSA会逻辑上挂载到PCX寄存器指向的Previous Context List上,也就是从下图1切换到下图2.进入中断处理程序和异常处理程序会由硬件自动保存upper context, 同样产生下图1切换到下图2CSA切换.

 

AUTOSAR OsTask切换原理

1Call指令调用前

AUTOSAR OsTask切换原理

2Call指令调用后

4)一个核上只有一个Task任务在Running时,函数调用退出时会对应汇编语言的RET指令,中断和异常(Trap)退出对应RFE指令,RETRFE指令都会让硬件恢复(Restoreupper context. 也就是从上图2恢复到上图1.

AUTOSAR OsTask切换原理

 5)一个核上只有一个Task任务在Running时,对于Tricore用户而言只要在startup中完成CSA的初始化即可(所有CSA逻辑上挂载到Previous Context ListFree Context List),上下文的切换都有硬件自动实现。

 

那么问题来了,Autosar OS中涉及到多Task,每个Task都有自己的函数调用栈,Task之间还有切换及抢占的问题,CSA还能全部由自动自动实现管理吗?显然是不可能的,那就需要Os来实现CSA的管理。

不过,说来惭愧,Autosar OS对于CSA的管理实在过于复杂,其CSA的动态管理逻辑通过调试也无法总结出来。这里仅介绍OS Task初始化是关于CSA的核心操作Task切换时关于CSA的核心操作,明白OS如何通过底层指令实现软件切换上下文,(至于CSA的动态管理逻辑,感兴趣的可以自己去研究下)。

目录

AUTOSAR OsTask切换原理

环境

AUTOSAR工具链:Vector

Hardware Platform: Infineon Tricore

Build Tools: GHS



注:本文章引用了一些第三方工具和文档,若有侵权,请联系作者删除!

正文

1.OS管理CSA依赖的底层指令

1.1. SVLCX指令

 

AUTOSAR OsTask切换原理


执行SVLCX指令后,硬件会将lower context内容保存到FCX寄存器指向的CSA内存区,然后这块CSA会在逻辑上从FCX寄存器的Free Context List中剔除,挂载到PCXI寄存器指向的Previous Context List.


值得注意的是,Autosar OS会利用SVLCX指令从Free Context List中拿到一块CSA内存(里面保存了Lower Context, 被挂载到Previous Context List中),然后Autosar OS会把当前TaskUpper Context写入到这块CSA中(覆盖原来的Lower Context)。


1.2. RFE指令

AUTOSAR OsTask切换原理


RFE指令用于从中断处理函数和异常处理函数中返回,执行RFE指令后回先后执行以下两个动作:

AUTOSAR OsTask切换原理

1第一步:中断/异常返回到此刻A [11] 寄存器(Lr寄存器)保存的地址处(PC指针指向A[11]寄存器指向的地址)。


1第二步:恢复PCXI寄存器指向的CSAupper context内容,也就是把PCXI指向的CSA中保存的A11, A10, PSW等寄存器内容写回到All, A10, PSW寄存器。

注意:这个地方一定要理解的是,执行RFE指令后,先返回(return)到此刻A[11]寄存器指向的地址处,再恢复upper context. 因为恢复upper context的时候回把CSA保存的A[11]寄存器值写回到A[11]寄存器,如果顺序理解错了,那返回的地址就错了。


Autosar OS最后也是使用RFE指令切换Task.


原文始发于微信公众号(汽车电子嵌入式):AUTOSAR OsTask切换原理

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月2日08:55:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   AUTOSAR OsTask切换原理https://cn-sec.com/archives/3119710.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息