[AutoSar]BSW_OS 02 Autosar OS_STACK

news2024/11/25 5:28:52

目录

  • 关键词
  • 平台说明
  • 一、 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

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1393825.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从 `go build` 到 `go test`:Go 语言命令行工具全解析

从 go build 到 go test&#xff1a;Go 语言命令行工具全解析 引言go build 命令详解go test 的运用其他重要的 Go 命令结论 引言 在当今的软件开发领域&#xff0c;Go 语言以其简洁、高效和强大的并发处理能力受到广泛的欢迎。作为一门现代编程语言&#xff0c;Go 不仅拥有丰…

2024Navicat最新下载安装教程

下载 下载链接&#xff1a;链接 选择自己想下载的&#xff0c;我下载的是Navicat Premium 16 点击直接下载 安装 下载好后双击打开安装&#xff0c;下一步 同意&#xff0c;下一步 选择安装位置&#xff0c;下一步 安装 安装完成&#xff0c;安装完成后先不要打开 …

OSI七层协议和五层协议

【 1 】互联网协议交互的基础 硬件设备 光缆 【 2 】OSI七层协议 物理层&#xff08;Physical Layer&#xff09;&#xff1a;负责传输比特流&#xff08;0和1&#xff09;以及物理连接的建立和维护。数据链路层&#xff08;Data Link Layer&#xff09;&#xff1a;提供可…

eNSP学习—— 终端跨二层交换机连接三层网关设备进行通信

组网需求&#xff1a; HOSTA 和 HOSTB、HOSTC 和 HOSTD 分属研发部和质量部&#xff0c;两部门通过一台二层交换 机互联&#xff0c;两部门有业务往来&#xff0c;需要二层隔离&#xff0c;三层通信。 配置思路 &#xff1a; 1.将 SwitchB 连接终端 HOST 的接口加入 vlan&…

vue2+webpack升级vue3+vite,报错Cannot read properties of null (reading ‘isCE‘)

同学们可以私信我加入学习群&#xff01; 正文开始 前言问题分析解决总结 前言 系列文章&#xff1a;vue2webpack升级vue3vite&#xff0c;修改插件兼容性bug 前面的文章主要是介绍&#xff0c;在升级初始阶段遇到的一些显而易见的兼容性问题和bug。随着项目迭代的不断深入&a…

220v变5vic-220v变直流5v小封装220MA电流

220v变5v ic-220v变直流5v小封装220MA电流&#xff0c;交流或者直流输入都可以&#xff0c;交流输入的时候输入端需要先整流&#xff08;半波、全波都可以&#xff09;&#xff0c;40v~265v输入&#xff0c;经过220v变5v ic芯片电路&#xff0c;稳定输出5v200MA电流&#xff0c…

配置https---Nginx认证ssl证书

nginx作为前端的负载均衡服务器已经很熟悉了,项目需要使用https安全的时候就需要认证证书了 dockerweb管理工具 Portainer 如果对docker不那么熟悉可以使用docker 第三方管理端 docker run -d --restartalways --name portainer -p 9000:9000 -v /var/run/docker.sock:/var/…

【机组】通用寄存器单元实验的解密与实战

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《机组 | 模块单元实验》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 ​ 目录 &#x1f33a;一、 实验目…

Spring MVC——Spring MVC(2)

1.参数接收 Springmvc中&#xff0c;接收页面提交的数据是通过方法形参来接收&#xff1a; 处理器适配器调用springmvc使用反射将前端提交的参数传递给controller方法的形参 springmvc接收的参数都是String类型&#xff0c;所以spirngmvc提供了很多converter&#xff08;转换…

activemq 消息转发流程

【金山文档】 未命名文件(32) https://kdocs.cn/l/cikIMdusf0jD 我们在系统中新部署一个mq&#xff0c;新增一个python程序去进行消息的转发

一文了解GeoTrust SSL证书

在当今互联网的高度连接世界中&#xff0c;确保网站安全性至关重要。SSL证书是保护网站和用户数据的关键组成部分。GeoTrust证书在SSL证书市场上享有盛誉&#xff0c;被许多网站所有者和企业所信赖。JoySSL将深入探讨GeoTrust证书的特点&#xff0c;帮助大家了解该品牌并做出更…

全球光伏知名企业-晶科能源联合泛微采知连,建立文控管理平台

晶科能源股份有限公司&#xff08;简称“晶科能源”&#xff09;是一家全球知名、极具创新力的太阳能科技企业。 &#xff08;图片素材来自晶科能源官网&#xff09; 公司战略性布局光伏产业链核心环节&#xff0c;聚焦光伏产品一体化研发制造和清洁能源整体解决方案提供&…

2024最有发展潜力的代理项目!格行随身wifi代理项目分析测评,轻资产靠谱创业项目推荐

最近很多网友都有创业的想法&#xff0c;身边创业的朋友也不在少数&#xff0c;当然有成功的&#xff0c;也有亏的血本无归的。最近网上也有很多适合新手的创业或代理项目&#xff0c;什么单身经济啊&#xff0c;大健康啊还有创业圈一直在讨论的随身WiFi代理等。当然一些创投圈…

23.实战演练--个人主页

<?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"><applicationandroid:allowBackup"true"an…

06-python数据容器-set(集合)入门基础操作

集合的定义 """ 演示数据容器集合的使用 """ #定义集合 my_set{"计算机","0854","考研上岸","计算机","0854","考研上岸","计算机","0854","考研上岸&qu…

IPv6自动隧道---6to4隧道

IPv6 over IPv4自动隧道特点 由于IPv4兼容IPv6隧道要求每一个主机都要有一个合法的IP地址,而且通讯的主机要支持双栈、支持IPv4兼容IPv6隧道,不适合大面积部署。目前该技术已经被6to4隧道所代替。 6to4隧道 集手动隧道和自动隧道的优点于一身,提出6to4的目的是为IPv4网络…

4种方法用Python批量实现多Excel多Sheet合并

目录 方法一&#xff1a;使用pandas库 方法二&#xff1a;使用openpyxl库 方法三&#xff1a;使用xlrd和xlwt库 方法四&#xff1a;使用os和glob库 在数据处理中&#xff0c;经常需要将多个Excel文件中的多个工作表进行合并。以下介绍了4种方法&#xff0c;使用Python批量实…

Failed to load class org.slf4j.impl.StaticLoggerBinder

Failed to load class org.slf4j.impl.StaticLoggerBinder 问题描述问题分析解决方案1解决方案2 问题描述 在使用Slf4J的时候发现报错了&#xff0c;日志一直都是使用了slf4j-api、slf4j-log4j12、log4j这三个包结合起来使用&#xff0c;新搭建了一个项目&#xff0c;然后创建了…

如何使用Docker本地部署Wiki.js容器并结合内网穿透实现知识库共享

文章目录 1. 安装Docker2. 获取Wiki.js镜像3. 本地服务器打开Wiki.js并添加知识库内容4. 实现公网访问Wiki.js5. 固定Wiki.js公网地址 不管是在企业中还是在自己的个人知识整理上&#xff0c;我们都需要通过某种方式来有条理的组织相应的知识架构&#xff0c;那么一个好的知识整…

uni-app的组件(二)

多项选择器checkbox-group 多项选择器&#xff0c;内部由多个 checkbox 组成。 <checkbox-group><checkbox checked color"red" value"1"></checkbox> 篮球<!-- disabled:是否禁用 --><checkbox disabled color"rgba(0,0…