前言
在<<符合AUTOSAR标准的RTA-OS --Resources详解>>一文中我们介绍了AUTOSAR Resource的概念及其配置,但是站在开发者的角度来讲,Os Resource这个概念还是很抽象,Resource到底是个在代码中具体是个什么了?本文就来就详细介绍Os Resource的具体实现原理,希望能理解以下问题:
问题1:Os Resource在代码中的具体实现是什么?
问题2:一个Task获得Os Resource后,其他Task还能被激活进入到Running状态么?
问题3:一个Task获得Os Resource后,ECU还能产生中断么?
环境
AUTOSAR工具链:Vector
Hardware Platform: Infineon Tricore
Build Tools: GHS
注:本文章引用了一些第三方工具和文档,若有侵权,请联系作者删除!
正文
1.Resource主要结论回顾
1.1 Resource使用场景
OS items |
适用场景 |
Resource |
实现核内临界区数据的一致性保护 |
Spinlock |
实现核间(多核)临界区数据的一致性保护 |
1.2 Resource实现临界区保护原理
Resource分布场景 |
临界区保护实现原理 |
Resource只被Tasks引用 |
获取Resource的Task的优先级被提高到最高优先级(优先级天花板规则),其他Task无法抢占。在释放Resource后Task回到原来的优先级,Ready状态下被阻塞的其他高优先级Task可以再次完成抢占。 |
Resource只被ISRs引用 |
获取Resource的ISR的优先级会被提高到所有引用同一个Resource的ISR中的最高优先级,其他引用同一个Resource的ISR是无法产生的。释放Resource后回到原来的优先级,其他引用同一个Resource的ISR可以产生。 |
Resource既被Task引用又被ISR引用 |
Case 1: Task先获取到Resource. 获取到Resource的Task会将当前Task提高到最高优先级,同时将中断优先级提高到引用该Resource的ISR中最高优先级(引用该Resource的ISR无法产生)。释放Resource后Task优先级核ISR优先级都恢复。 Case 2: ISR先获取到Resource. 因为Task无法打断(抢占)ISR.所以只要将获取到Resource的ISR的同时将中断优先级提高到引用该Resource的ISR中最高优先级。释放Resource后ISR优先级恢复。 |
问题:在中断产生和结束的时候中断优先级会被硬件自动设置和恢复(恢复到默认最低优先级),那么在Task中获取Resource的时候(没有产生中断),如何设置中断优先级来防止中断产生?
原文始发于微信公众号(汽车电子嵌入式):【OS】AUTOSAR OS Resource实现原理
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论