0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在ETAS的AUTOSAR中實現(xiàn)Spinlock的設(shè)計

汽車ECU開發(fā) ? 來源:汽車ECU開發(fā) ? 2023-01-17 09:05 ? 次閱讀

現(xiàn)在的車載控制器,多核的MCU用的是越來越多了,對于不同核之間的共享數(shù)據(jù)保護,也是必須的,其中Spinlock就是常用的一種。

01.

Spinlock介紹

Spinlock也即自旋鎖,是一種輕量級的多核間的數(shù)據(jù)同步機制。一個任務(wù)想要訪問被Spinlock保護的共享資源,必須先得到鎖,在訪問完共享資源后釋放鎖。如果在獲取自旋鎖時,沒有任何執(zhí)行單元保持該鎖,那么將立即得到鎖;如果在獲取自旋鎖時鎖已經(jīng)有持有者, 那么需要自旋等待該鎖的保持者釋放了鎖。

在ETAS的AUTOSAR中,實現(xiàn)Spinlock的兩個基本操作獲取鎖xx_GetLockInternal()和釋放鎖xx_ReleaseLockInternal()。

對于獲取鎖接口,其內(nèi)部的實現(xiàn)原理如下:

第一步先判斷是哪個核上的任務(wù)正在使用xx_GetLockInternal();

判斷鎖是否已經(jīng)被同當(dāng)前核獲取過但沒有釋放,如果是的話,就進行鎖嵌套累加, 繼續(xù)執(zhí)行代碼,如果沒有被當(dāng)前核獲取過再進行下一步判斷;

掛起正在使用xx_GetLockInternal()的當(dāng)前核的中斷,確保當(dāng)前任務(wù)不被切換,也就是說不被高優(yōu)先級任務(wù)或者中斷任務(wù)打斷;

測試鎖的狀態(tài),該才做必須以原子操作訪問Spinlock的鎖標(biāo)志。

如果鎖狀態(tài)被本核占用則進行鎖嵌套,如果是其他核占用則首先釋放該核中斷, 然后重復(fù)執(zhí)行上面兩步測試鎖的狀態(tài),直到其他核釋放了鎖。如果鎖狀態(tài)為空閑, 則設(shè)置其為占用狀態(tài),這就成功地?fù)屨剂随i。

對于釋放鎖接口,其內(nèi)部的實現(xiàn)原理如下:

首先判斷是哪個核上的線程正在使用xx_ReleaseLockInternal();

判斷當(dāng)前鎖是否被該核占用,如果不是說明接口調(diào)用不匹配則復(fù)位,如果是則進行 下一步的判斷;

判斷鎖是否被本核嵌套, 如果是則嵌套次數(shù)減減, 如果沒有則清除鎖的狀態(tài);

釋放該核的中斷。

02.

Spinlock使用原則

所有臨界區(qū)代碼都需要加鎖保護,否則就達(dá)不到保護效果。也就是,訪問共享資源的多個任務(wù)需要協(xié)同工作共同加鎖才能保證不出錯。在實際寫代碼時,有時會忘掉這個,導(dǎo)致出現(xiàn)各種稀奇古怪的問題,并且很難排查。

Spinlock保護的代碼執(zhí)行時間要盡量短, 因為臨界區(qū)太大,持有時間太長,其他任務(wù)可能面臨長時間等待,降低了系統(tǒng)性能。

Spinlock 所保護的代碼在執(zhí)行過程中不能睡眠, 任務(wù)在持有自旋鎖時如果進入 Sleep狀態(tài),則可能導(dǎo)致死鎖。








審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    16667

    瀏覽量

    347784
  • AUTOSAR
    +關(guān)注

    關(guān)注

    10

    文章

    339

    瀏覽量

    21359
  • 車載控制系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    8083

原文標(biāo)題:ETAS AUTOSAR中Spinlock學(xué)習(xí)筆記

