当前位置: 首页 > news >正文

[AutoSar]BSW_OS 02 Autosar OS_STACK

目录

  • 关键词
  • 平台说明
  • 一、 task stack
    • 1.1 Task stack 的共享
    • 1.2 task stack 的实际使用大小
  • 二、ISR stack
    • 2.1 ISR stack 的共享
  • 三、Single-stack(单一栈)和multi-stack (多栈)策略
    • 3.1 Single-stack
    • 3.2 multi-stack
  • 四、Stack Check Strategy
    • 4.1Software Stack Check
      • 4.1.1 使用限制
      • 4.1.2配置
      • 4.1.3 检查的调用
    • 4.2 Stack supervision by memory protection unit (MPU)
      • 4.2.1 使用限制
      • 4.2.2 检查的调用
  • 五、Stack Usage Measurement
    • 5.1 配置
    • 5.2 API

  

关键词

嵌入式、C语言、autosar、OS、BSW

平台说明

项目Value
OSautosar OS
autosar厂商vector ,ETAS
芯片厂商TI
编程语言C,C++
编译器HighTec (GCC)

在这里插入图片描述
>>>>>回到总目录<<<<<<

一、 task stack

1.1 Task stack 的共享

  为了节约RAM 的使用,TASK间可以共享使用stack,但是要满足以下条件:
1.task 类型必须为basic task。
2.task 的优先级必须相同。
3.task必须配置为非抢占式的且勾选上OsTaskStackSharing
在这里插入图片描述
4.task不能调用OS service Schedule()。
5.共享stack 的task必须在同一个核内。

1.2 task stack 的实际使用大小

  vector 工具链中,一般每个task单独使用一个stack。在task 从run进入ready或者waiting的时候,任务的等待事件栈上下文,包括操作系统上下文,本地数据,函数调用的堆栈帧等,被保存到内部操作系统缓冲区中,他们的总大小就是task stack 的实际使用大小。

二、ISR stack

2.1 ISR stack 的共享

  为了节约RAM 的使用,ISR间可以共享使用stack,但是要满足以下条件:
1.ISR必须为2类中断
2.ISR必须在同一个核内。
3.OsIsrEnableNesting必须配置为FALSE。
在这里插入图片描述
4.ISR必须为同一优先级。

三、Single-stack(单一栈)和multi-stack (多栈)策略

  此策略出现在ETAS 的实现方式中,Vector没有此策略。

3.1 Single-stack

  所谓的单一栈指的是所有的TASK都使用了同一个栈,当task被抢占的时候栈是被叠加的,栈的实际大小会被一直增加。所以在配置stack大小的时候需要考虑到低优先级被抢占的情况避免栈的上溢,OS会以最糟糕的抢占情况下去计算stack。下图为抢占式的task。
在这里插入图片描述
而非抢占式的task的栈大小仅为当前task’的栈大小。如下图所示。
在这里插入图片描述

3.2 multi-stack

  多栈模式指的是每一个task有单独的stack。即使使用多个物理堆栈,RTA-OS仍然提供单堆栈体系结构的好处——当任务和/或isr共享一个优先级时,每个物理堆栈上所需的堆栈空间可以被覆盖。但是,要使堆栈分配正常工作,您需要指定每个堆栈上所需的空间。如果您配置的目标需要此信息,RTA-OS将要求您提供多个堆栈值。如下图所示:
在这里插入图片描述
在这里插入图片描述

四、Stack Check Strategy

  不管是何种OS,都应该检测和保护stack避免其溢出。在MICROSAR OS中提供了如下策略:

Scalability ClassStack check strategy
SC1 / SC2Software stack check
SC3 / SC4Stack supervision by memory protection unit (MPU)

什么是Scalability Class 见 [AutoSar]BSW_OS 01 Autosar OS入门第四节。

4.1Software Stack Check

  初始化的时候在每一个stack 的最后填充0xAAAAAAAA(以32位单片机为例),当stack切换的时候检测最后这个elment是否被改变来判定stack的溢出。

