• 738查看
  • 0回复

[Autosar] ETAS AUTOSAR中Spinlock学习笔记

[复制链接]


该用户从未签到

发表于 29-8-2023 08:10:03 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


现在的车载控制器,多核的MCU用的是越来越多了,对于不同核之间的共享数据保护,也是必须的,其中Spinlock就是常用的一种。

01.

Spinlock介绍

Spinlock也即自旋锁,是一种轻量级的多核间的数据同步机制。一个任务想要访问被Spinlock保护的共享资源,必须先得到锁,在访问完共享资源后释放锁。如果在获取自旋锁时,没有任何执行单元保持该锁,那么将立即得到锁;如果在获取自旋锁时锁已经有持有者, 那么需要自旋等待该锁的保持者释放了锁。

在ETAS的AUTOSAR中,实现Spinlock的两个基本操作获取锁xx_GetLockInternal()和释放锁xx_ReleaseLockInternal()。

对于获取锁接口,其内部的实现原理如下:


    第一步先判断是哪个核上的任务正在使用xx_GetLockInternal();

    判断锁是否已经被同当前核获取过但没有释放,如果是的话,就进行锁嵌套累加, 继续执行代码,如果没有被当前核获取过再进行下一步判断;

    挂起正在使用xx_GetLockInternal()的当前核的中断,确保当前任务不被切换,也就是说不被高优先级任务或者中断任务打断;

    测试锁的状态,该才做必须以原子操作访问Spinlock的锁标志。


    如果锁状态被本核占用则进行锁嵌套,如果是其他核占用则首先释放该核中断, 然后重复执行上面两步测试锁的状态,直到其他核释放了锁。如果锁状态为空闲, 则设置其为占用状态,这就成功地抢占了锁。

对于释放锁接口,其内部的实现原理如下:


    首先判断是哪个核上的线程正在使用xx_ReleaseLockInternal();

    判断当前锁是否被该核占用,如果不是说明接口调用不匹配则复位,如果是则进行 下一步的判断;

    判断锁是否被本核嵌套, 如果是则嵌套次数减减, 如果没有则清除锁的状态;

    释放该核的中断。


02.

Spinlock使用原则

所有临界区代码都需要加锁保护,否则就达不到保护效果。也就是,访问共享资源的多个任务需要协同工作共同加锁才能保证不出错。在实际写代码时,有时会忘掉这个,导致出现各种稀奇古怪的问题,并且很难排查。

Spinlock保护的代码执行时间要尽量短, 因为临界区太大,持有时间太长,其他任务可能面临长时间等待,降低了系统性能。

Spinlock 所保护的代码在执行过程中不能睡眠, 任务在持有自旋锁时如果进入 Sleep状态,则可能导致死锁。




该用户从未签到

发表于 18-3-2025 13:58:00 | 显示全部楼层
在ETAS AUTOSAR系统中,Spinlock是一种重要的同步机制,用于保护多核MCU间的共享数据。关于Spinlock的介绍,其核心思想是实现锁的保护机制,确保同一时间只有一个任务能够访问共享资源。在ETAS的AUTOSAR中,实现Spinlock的两个基本操作包括:

1. 获取锁:调用相关API函数尝试获取锁,若锁已被占用,则任务会自旋等待,直至成功获取锁。此操作保证了资源访问的独占性。
2. 释放锁:完成任务对共享资源的访问后,必须释放锁,以便其他任务能够获取锁并访问共享资源。释放锁的操作要确保同步性和原子性,避免竞态条件的发生。

在复杂的系统环境中,正确使用Spinlock能有效保障数据的安全性和系统的稳定性。开发者需深入理解其原理和使用方法,合理应用于实际项目中。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 18-3-2025 13:58:00 | 显示全部楼层
尊敬的同行:

在ETAS AUTOSAR系统中,Spinlock作为一种轻量级的多核数据同步机制,对于保护不同核之间共享数据的完整性至关重要。关于Spinlock的基本操作,获取锁与释放锁是两个核心环节。获取锁时,若锁未被占用,任务可立即获得并展开工作;若锁已被占用,任务需等待或自旋直至获取锁。在ETAS AUTOSAR中,应确保Spinlock操作的原子性,避免并发冲突。同时,为优化性能,设计时应充分考虑Spinlock的适用场景,避免长时间自旋导致的资源浪费。释放锁时,应确保同步释放相关资源,避免死锁发生。总之,合理应用Spinlock机制,能有效提升多核MCU车载控制器的数据安全性与稳定性。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 18-3-2025 13:58:00 | 显示全部楼层
对于您关于ETAS AUTOSAR中Spinlock的学习笔记,我对关于Spinlock的基本介绍部分进行回复如下:

关于Spinlock的介绍非常准确。在ETAS AUTOSAR环境中,Spinlock作为一种轻量级的多核数据同步机制,确保不同核心间对共享资源的访问安全。针对获取锁的操作,核心任务在尝试访问被Spinlock保护的共享资源时,会首先尝试获取锁。若此时锁未被其他任务持有,则任务立即获得锁并可以访问共享资源;反之,若锁已被其他任务占用,当前任务则进入自旋状态,等待锁被释放。在AUTOSAR中,这一机制确保了多核环境下系统的稳定运行和数据的完整安全。
回复 支持 反对

使用道具 举报

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 19-8-2025 03:54 , Processed in 0.383426 second(s), 34 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.