文章出處:【微信號:eng2mot,微信公眾號:汽車ECU開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Vector AUTOSAR的TISCI服務(wù)器集成

    電子發(fā)燒友網(wǎng)站提供《Vector AUTOSAR的TISCI服務(wù)器集成.pdf》資料免費下載
    發(fā)表于 08-30 11:16 ?0次下載
    Vector <b class='flag-5'>AUTOSAR</b><b class='flag-5'>中</b>的TISCI服務(wù)器集成

    AUTOSAR MCAL驅(qū)動程序與演示程序的Libraries的驅(qū)動程序有什么不同之處?

    1.關(guān)于 AUTOSAR MCAL 驅(qū)動程序 與演示程序的 Libraries 的驅(qū)動程序 有什么不同之處? 2.AUTOSAR MCAL 驅(qū)動程序
    發(fā)表于 05-17 06:55

    freertos里是否有spinlock或者類似的接口?

    目前在用STM32做開放,使用freertos,請問一下,freertos里是否有spinlock或者類似的接口?
    發(fā)表于 05-13 06:59

    AUTOSAR架構(gòu)復(fù)雜驅(qū)動設(shè)計

    復(fù)雜驅(qū)動(Complex Driver,CDD)是一種不受 AUTOSAR 標(biāo)準(zhǔn)化約束的軟件實體,它可以通過 AUTOSAR 接口和/或基礎(chǔ)軟件模塊 API 進行訪問 AUTOSAR 組件或者被
    的頭像 發(fā)表于 12-21 10:13 ?3330次閱讀
    <b class='flag-5'>AUTOSAR</b>架構(gòu)<b class='flag-5'>中</b>復(fù)雜驅(qū)動設(shè)計

    ETAS和曦華科技藍(lán)鯨MCU成功完成AUTOSAR適配

    藍(lán)鯨CVM014xMcal 基于AutoSAR Classic Platform 4.2.2開發(fā),完整支持微控制器驅(qū)動(MicrocontrollerDrivers), 存儲器驅(qū)動
    發(fā)表于 12-14 10:23 ?477次閱讀
    <b class='flag-5'>ETAS</b>和曦華科技藍(lán)鯨MCU成功完成<b class='flag-5'>AUTOSAR</b>適配

    ETAS RTA-BSW平臺成功適配曦華藍(lán)鯨CVM014x系列車規(guī)級MCU芯片

    ? 近日,曦華科技與ETAS共同宣布,ETAS RTA-BSW平臺成功適配曦華藍(lán)鯨CVM014x系列車規(guī)級MCU芯片,這一合作成果將為汽車行業(yè)帶來更加高效、安全的軟件開發(fā)與整車集成應(yīng)用,為雙方共同
    的頭像 發(fā)表于 12-04 09:07 ?917次閱讀

    ETAS推出ESCRYPT CycurFUZZ:快速模糊測試,提高網(wǎng)絡(luò)彈性

    ETAS推出ESCRYPT CycurFUZZ:快速模糊測試,提高網(wǎng)絡(luò)彈性
    的頭像 發(fā)表于 11-24 15:14 ?619次閱讀

    復(fù)雜驅(qū)動如何將現(xiàn)有的或新的概念引入AUTOSAR軟件架構(gòu)的?

    復(fù)雜驅(qū)動(Complex Driver,CDD)是一種不受 AUTOSAR 標(biāo)準(zhǔn)化約束的軟件實體,它可以通過 AUTOSAR 接口和/或基礎(chǔ)軟件模塊 API 進行訪問 AUTOSAR 組件或者被
    的頭像 發(fā)表于 11-22 10:57 ?1204次閱讀
    復(fù)雜驅(qū)動如何將現(xiàn)有的或新的概念引入<b class='flag-5'>AUTOSAR</b>軟件架構(gòu)<b class='flag-5'>中</b>的?

    AUTOSAR系統(tǒng)如何將BSW模塊分配到不同的分區(qū)和內(nèi)核呢?

    AUTOSAR 提供了一系列機制來解決這些問題,支持高效、安全的 BSW 多核分配。
    的頭像 發(fā)表于 11-16 17:49 ?2663次閱讀
    <b class='flag-5'>在</b><b class='flag-5'>AUTOSAR</b>系統(tǒng)<b class='flag-5'>中</b>如何將BSW模塊分配到不同的分區(qū)和內(nèi)核呢?

    如何在非Autosar應(yīng)用執(zhí)行I2C?

    我是NXP產(chǎn)品的新產(chǎn)品,我試圖了解它的生態(tài)系統(tǒng)。我需要在非Autosar應(yīng)用執(zhí)行I2C,所以我需要了解它是如何工作的,所以我有一些問題: 1) RTD_I2C_UM.pdf
    發(fā)表于 11-13 07:04

    AUTOSARCAN信號是如何觸發(fā)COM回調(diào)的呢?

    AUTOSAR,COM模塊提供了兩種機制來處理接收到的PDU:ComRxPduCallout和ComNotification
    的頭像 發(fā)表于 11-01 10:26 ?1380次閱讀
    <b class='flag-5'>AUTOSAR</b><b class='flag-5'>中</b>CAN信號是如何觸發(fā)COM回調(diào)的呢?

    AUTOSAR OS操作系統(tǒng)功能特性

    AUTOSAR OS AUTOSAR OS(AUTomotive Open System ARchitecture Operating System)是AUTOSAR架構(gòu)的一個組件,
    的頭像 發(fā)表于 10-27 16:55 ?1851次閱讀

    AUTOSAR CP的復(fù)雜驅(qū)動是什么

    、ASIC等,以滿足特殊的功能和時序要求。此外,CDD還可以用于實現(xiàn)增強的服務(wù)/協(xié)議或封裝非AUTOSAR系統(tǒng)的傳統(tǒng)功能。CDD的實現(xiàn)可能與應(yīng)用、微控制器和ECU有關(guān)。最后,CDD可以作為引入現(xiàn)有或新概念到
    的頭像 發(fā)表于 10-27 15:39 ?1819次閱讀
    <b class='flag-5'>AUTOSAR</b> CP的復(fù)雜驅(qū)動是什么

    AUTOSAR經(jīng)典平臺介紹

    汽車電子系統(tǒng)的軟件組件、運行時環(huán)境和通信機制,以實現(xiàn)模塊化、可重用和可擴展的系統(tǒng)開發(fā)。 AUTOSAR CP,軟件組件被分為應(yīng)用軟件組件(SWC)和基礎(chǔ)軟件組件(BSW)。SWC是
    的頭像 發(fā)表于 10-27 15:30 ?1226次閱讀
    <b class='flag-5'>AUTOSAR</b>經(jīng)典平臺介紹

    AUTOSAR架構(gòu)自適應(yīng)平臺

    。AUTOSAR架構(gòu)的目標(biāo)是實現(xiàn)汽車電子系統(tǒng)的模塊化、可重用和可擴展,以提高開發(fā)效率和系統(tǒng)的可靠性。 AUTOSAR架構(gòu)由三個主要的層次組成:應(yīng)用層(Application Layer)、運行時環(huán)境層
    的頭像 發(fā)表于 10-27 15:23 ?1107次閱讀
    <b class='flag-5'>AUTOSAR</b>架構(gòu)自適應(yīng)平臺