[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

在这里插入图片描述

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

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

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

相关文章

Datawhale 强化学习笔记(三)基于策略梯度(policy-based)的算法

文章目录 参考基于价值函数的缺点策略梯度算法REINFORCE 算法策略梯度推导进阶策略函数的设计离散动作的策略函数连续动作的策略函数 参考 第九章 策略梯度 之前介绍的 DQN 算法属于基于价值(value-based)的算法&#xff0c;基于策略梯度的算法直接对策略本身进行优化。 将策…

HackTheBox - Medium - Linux - BackendTwo

BackendTwo BackendTwo在脆弱的web api上通过任意文件读取、热重载的uvicorn从而访问目标&#xff0c;之后再通过猜单词小游戏获得root 外部信息收集 端口扫描 循例nmap Web枚举 feroxbuster扫目录 /api/v1列举了两个节点 /api/v1/user/1 扫user可以继续发现login和singup 注…

Java设计模式-抽象工厂模式(5)

大家好,我是馆长!从今天开始馆长开始对java设计模式的创建型模式中的单例模式、原型模式、工厂方法、抽象工厂、建造者的抽象工厂模式进行讲解和说明。 抽象工厂模式(Abstract Factory Pattern) 定义 是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类…

VScode新增设备实现无感接入(不需要输入密码)

VScode远程开发接入设备&#xff0c;默认是需要输入密码的&#xff0c;但是日常开发中刷新就需要重新输入密码&#xff0c;很烦人。配置ssh的RSA密钥后会&#xff0c;就可以直接系统级别验证接入&#xff0c;对开发人员来说验证步骤就透明了&#xff0c;实现无感接入&#xff0…

多线程

Linux系统的多线程 1. Linux线程概念1.1 什么是线程1.2 页表的概念1.2.1 一级页表的缺点1.2.2 二级页表 1.3 线程的优缺点1.4 线程异常1.5 线程用途1.6 Linux进程VS线程 2. Linux线程控制2.1 创建线程2.2 线程ID及地址空间布局2.3 线程终止2.3.1 线程函数处进行return2.3.2 使用…

Java安全 CC链1分析

Java安全之CC链1分析 什么是CC链环境搭建jdk下载idea配置创建项目 前置知识Transformer接口ConstantTransformer类invokerTransformer类ChainedTransformer类 构造CC链1CC链1核心demo1demo1分析 寻找如何触发CC链1核心TransformedMap类AbstractInputCheckedMapDecorator类readO…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例4-6 fieldset

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>fieldset</title> </head><body> <form action"#"><fieldset><legend>学生信息</legend>姓名&#xff1a;&…

2024PMP考试新考纲-【过程领域】近期典型真题和很详细解析(8)

华研荟继续为您分享【过程Process领域】的新考纲下的真题&#xff0c;今天来看几道关于风险方面的PMP真题&#xff0c;帮助大家体会和理解新考纲下PMP的考试特点和如何应用所学的知识和常识&#xff08;经验&#xff09;来解题&#xff0c;并且举一反三&#xff0c;一次性3A通过…

WordPress怎么去除jquery和CSS静态文件链接中的版本号?附2种方法

我们很多WordPress网站默认情况下所加载的jquery和CSS静态文件链接中都会带有相应的版本号&#xff0c;比如boke112百科使用的YIA主题&#xff0c;加载CSS文件时就会在链接地址后面加上?ver2.7&#xff0c;即是style.css?ver2.7 除了CSS文件会加上版本号外&#xff0c;加载主…

[小程序]样式与配置

一、外部样式导入 使用import加外部样式表的相对路径并以 ; 表示语句结束。 import "common.wxss"; 二、全局样式和局部样式 全局样式位于app.wxss中&#xff0c;会作用于整个项目中所有页面中。 局部样式位于对应的wxss文件中&#xff0c;仅作用于当前页面&#x…

【项目搭建三】SpringBoot引入redis

添加依赖 本文使用spring data redis访问和操作redis&#xff0c;pom文件中加入以下依赖&#xff1a; <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </depende…

基于华为MRS3.2.0实时Flink消费Kafka落盘至HDFS的Hive外部表的调度方案

文章目录 1 Kafka1.1 Kerberos安全模式的认证与环境准备1.2 创建一个测试主题1.3 消费主题的接收测试 2 Flink1.1 Kerberos安全模式的认证与环境准备1.2 Flink任务的开发 3 HDFS与Hive3.1 Shell脚本的编写思路3.2 脚本测试方法 4 DolphinScheduler 该需求为实时接收对手Topic&a…

使用vscode在wsl2中配置clangd环境

在vscode中安装这三个插件&#xff08;clangd需要科学上网或者从VSIX安装&#xff09; 之后创建一个空目录并进去。 使用快捷键ctrlshiftp&#xff0c;输入命令 Cmake:Quick Start 根据步骤选择。注意在创建CMakeLists.txt这一步选择跳过&#xff0c;直接输入enter&#xff0c…

Linux 驱动开发基础知识——认识LED驱动程序 (二)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

Linux之进程间通信(管道)

目录 一、进程间通信 1、进程间通信的概念 2、进程间通信的目的 3、进程间通信的分类 二、管道 1、管道基本介绍 2、匿名管道 3、命名管道 一、进程间通信 1、进程间通信的概念 什么是进程间通信&#xff1f; 我们在学习了进程的相关知识后&#xff0c;知道&#xff…

树的一些经典 Oj题 讲解

关于树的遍历 先序遍历 我们知道 树的遍历有 前序遍历 中序遍历 后序遍历 然后我们如果用递归的方式去解决&#xff0c;对我们来说应该是轻而易举的吧&#xff01;那我们今天要讲用迭代&#xff08;非递归&#xff09;实现 树的相关遍历 首先呢 我们得知道 迭代解法 本质上也…

浅析云服务oss/obs/cos对象存储安全攻防

文章目录 前言云存储服务1.1 初识对象存储1.2 腾讯云COS桶1.3 公开读取风险 对象存储桶风险2.1 Bucket Object遍历2.2 Bucket 名称的爆破2.3 Bucket ACL可读写2.4 任意写与文件覆盖2.5 Bucket 域名的接管 AccessKey凭证泄露3.1 行云管家接管主机3.2 Github泄露AK/SK3.3 客户端程…

Chatgpt+Comfyui绘图源码说明及本地部署文档

其他文档地址&#xff1a; ChatgptComfyui绘图源码运营文档 ChatgptComfyui绘图源码线上部署文档 一、源码说明 1、源码目录说明 app_home&#xff1a;app官网源码chatgpt-java&#xff1a;管理后台服务端源码、用户端的服务端源码chatgpt-pc&#xff1a;电脑网页前端源码cha…

两条链表相同位数相加[中等]

优质博文IT-BLOG-CN 一、题目 给你两个非空的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照逆序的方式存储的&#xff0c;并且每个节点只能存储一位数字。请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。你可以假设除了数字0之外&#xff0c;这…

【征服Redis12】redis的主从复制问题

从现在开始&#xff0c;我们来讨论redis集群的问题&#xff0c;在前面我们介绍了RDB和AOF两种同步机制&#xff0c;那你是否考虑过这两个机制有什么用呢&#xff1f;其中的一个重要作用就是为了集群同步设计的。 Redis是一个高性能的键值存储系统&#xff0c;广泛应用于Web应用…