【OS】AUTOSAROSSpinlock实现原理(上篇)

原创 汽车电子嵌入式 2024-08-05 07:52

前言

从《【OS】AUTOSAR OS Resource实现原理》一文可知,Resources用于实现核内临界区数据的一致性保护,Spinlock用于实现核间(多核)临界区数据的一致性保护。从《RH850U2A芯片平台Spinlock的底层实现》一文可知在RH850芯片上“自旋”的含义就是While()循环中执行SNOOZE指令。。但是站在开发者的角度来讲,Os Spinlock这个概念还是很抽象,Spinlock到底是个在代码中具体是个什么了?本文就来就详细介绍Os Spinlock的具体实现原理,希望能理解以下问题:

问题1Spinlock为什么只能用于多核之间的数据一致性保护?

问题2SpinlockTricore“自旋”的具体含义?

问题3SpinlockTricoreRH850芯片上实现原理的异同?

OS相关文章

符合AUTOSAR标准的RTAOS--Counters详解

符合AUTOSAR标准的RTAOS--Event详解

符合AUTOSAR标准的RTA-OS --Resources详解

符合AUTOSAR标准的RTA-OS --Interrupts详解

符合AUTOSAR标准的RTA-OS --Task详解

符合AUTOSAR标准的RTA-OS --功能简介

符合AUTOSAR标准的RTAOS-Alarms详解

【OS】AUTOSAR架构下的中断和异常向量表


【OS】AUTOSAR Os是如何启动第一个Task的


【OS】AUTOSAR OS如何实现Task抢占


【OS】AUTOSAR OS系统调用产生Trap的过程详解


【OS】AUTOSAR OS调度器实现原理


【OS】AUTOSAR OS Resource实现原理


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


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


【OS】AUTOSAR OS Event实现原理

AUTOSAR架构下的OS错误处理

AUTOSAR架构下QM Application如何访问ASIL Application

AUTOSAR架构下多核启动

AUTOSAR架构下多核Shutdown

AUTOSAR架构下多核通信

环境

AUTOSAR工具链:Vector

Hardware Platform: Infineon Tricore

Build Tools: GHS


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

正文

1.Spinlock概念

自旋锁用于支持AUTOSAR系统中不同内核上任务的互斥。它们只能跨内核使用,因为它们在同一个内核上没有意义


Spinlocks实现了一种繁忙(busy waiting)等待机制,该机制轮询锁变量,直到它可用为止(GetSpinlock())。一旦一个锁被一个核心上的任务或ISR占用,其他核心的任务和ISR就无法占用该锁,直到它被释放为止(ReleaseSpinlock())。


通过改用TryToGetSpinlock(),可以避免GetSpinblock()“愚蠢, dumb”忙碌等待。如果可用,此API将获取锁,但如果不可用,则不会忙于等待。它返回一个成功标志,指示是否已获得锁。如果没有,用户可以自由地做一些工作,稍后再试。


忙于等待锁的任务可能会被更高优先级的任务和ISR抢占。用户应该注意确保抢占代码不会试图获得已被较低优先级代码占用的锁。如果锁定持续时间较短,用户可以考虑锁定资源或禁用锁定部分周围的中断。


示例1:一旦一个锁变量被TASK/ISR2占用,其他Core上的其他TASK/ISR2s将无法占用该锁变量。自旋锁机制在轮询锁变量时不会取消这些其他TASK的调度。然而,在轮询锁变量时,可能会出现具有更高优先级的任务/ISR准备就绪的情况。在这种情况下,旋转任务将受到干扰。

用户可以通过使用SuspendAllInterrupts来保护任务免受这种情况的影响,这样它就不会受到其他任务的干扰。操作系统可以为调用者自动执行此操作,请参阅配置参数OsSpinlockLockMethod.


由于自旋锁的嵌套不正确,很容易进入死锁状态。AUTOSAR试图通过要求在配置中指定唯一的顺序来防止这种情况。自旋锁只能按照指定的顺序锁定/解锁(尽管允许跳过单个自旋锁)。


示例2:第二种死锁情况可以通过嵌套的自旋锁调用来产生。

为了避免死锁,不允许嵌套不同的自旋锁。如果自旋锁应嵌套,则必须定义一个唯一的顺序。只能按此顺序获取自旋锁,但允许跳过单个自旋锁。在定义的顺序内不允许循环。


