在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

AUTOSAR架構下的多核通信介紹

832065824 ? 來源:汽車電子嵌入式 ? 2023-11-13 09:24 ? 次閱讀

前言

隨著汽車ECU迅速的往域控制器方向發展,ECU要處理的任務越來越多,單核CPU的負載越來越大,多核ECU勢在必行。AUTOSAR架構下OS支持多核處理,本系列文章將詳細介紹AUTOSAR架構下的多核機制。本文介紹AUTOSAR架構下的多核通信

問題 1: 什么是共享內存(Shared Memory),共享內存需要在鏈接文件中特別指定嗎?

問題 2:如果要指定共享內存,該怎么指定?

問題3: 用于多核通信的共享內存一定需要使用SpinLock進行一致性保護嗎?

問題4: 如何確保單核中的數據一致性?

92ef8988-81c2-11ee-939d-92fbcf53809c.jpg

參考文檔:

AUTOSAR架構下多核啟動

AUTOSAR架構下多核Shutdown

TC3xx芯片MPU介紹

MPU功能詳解-以RH850U2A為例

縮略詞

簡寫 全稱
IOC Inter-OS-Application Communicator

注:本文章引用了一些第三方工具和文檔,若有侵權,請聯系作者刪除!

正文

1.多核通信介紹

使用多核的ECU避免不了需要考慮跨核通信,如下圖所示,跨核通信時使用RTE進行跨核通信時,AUTOSAR定義了標準的IOC通信,用戶只需要配置SWC的端口接口進行Mapping,IOC的具體實現由RTE/OS自動實現,不用用戶再做其他的操作。如果不使用RTE進行多核通信,沒有標準的接口可以使用,需要用戶自定義跨核通信,著重需要考慮跨核通信的共享內存及數據一致性保護

9311c016-81c2-11ee-939d-92fbcf53809c.png

Figure 1: 多核通信

2.多核間標準通信

多核間通信一定是跨OS-Application的通信(OS-Application不能跨核,所以兩個不同核上的SWC一定隸屬于不同的OS-Application),而“IOC”負責操作OS-Application之間的通信,特別是跨越核或內存保護邊界的通信。

2.1 什么是IOC

IOC全稱為Inter-OS-Application Communication,專門用于跨OS-Application的通信方式,特別的,跨越核或內存保護邊界的通信一般都使用IOC通信。

2.2 IOC的適用范圍

IOC的具體實現由RTE和OS實現,所以,IOC只適用于通過RTE交互的SWC間的跨OS-Application的通信,或通過RTE交互的SWC和BSW跨OS-Application通信,或者通過RTE交互的CDD和SWC或者CDD和CDD間的跨OS-Application通信。總之,不經過RTE的通信不適用IOC通信。

2.3 IOC的通信種類

IOC不支持Client-Server的通信,只支持Sender-Receiver的通信方式,SWC間的Client-Server通信在RTE/OS的具體實現中轉變為 Sender-Receiver的通信方式。也就是說對于SWC的開發者來說,不用做任何的更改,C-S的接口依然可以繼續使用。

從IOC的Senders和Receivers個數來分:IOC支持1:1, N:1, N:M的通信方式。

從是否帶Notification的角度來分:IOC分為帶Notification和不帶Notification的通信方式。

IOC通信支持隊列緩存(queue buffer),1:1和N:1通信方式支持隊列,N:M通信方式不支持隊列,1:1的通信方式一般不使用隊列,N:1通信方式一般使用隊列。

2.3 IOC通信配置

兩個SWC如果使用IOC通信的話,接口配置和不使用IOC通信完全一樣。

配置Data Type

配置Interface

配置P-port和R-Port

進行P-port和R-port連接(Mapping)

不過,兩個SWC如果要使用IOC跨核(跨OS-Application)通信,這兩個SWC的Runnable所在的Task一定時歸屬于兩個核上的不同OS-Application,這樣進行Port連接后,RTE和OS會自動為兩個SWC生產IOC通信接口和具體實現。

2.4 IOC通信的共享內存和數據保護

