AUTOSAROsStack监控原理

原创 汽车电子嵌入式 2024-09-23 07:40

前言

《AUTOSAR OsTask切换原理》一文中,我们介绍基于TC3xx平台的OsTask的切换原理,TC3xxCSA + Stack组合实现Task的上下文的切换和恢复,知道TC3xx芯片的A[10]寄存器始终指向当前运行的TaskStack的栈顶,那么A[10]寄存器在运行过程中是否会越过TaskStack区域了?也就是发生StackOverflowOs又有什么机制可以监控的到了?本文就来介绍OsStack的监控原理。

目录


注:本文章引用了一些第三方工具和文档,若有侵权,请联系作者删除!

正文

1.AUTOSAR关于栈监控的描述

1.1. 背景

官方文档描述

在不提供任何内存保护硬件的处理器上,可能仍然需要为可检测的内存故障类别提供“尽最大努力利用可用资源”的方案。堆栈监控将识别任务或ISR在上下文切换时超过指定堆栈使用量的位置。这可能意味着在系统出错和检测到故障之间有相当长的时间。同样,在通知故障时,错误可能已被清除(当上下文切换发生时,堆栈可能小于指定的大小)。


仅仅监视系统的整个堆栈空间通常是不够的,因为不一定是正在执行的任务/ISR使用了比所需更多的堆栈空间——它可能是一个优先级较低的对象被抢占了。


通过让操作系统正确识别错误的Task/2ISR,可以节省大量调试时间。


请注意,对于使用MPU和可扩展性等级34的系统,堆栈溢出可能会在堆栈监控能够检测到故障之前导致内存异常。


1.2. 需求

操作系统模块应提供堆栈监控,以检测Task/2ISR的可能堆栈故障。


如果堆栈监控检测到堆栈故障,并且未配置ProtectionHook(),则操作系统模块应调用状态为E_OS_STACKFAULTShutdownOS()服务。


如果堆栈监控检测到堆栈故障,并且配置了ProtectionHook(),则操作系统模块应调用状态为E_OS_STACKFAULTProtectionHook.


2.MICROSAR的栈概念

MICROSAR定义了堆栈消费者(运行时上下文)可以使用的不同堆栈。然而,并非所有堆栈都可以被所有消费者使用。下表给出了MICROSAR的栈类型及其使用场景。


