[AutoSar]BSW_OS 02 Autosar OS_STACK

发布时间:2026/10/24 10:19:53
[AutoSar]BSW_OS 02 Autosar OS_STACK 目录关键词平台说明一、 task stack1.1 Task stack 的共享1.2 task stack 的实际使用大小二、ISR stack2.1 ISR stack 的共享三、Single-stack单一栈和multi-stack 多栈策略3.1 Single-stack3.2 multi-stack四、Stack Check Strategy4.1Software Stack Check4.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 Measurement5.1 配置5.2 API关键词嵌入式、C语言、autosar、OS、BSW平台说明项目ValueOSautosar OSautosar厂商vector ETAS芯片厂商TI编程语言CC编译器HighTec (GCC)回到总目录一、 task stack1.1 Task stack 的共享为了节约RAM 的使用TASK间可以共享使用stack但是要满足以下条件1.task 类型必须为basic task。2.task 的优先级必须相同。3.task必须配置为非抢占式的且勾选上OsTaskStackSharing4.task不能调用OS service Schedule()。5.共享stack 的task必须在同一个核内。1.2 task stack 的实际使用大小vector 工具链中一般每个task单独使用一个stack。在task 从run进入ready或者waiting的时候任务的等待事件栈上下文包括操作系统上下文本地数据函数调用的堆栈帧等被保存到内部操作系统缓冲区中他们的总大小就是task stack 的实际使用大小。二、ISR stack2.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 strategySC1 / SC2Software stack checkSC3 / 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如果禁用了MPUSC3和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 true5.2 API回到总目录

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询