IOC通信的具體實現由共享內存的方式實現,共享內存的跨核間數據一致性保護由Spin lock保證,共享內存的核內Task間的數據一致性保護由開/關全局中斷的方式保證。共享內存和數據一致性保護都由OS來自動生成和保證。

93422008-81c2-11ee-939d-92fbcf53809c.png

9363c122-81c2-11ee-939d-92fbcf53809c.png

Note: 如果IOC通信間的數據長度小于等于4 Bytes,那么RTE/OS不會為其生成Spin lock和開關中斷的配置代碼,因為32bit的MCU的一次機器周期操作能完成4字節數據的操作,保證了數據的原子操作。

938ef586-81c2-11ee-939d-92fbcf53809c.png

2.5 IOC通信需要注意的其他點

單核內如果存在多個OS-Application,且OS-Application間由內存保護的邊界(boundaries

),這種單核場景也適用IOC通信。

在只有一個Core的系統中,如果只有一個OS-Application,或者如果沒有OS-Application使用內存保護機制,那么IOC可以被完全省略。

帶Notification的IOC適用二類中斷ISR來通知Receivers數據已經到達shared buffer,能保證Receiver及時的取得數據。

2.6 IOC通信的示例

2.6.1 SWC間通過S-R方式1:1通信且沒有Notification

如圖2所示,Core 0上的SWC通過RTE接口給Core 1上的SWC發送數據。接收端的可運行實體被定期調用(調度表或者Alarm機制實現),并通過RTE接收數據。

由于通信跨越了核心邊界,RTE調用IOC將數據從Core0傳輸到Core1。

數據發送方調用

Rte_Send__ (..., )

Rte_Write_SWC_PortName(VAR(rt_Array_uint8_8, AUTOMATIC) data) /* 2 */
{
  VAR(Std_ReturnType, AUTOMATIC) rtn;
  rtn = ((VAR(Std_ReturnType, AUTOMATIC))RTE_E_OK);
  (void)IocWrite_Rte_Rx_000139(data);
  return rtn;
}

RTE將其mapped 到

IocSend_ ()

FUNC(Std_ReturnType, OS_CODE) IocWrite_Rte_Rx_000139(const rt_Array_uint8_8 *value)
{ 
  Os_imaskType previous_imask;
  previous_imask = OS_STSR(OS_PLMR_REGID, OS_PLMR_SELID); OS_LDSR(OS_PLMR_REGID, OS_PLMR_SELID, 0U);
  while (0U != Os_TestAndSet(&Os_IocLockData.Os_IocLock_Rte_Rx_000139)) { /* spin */ }
  Os_ioc_memcpy(&Os_Ioc_Rte_Rx_000139, value, sizeof(*value)); /*lint !e545 */
  OS_SYNCM(); Os_IocLockData.Os_IocLock_Rte_Rx_000139 = 0U;
  OS_LDSR(OS_PLMR_REGID, OS_PLMR_SELID, previous_imask);
  return IOC_E_OK;
}

93ae0656-81c2-11ee-939d-92fbcf53809c.png

Figure 2: IOC without notification

在本例中,IocSend服務將數據寫入一個緩沖區,該緩沖區位于一個共享內存區中,接收方可以通過IOC讀取該數據。在接收端,接收可運行程序被定期調用。

Rte_Receive__ (..., )

Rte_Read_SWC_PortName(CONSTP2VAR(rt_Array_uint8_8, AUTOMATIC, RTE_APPL_DATA) data) 
{
  VAR(Std_ReturnType, AUTOMATIC) rtn;
  (void)IocRead_Rte_Rx_000139(((P2VAR(rt_Array_uint8_8, AUTOMATIC, RTE_APPL_DATA))data));
  rtn = Rte_Rx_000139_status;
  return rtn;
}

RTE將其mapped 到

IocReceive_ ()

調用以從IOC內部隊列中讀取數據。1:1通信不需要RTE中的附加隊列。

