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


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

汽车电子嵌入式

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


评论
  • 在2024年的科技征程中,具身智能的发展已成为全球关注的焦点。从实验室到现实应用,这一领域正以前所未有的速度推进,改写着人类与机器的互动边界。这一年,我们见证了具身智能技术的突破与变革,它不仅落地各行各业,带来新的机遇,更在深刻影响着我们的生活方式和思维方式。随着相关技术的飞速发展,具身智能不再仅仅是一个技术概念,更像是一把神奇的钥匙。身后的众多行业,无论愿意与否,都像是被卷入一场伟大变革浪潮中的船只,注定要被这股汹涌的力量重塑航向。01为什么是具身智能?为什么在中国?最近,中国具身智能行业的进
    艾迈斯欧司朗 2025-02-28 15:45 221浏览
  • 美国加州CEC能效跟DOE能效有什么区别?CEC/DOE是什么关系?美国加州CEC能效跟DOE能效有什么区别?CEC/DOE是什么关系?‌美国加州CEC能效认证与美国DOE能效认证在多个方面存在显著差异‌。认证范围和适用地区‌CEC能效认证‌:仅适用于在加利福尼亚州销售的电器产品。CEC认证的范围包括制冷设备、房间空调、中央空调、便携式空调、加热器、热水器、游泳池加热器、卫浴配件、光源、应急灯具、交通信号模块、灯具、洗碗机、洗衣机、干衣机、烹饪器具、电机和压缩机、变压器、外置电源、消费类电子设备
    张工nx808593 2025-02-27 18:04 120浏览
  • 在物联网领域中,无线射频技术作为设备间通信的核心手段,已深度渗透工业自动化、智慧城市及智能家居等多元场景。然而,随着物联网设备接入规模的不断扩大,如何降低运维成本,提升通信数据的传输速度和响应时间,实现更广泛、更稳定的覆盖已成为当前亟待解决的系统性难题。SoC无线收发模块-RFM25A12在此背景下,华普微创新推出了一款高性能、远距离与高性价比的Sub-GHz无线SoC收发模块RFM25A12,旨在提升射频性能以满足行业中日益增长与复杂的设备互联需求。值得一提的是,RFM25A12还支持Wi-S
    华普微HOPERF 2025-02-28 09:06 143浏览
  • 振动样品磁强计是一种用于测量材料磁性的精密仪器,广泛应用于科研、工业检测等领域。然而,其测量准确度会受到多种因素的影响,下面我们将逐一分析这些因素。一、温度因素温度是影响振动样品磁强计测量准确度的重要因素之一。随着温度的变化,材料的磁性也会发生变化,从而影响测量结果的准确性。因此,在进行磁性测量时,应确保恒温环境,以减少温度波动对测量结果的影响。二、样品制备样品的制备过程同样会影响振动样品磁强计的测量准确度。样品的形状、尺寸和表面处理等因素都会对测量结果产生影响。为了确保测量准确度,应严格按照规
    锦正茂科技 2025-02-28 14:05 134浏览
  •         近日,广电计量在聚焦离子束(FIB)领域编写的专业著作《聚焦离子束:失效分析》正式出版,填补了国内聚焦离子束领域实践性专业书籍的空白,为该领域的技术发展与知识传播提供了重要助力。         随着芯片技术不断发展,芯片的集成度越来越高,结构也日益复杂。这使得传统的失效分析方法面临巨大挑战。FIB技术的出现,为芯片失效分析带来了新的解决方案。它能够在纳米尺度上对芯片进行精确加工和分析。当芯
    广电计量 2025-02-28 09:15 116浏览
  • 更多生命体征指标风靡的背后都只有一个原因:更多人将健康排在人生第一顺位!“AGEs,也就是晚期糖基化终末产物,英文名Advanced Glycation End-products,是存在于我们体内的一种代谢产物” 艾迈斯欧司朗亚太区健康监测高级市场经理王亚琴说道,“相信业内的朋友都会有关注,最近该指标的热度很高,它可以用来评估人的生活方式是否健康。”据悉,AGEs是可穿戴健康监测领域的一个“萌新”指标,近来备受关注。如果站在学术角度来理解它,那么AGEs是在非酶促条件下,蛋白质、氨基酸
    艾迈斯欧司朗 2025-02-27 14:50 400浏览
  • 1,微软下载免费Visual Studio Code2,安装C/C++插件,如果无法直接点击下载, 可以选择手动install from VSIX:ms-vscode.cpptools-1.23.6@win32-x64.vsix3,安装C/C++编译器MniGW (MinGW在 Windows 环境下提供类似于 Unix/Linux 环境下的开发工具,使开发者能够轻松地在 Windows 上编写和编译 C、C++ 等程序.)4,C/C++插件扩展设置中添加Include Path 5,
    黎查 2025-02-28 14:39 140浏览
  • RGB灯光无法同步?细致的动态光效设定反而成为产品客诉来源!随着科技的进步和消费者需求变化,电脑接口设备单一功能性已无法满足市场需求,因此在产品上增加「动态光效」的形式便应运而生,藉此吸引消费者目光。这种RGB灯光效果,不仅能增强电脑周边产品的视觉吸引力,还能为用户提供个性化的体验,展现独特自我风格。如今,笔记本电脑、键盘、鼠标、鼠标垫、耳机、显示器等多种电脑接口设备多数已配备动态光效。这些设备的灯光效果会随着音乐节奏、游戏情节或使用者的设置而变化。想象一个画面,当一名游戏玩家,按下电源开关,整
    百佳泰测试实验室 2025-02-27 14:15 137浏览
  •           近日受某专业机构邀请,参加了官方举办的《广东省科技创新条例》宣讲会。在与会之前,作为一名技术工作者一直认为技术的法例都是保密和侵权方面的,而潜意识中感觉法律有束缚创新工作的进行可能。通过一个上午学习新法,对广东省的科技创新有了新的认识。广东是改革的前沿阵地,是科技创新的沃土,企业是创新的主要个体。《广东省科技创新条例》是广东省为促进科技创新、推动高质量发展而制定的地方性法规,主要内容包括: 总则:明确立法目
    广州铁金刚 2025-02-28 10:14 103浏览
  • 一、VSM的基本原理震动样品磁强计(Vibrating Sample Magnetometer,简称VSM)是一种灵敏且高效的磁性测量仪器。其基本工作原理是利用震动样品在探测线圈中引起的变化磁场来产生感应电压,这个感应电压与样品的磁矩成正比。因此,通过测量这个感应电压,我们就能够精确地确定样品的磁矩。在VSM中,被测量的样品通常被固定在一个震动头上,并以一定的频率和振幅震动。这种震动在探测线圈中引起了变化的磁通量,从而产生了一个交流电信号。这个信号的幅度和样品的磁矩有着直接的关系。因此,通过仔细
    锦正茂科技 2025-02-28 13:30 100浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