自旋锁机制本身并不是无死锁的。配置述中必须提到请求Tasks/ISR的自旋锁的顺序。如果任务占用自旋锁,则应限制调度。


自旋锁的配置方式类似于Resources。它们在运行时相对不耗内存,因此使用几个短自旋锁可能比使用几个多用途自旋锁更有效。


2.Spinlock配置

Spinlock配置参数如下图所示。


2.1 Short Name

Short Name: 定义Spinlock的名字,生成的代码会引用这个名字。


2.2 Spinlock Lock Method

Spinlock Lock Method: 获取到Spinlock后同步进行的操作,有以下4个选项


LOCK_ALL_INTERRUPTS , 获取Spinlock时挂起所有中断。

LOCK_CAT2_INTERRUPTS , 获取Spinlock时挂起二类中断。

LOCK_WITH_RES_SCHEDULER , 获取Spinlock时提高当前的Task优先级到最高优先级。

LOCK_NOTHING , 获取Spinlock时没有Lock操作。

默认是LOCK_NOTHING值。


注意Spinlock Lock Method配置为哪个参数,取决于实际的工程需求。

1.如果在中断中抢占当前Task后可能去获取Spinlock,从而可能产生死锁(dead lock),就将Spinlock Lock Method配置为LOCK_ALL_INTERRUPTS,从而在Task获取Spinlcok的时候挂起所有中断,避免该问题的产生。


2.如果在二类中断中抢占当前Task后可能去获取Spinlock,从而可能产生死锁(dead lock),就将Spinlock Lock Method配置为LOCK_CAT2_INTERRUPTS,从而在Task获取Spinlcok的时候挂起二类中断,避免该问题的产生。


3.如果高优先级Task抢占当前Task后可能去获取Spinlock,从而可能产生死锁(dead lock),就将Spinlock Lock Method配置为LOCK_WITH_RES_SCHEDULER,从而在Task获取Spinlcok的时候将本身优先级提高到最高优先级,避免该问题的产生。


4.如果以上场景都不可能出现,就配置为LOCK_NOTHING.


2.3 Spinlock Type

Spinlock Type: 配置Spinlock的类型,提供以下的两个配置参数。

STANDARD: 标准Autosar实现方式。

OPTIMIZED: MICROSAR OS优化后的实现方式。


对于多核系统中的数据一致性保护,MICROSAR Classic OS提供了(在AUTOSAR指定的操作系统自旋锁之下)额外的优化自旋锁。它们能够减少Spinlock API的运行时间。


AUTOSAR指定的操作系统自旋锁不会导致内核之间的任何死锁(请参阅AUTOSAR操作系统标准中嵌套操作系统自旋锁定的唯一顺序)。因此,有必要对操作系统配置数据进行一些错误检查。优化后的自旋锁不会执行这些错误检查。


Standard SpinlockOptimized Spinlock的区别如下表所示:


Standard Spinlocks

Optimized Spinlocks

死锁

不可能产生死锁

可能产生死锁

执行时间

由于有错误检查,会产生更多的执行时间

没有错误检查,执行时间更少

配置

如果Spinlock必须被嵌套使用,则必须配置OsSpinlockSuccessor

如果Spinlock必须被嵌套使用,不需要OsSpinlockSuccessor

嵌套

可以被其他Os Spinlocks嵌套使用

应避免嵌套优化的自旋锁,或至少谨慎使用


2.4 Spinlock Successor

Spinlock Successor: 引用下一个被嵌套使用的Spinlock. 需要嵌套使用Spinlock时才需要配置此参数。


示例:有如下的Spinlock使用场景时,就需要配置Spinlock Successor参数了。


GetSpinlock(OsSpinlock_Test)
/* Spinlock_Test protection context operations */
GetSpinlock(OsSpinlock_3)
/* Spinlock_3 protection context operations */
ReleaseSpinlock(OsSpinlock_Test)
ReleaseSpinlock(OsSpinlock_Test)



3. Spinlock实现原理

用户调用Os的标准接口后,都会产生Os Trap最后调用到Os的内部实现函数Os_Api_xxx(). 具体可以参考《【OS】AUTOSAR OS系统调用产生Trap的过程详解》。


也就是说:

GetSpinlock-> Os_Api_ GetSpinlock -> Os_TrapSpinlockGet -> Os_SpinlockGet


ReleaseSpinlock-> Os_Api_WaitEvent -> Os_TrapSpinlockRelease -> Os_SpinlockRelease