FUNC(Std_ReturnType, OS_CODE) IocRead_Rte_Rx_000138(rt_Array_uint8_8 *value) {
  Os_imaskType previous_imask;
  previous_imask = OS_STSR(OS_PLMR_REGID, OS_PLMR_SELID); OS_LDSR(OS_PLMR_REGID, OS_PLMR_SELID, 0U);
  while (0U != Os_TestAndSet(&Os_IocLockData.Os_IocLock_Rte_Rx_000139)) { /* spin */ }
  Os_ioc_memcpy(value, &Os_Ioc_Rte_Rx_000138, sizeof(*value)); /*lint !e545 */
  OS_SYNCM(); Os_IocLockData.Os_IocLock_Rte_Rx_000139 = 0U;
  OS_LDSR(OS_PLMR_REGID, OS_PLMR_SELID, previous_imask);
  return IOC_E_OK;
}

這種無通知的端口對端口通信適用于:

Sender/Receiver通信

隊列或者非隊列通信

1:1通信方式

2.6.2 SWC間通過C-S方式通信有Notification

當數據寫入IOC內部數據緩存后,Rte函數調用OS的服務來激活接收任務。這種通信方式適用于:

帶Notification的SWC間的Sender/receiver通信;

Client/server通信。

隊列或非隊列通信;

非polling模式的1:1通信;

N:1通信。

93d97a70-81c2-11ee-939d-92fbcf53809c.png

Figure2: IOC with notification by RTE

用長度為100的隊列方式實現。

Std_ReturnType IocReceive_Rte_Rx_000022(uint8* value)
{
  *value = Os_Ioc_Rte_ Rx_000022[read_index];
  read_index = (read_index == 100)? 0 : (read_index + 1U);
  return E_OK;
}


Std_ReturnType IocSend_Rte_Rx_000022(uint8 value)
{
  If ((read_index == 0 && write_index == 100)|| (read_index-write_index==1)) {
  return IOC_E_FULL;
  } else {
  Os_Ioc_Rte_ Rx_000022[write_index] = val;
  write_index = (write_index == 100)? 0 : (write_index + 1U);
  Os_SetEvent(EventID);
  }
}

3.多核間非標準通信

從第2章節得知:

IOC通信的的共享內存也就是OS定義的全局變量

對共享內存的數據一致性保護也就是通過Spin Lock和開關中斷來實現,

共享內存小于等于4 bytes,可以不使用Spin Lock和中斷保護

如果沒有開啟內存保護(MPU),共享內存可以分配在.default段(不用特別的去修改鏈接文件定義特殊的段),也就是任意可訪問RAM地址

只不過這些都由RTE和OS自動實現,對于用戶只要做好Port連接即可。

那么對于不經過RTE的多核通信,我們是否可以自己實現多核通信了?-- 肯定是可以的,下面我就列出一些多核通信的場景及應該考慮的地方。

序號 兩個跨核SWC所在OS-Application情況 通信數據長度 共享內存 數據一致性保護
1 Core0-SWC和Core1-SWC所在OS-Application都無內存保護機制 小于等于4 Bytes(32-bit MCU) 不用在鏈接文件特殊定義共享內存段,直接使用.default Data段 不用spin lock保護;
不用開關全局中斷保護
2 Core0-SWC和Core1-SWC所在OS-Application都無內存保護機制 大于4 Bytes(32-bit MCU) 不用在鏈接文件特殊定義共享內存段,直接使用.default Data段 需要spin lock保護;
如果該Shared buffer同一個核中不同Task間讀寫情況,就需要開關全局中斷保護。
3 Core0-SWC和Core1-SWC所在OS-Application有內存保護機制 小于等于4 Bytes(32-bit MCU) 需要在鏈接文件定義兩個OS-Application都能訪問的共享內存段 不用spin lock保護;
不用開關全局中斷保護
4 Core0-SWC和Core1-SWC所在OS-Application有內存保護機制 大于4 Bytes(32-bit MCU) 需要在鏈接文件定義兩個OS-Application都能訪問的共享內存段 需要spin lock保護;
如果該Shared buffer同一個核中不同Task間讀寫情況,就需要開關全局中斷保護。