4.1.1 使用限制

1.适用于SC1 SC2,如果禁用了MPU,SC3和SC4也能用Software Stack Check。
2.无法检测到所有的 栈溢出,因为有的时候相邻的stack已经被覆写了,但是刚好上一个stack 的最后一个element
没被改变。
3.如果内存已经被破坏,Software Stack Check 无法检测stack 溢出。

4.1.2配置

  在SC1 SC2 scalability模式下 OsStackMonitoring = true。
在这里插入图片描述

4.1.3 检查的调用

   如4.1.2所述,一旦激活了该检查机制,OS会自动的检查每个stack,一旦发现溢出则会转入shutdown,如果用户配置了ShutdownHook,在系统关闭前会调用此hook。

4.2 Stack supervision by memory protection unit (MPU)

   在OS运行的整个过程中,活动的stack都会交由MPU监控,因此OS会保留一个专用的MPU区域用于在OS切换的时候进行覆写。由于MPU的机制stack不会越界访问,所以stack溢出的情况不会发生,但是内存冲突的情况是可能发生的,一旦检测到内存冲突,会立即调用ProtectionHook(),用户可以在ProtectionHook()中决定如何进行下一步处理。

4.2.1 使用限制

   仅仅适用于SC3 SC4.

4.2.2 检查的调用

   OS会自动初始化一个MPU专有区域来监督stack。如何配置额外的MPU区域和区段链接将在 MPU章节详细讲解。

五、Stack Usage Measurement

   我们可以在OS启动后的任一地方调用API来获取当前stack的占用大小。

5.1 配置

OsStackUsageMeasurement = true
在这里插入图片描述

5.2 API

在这里插入图片描述

>>>>>回到总目录<<<<<<

相关文章:

  • 介绍 TensorFlow 的基本概念和使用场景
  • 高光谱分类论文解读分享之HybridSN:基于 3-D–2-D CNN 的高光谱分类(经典回顾)
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • 大数据开发之Kafka(概述、快速入门、生产者)
  • 使用 ClassFinal 对SpringBoot jar加密加固并进行机器绑定
  • 【Vue3】3-1 : 章节介绍 - Vue3组件应用及单文件组件
  • 前端常见面试题之防抖、节流、xss、xsrf
  • 烟火检测/区域人流统计/AI智能分析网关V4如何配置通道?
  • 代码随想录算法训练营第二十四天| 77. 组合
  • 职务岗位的概念澄清及应用
  • 慢查询定位
  • 【ubuntu】docker中如何ping其他ip或外网
  • flutter 播放SVGA动图
  • 微服务研发时,多个人共同调试一个服务,在nacos会启动多个实例,导致请求服务接口时在你和别人之间来回轮询问题处理
  • 湖(岛屿)
  • CEF与代理
  • Druid 在有赞的实践
  • iOS编译提示和导航提示
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • java概述
  • JWT究竟是什么呢?
  • Linux中的硬链接与软链接
  • php ci框架整合银盛支付
  • php的插入排序,通过双层for循环
  • python_bomb----数据类型总结
  • React-Native - 收藏集 - 掘金
  • scrapy学习之路4(itemloder的使用)
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • vue学习系列(二)vue-cli
  • 阿里云Kubernetes容器服务上体验Knative
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 简单数学运算程序(不定期更新)
  • 京东美团研发面经
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 码农张的Bug人生 - 初来乍到
  • 使用Swoole加速Laravel(正式环境中)
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 正则与JS中的正则
  • 大数据全解:定义、价值及挑战
  • ​用户画像从0到100的构建思路
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • $(function(){})与(function($){....})(jQuery)的区别
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (6)STL算法之转换
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (转)jQuery 基础
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)原始图像数据和PDF中的图像数据
  • ***利用Ms05002溢出找“肉鸡
  • .NET CLR基本术语
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008