TryToGetSpinlock-> Os_Api_TryToGetSpinlock -> Os_TrapSpinlockTryGet -> Os_TrapSpinlockTryGet


感兴趣的可以阅读下篇 !

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实现原理



End


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

汽车电子嵌入式

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

评论
  • 天问Block和Mixly是两个不同的编程工具,分别在单片机开发和教育编程领域有各自的应用。以下是对它们的详细比较: 基本定义 天问Block:天问Block是一个基于区块链技术的数字身份验证和数据交换平台。它的目标是为用户提供一个安全、去中心化、可信任的数字身份验证和数据交换解决方案。 Mixly:Mixly是一款由北京师范大学教育学部创客教育实验室开发的图形化编程软件,旨在为初学者提供一个易于学习和使用的Arduino编程环境。 主要功能 天问Block:支持STC全系列8位单片机,32位
    丙丁先生 2024-12-11 13:15 37浏览
  • 我的一台很多年前人家不要了的九十年代SONY台式组合音响,接手时只有CD功能不行了,因为不需要,也就没修,只使用收音机、磁带机和外接信号功能就够了。最近五年在外地,就断电闲置,没使用了。今年9月回到家里,就一个劲儿地忙着收拾家当,忙了一个多月,太多事啦!修了电气,清理了闲置不用了的电器和电子,就是一个劲儿地扔扔扔!几十年的“工匠式”收留收藏,只能断舍离,拆解不过来的了。一天,忽然感觉室内有股臭味,用鼻子的嗅觉功能朝着臭味重的方向寻找,觉得应该就是这台组合音响?怎么会呢?这无机物的东西不会腐臭吧?
    自做自受 2024-12-10 16:34 136浏览
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-10 16:13 102浏览
  • 智能汽车可替换LED前照灯控制运行的原理涉及多个方面,包括自适应前照灯系统(AFS)的工作原理、传感器的应用、步进电机的控制以及模糊控制策略等。当下时代的智能汽车灯光控制系统通过车载网关控制单元集中控制,表现特殊点的有特斯拉,仅通过前车身控制器,整个系统就包括了灯光旋转开关、车灯变光开关、左LED前照灯总成、右LED前照灯总成、转向柱电子控制单元、CAN数据总线接口、组合仪表控制单元、车载网关控制单元等器件。变光开关、转向开关和辅助操作系统一般连为一体,开关之间通过内部线束和转向柱装置连接为多,
    lauguo2013 2024-12-10 15:53 70浏览
  • 近日,搭载紫光展锐W517芯片平台的INMO GO2由影目科技正式推出。作为全球首款专为商务场景设计的智能翻译眼镜,INMO GO2 以“快、准、稳”三大核心优势,突破传统翻译产品局限,为全球商务人士带来高效、自然、稳定的跨语言交流体验。 INMO GO2内置的W517芯片,是紫光展锐4G旗舰级智能穿戴平台,采用四核处理器,具有高性能、低功耗的优势,内置超微高集成技术,采用先进工艺,计算能力相比同档位竞品提升4倍,强大的性能提供更加多样化的应用场景。【视频见P盘链接】 依托“
    紫光展锐 2024-12-11 11:50 33浏览
  • 本文介绍Linux系统(Ubuntu/Debian通用)挂载exfat格式U盘的方法,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。修改对应的内核配置文件# 进入sdk目录cdrk3562_linux# 编辑内核配置文件vi./kernel-5.10/arch/arm64/configs/rockchip_linux_defconfig注:不清楚内核使用哪个defc
    Industio_触觉智能 2024-12-10 09:44 90浏览
  • 时源芯微——RE超标整机定位与解决详细流程一、 初步测量与问题确认使用专业的电磁辐射测量设备,对整机的辐射发射进行精确测量。确认是否存在RE超标问题,并记录超标频段和幅度。二、电缆检查与处理若存在信号电缆:步骤一:拔掉所有信号电缆,仅保留电源线,再次测量整机的辐射发射。若测量合格:判定问题出在信号电缆上,可能是电缆的共模电流导致。逐一连接信号电缆,每次连接后测量,定位具体哪根电缆或接口导致超标。对问题电缆进行处理,如加共模扼流圈、滤波器,或优化电缆布局和屏蔽。重新连接所有电缆,再次测量
    时源芯微 2024-12-11 17:11 48浏览
  • RK3506 是瑞芯微推出的MPU产品,芯片制程为22nm,定位于轻量级、低成本解决方案。该MPU具有低功耗、外设接口丰富、实时性高的特点,适合用多种工商业场景。本文将基于RK3506的设计特点,为大家分析其应用场景。RK3506核心板主要分为三个型号,各型号间的区别如下图:​图 1  RK3506核心板处理器型号场景1:显示HMIRK3506核心板显示接口支持RGB、MIPI、QSPI输出,且支持2D图形加速,轻松运行QT、LVGL等GUI,最快3S内开
    万象奥科 2024-12-11 15:42 54浏览
  • 概述 通过前面的研究学习,已经可以在CycloneVGX器件中成功实现完整的TDC(或者说完整的TDL,即延时线),测试结果也比较满足,解决了超大BIN尺寸以及大量0尺寸BIN的问题,但是还是存在一些之前系列器件还未遇到的问题,这些问题将在本文中进行详细描述介绍。 在五代Cyclone器件内部系统时钟受限的情况下,意味着大量逻辑资源将被浪费在于实现较大长度的TDL上面。是否可以找到方法可以对此前TDL的长度进行优化呢?本文还将探讨这个问题。TDC前段BIN颗粒堵塞问题分析 将延时链在逻辑中实现后
    coyoo 2024-12-10 13:28 99浏览
  • 全球知名半导体制造商ROHM Co., Ltd.(以下简称“罗姆”)宣布与Taiwan Semiconductor Manufacturing Company Limited(以下简称“台积公司”)就车载氮化镓功率器件的开发和量产事宜建立战略合作伙伴关系。通过该合作关系,双方将致力于将罗姆的氮化镓器件开发技术与台积公司业界先进的GaN-on-Silicon工艺技术优势结合起来,满足市场对高耐压和高频特性优异的功率元器件日益增长的需求。氮化镓功率器件目前主要被用于AC适配器和服务器电源等消费电子和
    电子资讯报 2024-12-10 17:09 81浏览
  • 一、SAE J1939协议概述SAE J1939协议是由美国汽车工程师协会(SAE,Society of Automotive Engineers)定义的一种用于重型车辆和工业设备中的通信协议,主要应用于车辆和设备之间的实时数据交换。J1939基于CAN(Controller Area Network)总线技术,使用29bit的扩展标识符和扩展数据帧,CAN通信速率为250Kbps,用于车载电子控制单元(ECU)之间的通信和控制。小北同学在之前也对J1939协议做过扫盲科普【科普系列】SAE J
    北汇信息 2024-12-11 15:45 53浏览
  •         霍尔传感器是根据霍尔效应制作的一种磁场传感器。霍尔效应是磁电效应的一种,这一现象是霍尔(A.H.Hall,1855—1938)于1879年在研究金属的导电机构时发现的。后来发现半导体、导电流体等也有这种效应,而半导体的霍尔效应比金属强得多,利用这现象制成的各种霍尔元件,广泛地应用于工业自动化技术、检测技术及信息处理等方面。霍尔效应是研究半导体材料性能的基本方法。通过霍尔效应实验测定的霍尔系数,能够判断半导体材料的导电类型、载流子浓度及载流子
    锦正茂科技 2024-12-10 11:07 64浏览
  • 【萤火工场CEM5826-M11测评】OLED显示雷达数据本文结合之前关于串口打印雷达监测数据的研究,进一步扩展至 OLED 屏幕显示。该项目整体分为两部分: 一、框架显示; 二、数据采集与填充显示。为了减小 MCU 负担,采用 局部刷新 的方案。1. 显示框架所需库函数 Wire.h 、Adafruit_GFX.h 、Adafruit_SSD1306.h . 代码#include #include #include #include "logo_128x64.h"#include "logo_
    无垠的广袤 2024-12-10 14:03 68浏览
  •         在有电流流过的导线周围会感生出磁场,再用霍尔器件检测由电流感生的磁场,即可测出产生这个磁场的电流的量值。由此就可以构成霍尔电流、电压传感器。因为霍尔器件的输出电压与加在它上面的磁感应强度以及流过其中的工作电流的乘积成比例,是一个具有乘法器功能的器件,并且可与各种逻辑电路直接接口,还可以直接驱动各种性质的负载。因为霍尔器件的应用原理简单,信号处理方便,器件本身又具有一系列的du特优点,所以在变频器中也发挥了非常重要的作用。  &nb
    锦正茂科技 2024-12-10 12:57 73浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