關于MPU請參考:

TC3xx芯片MPU介紹

4.總結

問題 1: 什么是共享內存(Shared Memory),共享內存需要在鏈接文件中特別指定嗎?

:兩個或多個OS-Application都能訪問的內存區域即為共享內存區域。如果沒有使能MPU內存保護機制,任意定義的全局變量即為共享內存變量。如果使能了MPU內存保護機制,就需要在鏈接文件中定義共享內存段,同時需要配置MPU保護段并分配給OS-Application。

問題 2:如果要指定共享內存,該怎么指定?

:在鏈接文件中指定一塊內存區域,然后配置MPU設置其讀寫訪問屬性,需要多核通信的OS-Application應該包括該MPU配置即擁有對該共享內存的讀寫訪問權限。

問題3: 用于多核通信的共享內存一定需要使用Spin Lock進行一致性保護嗎?

:不一定。當多核通信的數據小于等于4 Bytes(32-bit MCU)時CPU一個機器周期就能完成數據的讀寫,已經是原子操作,不用使用Spin lock進行數據一致性保護。

問題4: 如何確保單核中的數據一致性?

:使用開關/掛起全局核內全局中斷。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 負載
    +關注

    關注

    2

    文章

    608

    瀏覽量

    35069
  • 通信
    +關注

    關注

    18

    文章

    6184

    瀏覽量

    137469
  • AUTOSAR
    +關注

    關注

    10

    文章

    374

    瀏覽量

    22449
  • ecu
    ecu
    +關注

    關注

    14

    文章

    921

    瀏覽量

    55548

原文標題:AUTOSAR架構下多核通信