栈类型(Stack Type

多样性(Multiplicity

可能的堆栈消费者(Consumers

Init Stack

每个核1

OS initialization, Os_PanicHook(), Category 0/1

ISRs

Kernel stack

每个核1

> OS memory exception handling

> Os_PanicHook()

> Category 0 ISRs

Protection stack

每个核1个或者0

> ProtectionHook()

> OS API calls

> Os_PanicHook()

> Category 0 ISRs

Error stack

每个核1个或者0

> ErrorHooks (global and OS-application specific)

> OS API calls

> Category 0/1 ISRs

> Os_PanicHook()

Shutdown stack

每个核1个或者0

> ShutdownHooks (global and OS-application

specific)

> OS API calls

> Os_PanicHook()

> Category 0 ISRs

Startup stack

每个核1个或者0

> StartupHooks (global and OS-application specific)

> OS API calls

> Category 0/1 ISRs

> Os_PanicHook()

Non-Trusted Functions Stack

0…n

> Non-trusted functions

> OS API calls

> OS ISR wrapper

> Trusted functions

> Alarm callback functions

> Pre / PostTaskHook()

> Category 0/1 ISRs

> Os_PanicHook()

No nesting interrupt stack

每个核1个或者0

> No nesting category 2 ISRs

> OS API calls

> Trusted functions

> Alarm callback functions

> Category 0/1 ISRs

> Os_PanicHook()

Interrupt level stacks

0…n

> Nesting category 2 ISRs

> OS API calls

> OS ISR wrapper

> Trusted functions

> Alarm callback functions

> Category 0/1 ISRs

> Os_PanicHook()

Task stacks

0…n

> Tasks

> OS API calls

> OS ISR wrapper

> Trusted functions

> Alarm callback functions

> Pre / PostTaskHook()

> Category 0/1 ISRs

> Os_PanicHook()

IOC receiver pull callback stack

每个核1个或者0

> IOC receiver pull callback functions

> Category 0 ISRs

Table 2-1 MICROSAR Classic OS Stack Types


2.1. 任务栈共享

2.1.1. 概念描述

为了节省RAM,不同的基本任务可能共享相同的任务堆栈。满足以下要求的任务共享一个堆栈:


·具有相同配置优先级的基本任务。


·非抢占式的基本任务,配置为共享堆栈。在这些基本任务中,不允许调用OS服务Schedule().


·共享内部资源并配置为共享堆栈的基本任务。在这些基本任务中,不允许调用OS服务Schedule().


2.1.2. 任务栈共享激活

Basic TaskOsTaskStackSharing属性需要配置为True. 然后,操作系统根据抢占设置和分配的内部资源决定是否可以共享基本任务堆栈。


共享任务堆栈的大小是共享堆栈的所有任务堆栈大小的最大值。


注意1:无论OsTaskStackSharing的值如何,操作系统都会自动为具有相同配置优先级的基本任务激活堆栈共享。


注意2:通过将OsTaskStackSharing”设置为TRUE,可能无法在相应的基本任务中调用OS API服务Schedule()。如果在激活了堆栈共享的任务中调用Schedule(),操作系统会抛出错误。


注意3:任务的堆栈共享只能在分配给同一CPU核的任务之间实现


2.1.3. 任务栈使用

相互协作的任务共享同一堆栈。无需采取额外行动。


2.2. 中断栈共享

2.2.1. 概念描述


为了节省RAM,不同的2ISR可能共享相同的ISR堆栈。


·所有不可嵌套的2ISR可以共享一个堆栈。


·具有相同优先级的所有2ISR可以共享一个堆栈。


2.2.2. 中断栈共享激活

对于2ISR,属性“OsIsrEnableNesting”必须设置为FALSE


共享ISR堆栈的大小是所有配置的非稳定2ISR堆栈大小的最大值。


注意ISR的堆栈共享只能在分配给同一CPU核的ISR之间实现。


2.2.3. 中断栈使用

该功能由操作系统自动使用。同一核上所有不可嵌套的2ISR共享同一堆栈。


2.3. 软件栈检测

2.3.1 描述

操作系统将每个堆栈的最后一个元素初始化为特定的堆栈检查模式(check pattern)。每当执行堆栈切换(例如任务切换)时,操作系统都会检查有效堆栈的最后一个元素是否仍然保持堆栈检查模式(check pattern)。


如果操作系统检测到堆栈检查模式已被更改,则假定最后一个有效堆栈确实溢出。


MCU Types

Stack check pattern

32-Bit Microcontrollers

0xAAAAAAAA

Table 2-2 Stack Check Patterns


注意1:软件堆栈检查能够检测堆栈溢出。它无法避开它们!


注意2:软件堆栈检查无法检测到所有堆栈溢出。可能存在相邻堆栈的内存已被覆盖,但当前堆栈的最后一个元素仍保存堆栈检查模式的情况。在这种情况下,软件堆栈检查无法检测到溢出。


注意3:软件堆栈检查无法检测已销毁的内存量。


注意4:如果由于堆栈错误(E_OS_STACK_FAULT)而报告错误,API GetTaskID()可能不会返回导致栈错误的任务的ID.


2.3.2. 激活

SC1SC2配置中,必须将属性“OsStackMonitoring”设置为TRUE以激活软件堆栈检查功能。


注意:在Supervisor模式禁用MPU的平台上,SC3SC4配置的软件堆栈检查也可能被激活。在其他平台上,应在SC3SC4配置中关闭软件堆栈检查。


2.3.3. 使用

一旦该功能被激活,操作系统就会在每次堆栈切换时自动检查堆栈。


如果操作系统检测到堆栈溢出,它将关闭。如果配置了ShutdownHook,则会调用它来通知应用程序操作系统已关闭。


调试提示:在调用ShutdownHook()之前,操作系统会恢复堆栈检查模式。


2.4. MPU栈监控

2.4.1描述

在操作系统的整个运行期间,当前活动堆栈由微控制器的MPU监控。因此,操作系统保留了一个MPU区域,该区域由操作系统通过每个堆栈开关重新编程(切换改MPU区域到Next TaskStack区域)。


由于MPU避免了超出堆栈边界的写访问,因此不会发生堆栈溢出。


每当识别到内存违规(例如由于堆栈违规)时,都会引发异常。在异常处理中,操作系统调用ProtectionHook().


应用程序在ProtectionHook() 中决定如何处理内存保护违规。如果应用程序调用关闭操作系统,则还会调用ShutdownHook()(如果已配置)。


2.4.2激活

该系统必须配置为SC3SC4系统。


2.4.3使用

SC3/SC4系统中,操作系统自动初始化一个MPU区域以进行堆栈监控。


为了安全地检测堆栈违规,必须特别注意配置额外的MPU区域以及连接以下部分:

·配置其他MPU区域时,存储器区域不得授予对任何操作系统堆栈部分的写访问权限。这里还需要考虑区域的重叠。

·通过使用操作系统生成的链接器命令文件,可以确保操作系统堆栈连续链接到RAM中。

·需要一个与栈相邻的栈安全间隙(取决于栈的生长方向;见图2-1)。任何软件部件都不得对堆栈安全间隙具有写访问权限。

·堆栈安全间隙的大小必须至少达到MPU的粒度。这种限制通常是不够的,因为堆栈的访问偏移量可能大于MPU粒度。一种可能的解决方案是在RAM的开始或结束处链接堆栈部分(取决于增长方向)。

·安全间隙的连接是强制性的。否则,无法检测到地址最低的堆栈的堆栈违规。

Figure 2-1 Stack Safety Gap


注意1:不要配置授予任何操作系统堆栈写访问权限的MPU区域。


注意2:在联动方案(linkage scheme)中添加堆栈安全间隙。堆栈安全间隙是一个受限的内存区域。任何软件部件都不得具有对此区域的写访问权限。如果堆栈与存储区域相邻链接,则不需要安全间隙,因为写入访问受到硬件(如ROM)的限制。


2.5. 栈测量

2.5.1. 描述

在操作系统运行期间,应用程序可以获得最大的堆栈使用率。操作系统使用堆栈检查模式初始化所有操作系统堆栈(见表2-2)。


API函数能够返回每个堆栈的最大堆栈使用量(自调用StartOS() 以来)


2.5.2. 激活

设置” OsStackUsageMeasurement”参数位TRUE.


2.5.3. 使用

堆栈使用API可以在应用程序的任何地方使用。


3. MICROSARAUTOSAR OS栈保护的差异

3.1. 差异点1


AUTOSAR标准:如果堆栈监控检测到堆栈故障,且未配置ProtectionHook,则操作系统模块应调用状态为E_OS_STACKFAULTShutdownOS()服务。


MICROSAR实现:在具有MPU堆栈监控的SC3/SC4系统中:如果堆栈监控检测到堆栈故障且未配置ProtectionHook,操作系统模块应调用状态为E_OS_PROTECT_MEMORYShutdownOS()服务。


偏差原因:通过硬件堆栈监督,MICROSAR Classic OS无法区分堆栈违规和其他内存违规。


3.2. 差异点2

AUTOSAR标准:如果堆栈监控检测到堆栈故障并且配置了ProtectionHook,则操作系统模块应调用状态为E_OS_STACKFAULTProtectionHook().


MICROSAR实现:在具有MPU堆栈监控的SC3/SC4系统中:如果堆栈监控检测到堆栈故障并且配置了ProtectionHook,则操作系统模块应调用状态为E_OS_PROTECT_MEMORYProtectionHook().


偏差原因:通过硬件堆栈监督,MICROSAR Classic OS无法区分堆栈违规和其他内存违规。


4.栈保护实现

参考链接:https://blog.csdn.net/qq_36056498?spm=1011.2266.3001.5343


5.总结

本文介绍了AUTOSAR OS中关于栈监控的概念以及Stack监控的具体实现。在SC3SC4系统中因为使能了MPU保护,发生Stack Overflow后首先会由MPU识别到并产生Memory Protection Trap, 通过ProtectionHook()上报E_OS_PROTECT_MEMORYError. SC1SC2系统中因为没有使能MPU保护,则通过软件监控Stack实现,其监控原理也就是监控stack end address处的Stack Pattern有没有被篡改过,如果被篡改则上报E_OS_STACKFAULTError.



End

「汽车电子嵌入式在CSDN上同步推出AUTOSAR精进之路专栏,本专栏每个模块完全按实际项目中开发及维护过程来详细介绍。模块核心概念介绍、实际需求描述、实际工程配置、特殊需求介绍及背后原理、实际工程使用经验总结。目的是让读者看完每一个章节后能理解原理后根据需求完成一个模块的配置或者解决一个问题。」


点击文章最后左下角的阅读原文可以获取更多信息


或者复制如下链接到浏览器获取更多信息

https://blog.csdn.net/qq_36056498/article/details/132125693


文末福利




1
.如需汽车电子嵌入式收集的学习文档,
后台回复“

资料

即可免费下载;

2.为便于技术交流,创建了汽车电子嵌入式技术交流群,可尽情探讨AP,CP,DDS,SOME/IP等前沿热点话题,后台回复“加群”即可加入;



注:本文引用了一些第三方工具和文档,若有侵权,请联系作者删除!


推荐阅读

汽车电子嵌入式精彩文章汇总第一期:20210530-20230703

汽车电子嵌入式精彩文章汇总第2期

汽车电子嵌入式精彩文章汇总第3期

【OS】AUTOSAR OS Event实现原理

【OS】AUTOSAR OS Spinlock实现原理(下篇)

【OS】AUTOSAR OS Spinlock实现原理(上篇)

CanNm处于PBS状态下接收到一帧诊断报文DCM会响应吗

TC3xx芯片CAN模块详解

AUTOSAR OS Alarm实现原理

AUTOSAR OsTask切换原理

TC3xx 芯片SPI模块详解

AUTSOAR ComStack如何实现PDU只收不发的



End


欢迎点赞,关注,转发,在看,您的每一次鼓励,都是我最大的动力!

汽车电子嵌入式

微信扫描二维码,关注我的公众号


评论 (0)
  • ‌液氮恒温器‌是一种利用液氮作为冷源的恒温装置,主要用于提供低温、恒温或变温环境,广泛应用于科研、工业和医疗等领域。液氮恒温器通过液氮的低温特性来实现降温效果,具有效率高、降温速度快、振动小、成本低等优点。 ‌液氮恒温器应用场景和领域:‌科研领域‌:‌低温物理实验‌:用于研究材料在低温下的各种物理特性,如超导性、磁性、电学性质等。‌半导体研究‌:在半导体制造和测试过程中,需要低温环境以测试半导体材料和器件的性能。‌超导研究‌:测量超导材料的超导转变温度、临界电流密度等参数。‌材料科学‌
    锦正茂科技 2025-04-09 16:32 17浏览
  •     前几天同事问我,电压到多少伏就不安全了?考虑到这位同事的非电专业背景,我做了最极端的答复——多少伏都不安全,非专业人员别摸带电的东西。    那么,是不是这么绝对呢?我查了一下标准,奇怪的知识增加了。    标准的名字值得玩味——《电流对人和家畜的效应》,GB/T 13870.5 (IEC 60749-5)。里面对人、牛、尸体分类讨论(搞硬件的牛马一时恍惚,不知道自己算哪种)。    触电是电流造成的生理效应
    电子知识打边炉 2025-04-09 22:35 21浏览
  • 文/郭楚妤编辑/cc孙聪颖‍伴随贸易全球化的持续深入,跨境电商迎来蓬勃发展期,物流行业 “出海” 成为不可阻挡的必然趋势。加之国内快递市场渐趋饱和,存量竞争愈发激烈。在此背景下,国内头部快递企业为突破发展瓶颈,寻求新的增长曲线,纷纷将战略目光投向海外市场。2024 年,堪称中国物流企业出海进程中的关键节点,众多企业纷纷扬帆起航,开启海外拓展之旅。然而,在一片向好的行业发展表象下,部分跨境物流企业的经营状况却不容乐观。它们受困于激烈的市场竞争、不断攀升的运营成本,以及复杂的国际物流环境,陷入了微利
    华尔街科技眼 2025-04-09 15:15 118浏览
  • 文/Leon编辑/侯煜‍就在小米SU7因高速交通事故、智驾性能受到质疑的时候,另一家中国领先的智驾解决方案供应商华为,低调地进行了一场重大人事变动。(详情见:雷军熬过黑夜,寄望小米SU7成为及时雨)4月4日上午,有网友发现余承东的职务发生了变化,华为官网、其个人微博认证信息为“常务董事,终端BG董事长”,不再包括“智能汽车解决方案BU董事长”。余承东的确不再兼任华为车BU董事长,但并非完全脱离华为的汽车业务,而是聚焦鸿蒙智行。据悉,华为方面寻求将车BU独立出去,但鸿蒙智行仍留在华为终端BG部门。
    华尔街科技眼 2025-04-09 15:28 113浏览
  • ‌亥姆霍兹线圈‌是由两组相同的线圈组成,线圈之间的距离等于它们的半径。当电流同时流过这两个线圈时,会在它们中间形成一个几乎均匀的磁场。这种设计克服了普通线圈磁场不均匀的缺陷,能够在中心区域形成稳定、均匀的磁场‌。‌亥姆霍兹线圈的应用领域‌包括材料、电子、生物、医疗、航空航天、化学、应用物理等各个学科。由于其操作简便且能够提供极微弱的磁场直至数百高斯的磁场,亥姆霍兹线圈在各研究所、高等院校及企业中被广泛用于物质磁性或检测实验。‌‌亥姆霍兹线圈的用途非常广泛,主要包括以下几个方面‌:‌粒子物理实验‌
    锦正茂科技 2025-04-09 17:04 26浏览
  • ‌亥姆霍兹线圈‌是由两组相同的线圈组成,线圈之间的距离等于它们的半径。当电流同时流过这两个线圈时,会在它们中间形成一个几乎均匀的磁场。这种设计克服了普通线圈磁场不均匀的缺陷,能够在中心区域形成稳定、均匀的磁场‌。‌亥姆霍兹线圈的应用领域‌包括材料、电子、生物、医疗、航空航天、化学、应用物理等各个学科。由于其操作简便且能够提供极微弱的磁场直至数百高斯的磁场,亥姆霍兹线圈在各研究所、高等院校及企业中被广泛用于物质磁性或检测实验。‌亥姆霍兹线圈可以根据不同的标准进行分类‌:‌按磁场方向分类‌:‌一维亥
    锦正茂科技 2025-04-09 17:20 36浏览
  • 贞光科技作为台湾Viking光颉电阻产品授权一级代理商,提供全系列高性能贴片电阻解决方案。本文详细介绍光颉AR/PR高精密薄膜电阻、CS/TCS电流感应电阻、LR合金电阻、CR/AR厚膜晶片电阻及PHV耐高压电阻的技术规格与应用场景,助力工程师精准选型。从高精度±0.01%到低温漂5ppm/℃,从微型0201到大功率应用,满足现代电子设计各类需求。全球电子产业快速发展,被动元件向小型化、高频化、高功率、耐压及抗湿方向演进。随着电子产品升级换代加速,应用领域多元化,与主流IC的兼容整合成为产品设计
    贞光科技 2025-04-09 16:50 31浏览
  • 政策驱动,AVAS成新能源车安全刚需随着全球碳中和目标的推进,新能源汽车产业迎来爆发式增长。据统计,2023年中国新能源汽车渗透率已突破35%,而欧盟法规明确要求2024年后新能效车型必须配备低速提示音系统(AVAS)。在此背景下,低速报警器作为车辆主动安全的核心组件,其技术性能直接关乎行人安全与法规合规性。基于WT2003H芯片开发的AVAS解决方案,以高可靠性、强定制化能力及智能场景适配特性,正成为行业技术升级的新标杆。WT2003H方案技术亮点解析全场景音效精准触发方案通过多传感器融合技术
    广州唯创电子 2025-04-10 08:53 29浏览
  •   卫星故障预警系统:守护卫星在轨安全的 “瞭望塔”   卫星故障预警系统作为保障卫星在轨安全运行的核心技术,集成多源数据监测、智能诊断算法与预警响应机制,实时监控卫星关键系统状态,精准预判故障。下面从系统架构、技术原理、应用场景以及发展趋势这四个关键维度展开深入解析。   应用案例   目前,已有多个卫星故障预警系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润卫星故障预警系统。这些成功案例为卫星故障预警系统的推广和应用提供了有力支持。   系统架构与组成   卫星故障
    华盛恒辉l58ll334744 2025-04-09 17:18 30浏览
  •   卫星故障预警系统软件:卫星在轨安全的智能护盾   北京华盛恒辉卫星故障预警系统软件,作为确保卫星在轨安全运行的关键利器,集成前沿的监测、诊断及预警技术,对卫星健康状况予以实时评估,提前预判潜在故障。下面将从核心功能、技术特性、应用场景以及发展走向等方面展开详尽阐述。   应用案例   目前,已有多个卫星故障预警系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润卫星故障预警系统。这些成功案例为卫星故障预警系统的推广和应用提供了有力支持。   核心功能   实时状态监测:
    华盛恒辉l58ll334744 2025-04-09 19:49 45浏览
  • 行业痛点:电动车智能化催生语音交互刚需随着全球短途出行市场爆发式增长,中国电动自行车保有量已突破3.5亿辆。新国标实施推动行业向智能化、安全化转型,传统蜂鸣器报警方式因音效单一、缺乏场景适配性等问题,难以满足用户对智能交互体验的需求。WT2003HX系列语音芯片,以高性能处理器架构与灵活开发平台,为两轮电动车提供从基础报警到智能交互的全栈语音解决方案。WT2003HX芯片技术优势深度解读1. 高品质硬件性能,重塑语音交互标准搭载32位RISC处理器,主频高达120MHz,确保复杂算法流畅运行支持
    广州唯创电子 2025-04-10 09:12 33浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