文章出處:【微信號:汽車電子嵌入式,微信公眾號:汽車電子嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    AUTOSAR分層架構

    AUTOSAR分層架構
    發表于 09-26 11:12

    AUTOSAR架構深度解析 精選資料推薦

    AUTOSAR架構深度解析本文轉載于:AUTOSAR架構深度解析目錄AUTOSAR架構深度解析
    發表于 07-28 07:40

    AUTOSAR架構深度解析 精選資料分享

    AUTOSAR架構深度解析本文轉載于:AUTOSAR架構深度解析AUTOSAR的分層式設計,用于支持完整的軟件和硬件模塊的獨立性(Indep
    發表于 07-28 07:02

    嵌入式異構多核的片上通信架構設計

    為了克服目前嵌入式異構多核處理器的片上通信架構無法提供高效的異構多核協作架構的問題,本文分析了嵌入式異構
    發表于 12-04 11:30 ?26次下載

    AUTOSAR架構的WdgDriver WdgIf WdgM模塊

    本文主要介紹AUTOSAR 架構的WdgDriver WdgIf WdgM 模塊,分析模塊之間的依賴關系以及運行原理以幫助快速理解。本文以MPC5746R為主控芯片,以FS6500為
    的頭像 發表于 09-09 11:17 ?6953次閱讀

    AUTOSAR分層架構介紹及SmartSAR studio使用總結

    AUTOSAR分層架構
    發表于 03-28 16:44 ?11次下載

    AUTOSAR是什么?AUTOSAR軟件架構簡介

    AUTOSAR的全稱是AUTomotive Open System Architecture,直譯為汽車開放系統架構
    的頭像 發表于 07-08 17:26 ?1.4w次閱讀
    <b class='flag-5'>AUTOSAR</b>是什么?<b class='flag-5'>AUTOSAR</b>軟件<b class='flag-5'>架構</b>簡介

    AutoSAR構架以及在多核汽車MCU的運行

    ),一般是核間通信用 SWC即Software Component縮寫,一般位于AUTOSAR架構的Application層 AUTOSAR分四層:Application、RTE(Ru
    的頭像 發表于 07-24 10:57 ?3074次閱讀
    <b class='flag-5'>AutoSAR</b>構架以及在<b class='flag-5'>多核</b>汽車MCU的運行

    基于Tricore芯片的AUTOSAR架構多核啟動

    隨著汽車ECU迅速的往域控制器方向發展,ECU要出來任務越來越多,單核CPU的負載越來越大,多核ECU勢在必行。AUTOSAR架構OS支持多核
    的頭像 發表于 10-23 10:15 ?4735次閱讀
    基于Tricore芯片的<b class='flag-5'>AUTOSAR</b><b class='flag-5'>架構</b><b class='flag-5'>下</b>的<b class='flag-5'>多核</b>啟動

    AUTOSAR架構,持續集成CI的最佳實踐

    集成(CI)流程。今天,我們就來探討一基于AUTOSAR架構的CI流程實踐,并通過對流程的詳細講解,展示其在實際開發中的重要性和優勢。什么是AUTOSAR
    的頭像 發表于 10-24 08:06 ?893次閱讀
    <b class='flag-5'>AUTOSAR</b><b class='flag-5'>架構</b><b class='flag-5'>下</b>,持續集成CI的最佳實踐

    AUTOSAR通信協議解析 如何實現AUTOSAR通信

    AUTOSAR(Automotive Open System Architecture)即汽車開放系統架構,該架構支持汽車電子控制單元(ECU)之間的通信,實現了高度模塊化和可重用性。
    的頭像 發表于 12-17 14:54 ?2578次閱讀

    AUTOSAR通信組件介紹 AUTOSAR通信層功能分析

    AUTOSAR通信組件介紹 AUTOSAR(AUTomotive Open System ARchitecture)是一個全球性的汽車軟件架構
    的頭像 發表于 12-17 14:55 ?1388次閱讀

    AUTOSAR通信框架的優勢 AUTOSAR通信實例與應用場景

    AUTOSAR通信框架的優勢 AUTOSAR(AUTomotive Open System ARchitecture)是一個全球性的汽車軟件架構合作伙伴計劃,旨在創建并建立一個開放的標
    的頭像 發表于 12-17 14:58 ?931次閱讀

    AUTOSAR通信堆棧的配置 AUTOSAR通信模塊測試方法

    )的開發和生產。通信堆棧是AUTOSAR架構中的關鍵組成部分,負責處理ECU之間的通信AUTOSAR
    的頭像 發表于 12-17 15:01 ?854次閱讀

    AUTOSAR通信與網絡安全 AUTOSAR通信在車輛中的應用

    架構合作伙伴計劃,旨在創建并建立一個開放的標準化軟件架構,以簡化汽車電子控制單元(ECU)的開發和生產。 1. AUTOSAR通信概述 AUTOSA
    的頭像 發表于 12-17 15:06 ?841次閱讀
    主站蜘蛛池模板: 亚洲午夜大片 | 欧美综合国产精品日韩一 | 有没有免费的视频在线观看 | 亚洲欧美日本综合 | 俺也操 | 妇少香港三日本三级视频 | 69中国xxxxxxxx18| 欧美高清免费一级在线 | 91大神精品在线观看 | 亚洲免费区 | 亚洲第一免费播放区 | 中文字幕卡二和卡三的视频 | 国产xxxxxx久色视频在 | 女人午夜啪啪性刺激免费看 | 久久午夜国产片 | 老师我好爽再深一点好大 | 美女被免费视频的网站 | 国产精品成人va在线观看入口 | 视频网站免费 | 天天操狠狠操夜夜操 | 丁香5月婷婷 | 欧美人与禽 | 99久久国产免费中文无字幕 | 毛片不卡一区二区三区 | 欧美一级特黄aa大片视频 | 国产伦精品一区二区三区高清 | 久久福利青草精品资源站免费 | 淫欲高三 | 91大神在线免费观看 | 国产特级毛片aaaaaa毛片 | 黄色视屏免费看 | 午夜网站在线 | 狠狠操影院 | 国产小视频免费在线观看 | 国产成人毛片亚洲精品不卡 | 色在线网站免费观看 | 成人a网站| 丁香狠狠色婷婷久久综合 | 亚洲国产精品婷婷久久 | 天天看夜夜操 | 在线免费看片a |