女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

AUTOSAR架構(gòu)下的多核通信介紹

832065824 ? 來源:汽車電子嵌入式 ? 2023-11-13 09:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

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

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

問題 2:如果要指定共享內(nèi)存,該怎么指定?

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

問題4: 如何確保單核中的數(shù)據(jù)一致性?

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

參考文檔:

AUTOSAR架構(gòu)下多核啟動

AUTOSAR架構(gòu)下多核Shutdown

TC3xx芯片MPU介紹

MPU功能詳解-以RH850U2A為例

縮略詞

簡寫 全稱
IOC Inter-OS-Application Communicator

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

正文

1.多核通信介紹

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

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

Figure 1: 多核通信

2.多核間標(biāo)準(zhǔn)通信

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

2.1 什么是IOC

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

2.2 IOC的適用范圍

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

2.3 IOC的通信種類

IOC不支持Client-Server的通信,只支持Sender-Receiver的通信方式,SWC間的Client-Server通信在RTE/OS的具體實現(xiàn)中轉(zhuǎn)變?yōu)?Sender-Receiver的通信方式。也就是說對于SWC的開發(fā)者來說,不用做任何的更改,C-S的接口依然可以繼續(xù)使用。

從IOC的Senders和Receivers個數(shù)來分: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生產(chǎn)IOC通信接口和具體實現(xiàn)。

2.4 IOC通信的共享內(nèi)存和數(shù)據(jù)保護

IOC通信的具體實現(xiàn)由共享內(nèi)存的方式實現(xiàn),共享內(nèi)存的跨核間數(shù)據(jù)一致性保護由Spin lock保證,共享內(nèi)存的核內(nèi)Task間的數(shù)據(jù)一致性保護由開/關(guān)全局中斷的方式保證。共享內(nèi)存和數(shù)據(jù)一致性保護都由OS來自動生成和保證。

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

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

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

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

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

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

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

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

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

2.6 IOC通信的示例

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

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

由于通信跨越了核心邊界,RTE調(diào)用IOC將數(shù)據(jù)從Core0傳輸?shù)紺ore1。

數(shù)據(jù)發(fā)送方調(diào)用

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服務(wù)將數(shù)據(jù)寫入一個緩沖區(qū),該緩沖區(qū)位于一個共享內(nèi)存區(qū)中,接收方可以通過IOC讀取該數(shù)據(jù)。在接收端,接收可運行程序被定期調(diào)用。

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_ ()

調(diào)用以從IOC內(nèi)部隊列中讀取數(shù)據(jù)。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

當(dāng)數(shù)據(jù)寫入IOC內(nèi)部數(shù)據(jù)緩存后,Rte函數(shù)調(diào)用OS的服務(wù)來激活接收任務(wù)。這種通信方式適用于:

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

Client/server通信。

隊列或非隊列通信;

非polling模式的1:1通信;

N:1通信。

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

Figure2: IOC with notification by RTE

用長度為100的隊列方式實現(xiàn)。

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.多核間非標(biāo)準(zhǔn)通信

從第2章節(jié)得知:

IOC通信的的共享內(nèi)存也就是OS定義的全局變量

對共享內(nèi)存的數(shù)據(jù)一致性保護也就是通過Spin Lock和開關(guān)中斷來實現(xiàn),

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

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

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

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

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

關(guān)于MPU請參考:

TC3xx芯片MPU介紹

4.總結(jié)

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

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

問題 2:如果要指定共享內(nèi)存,該怎么指定?

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

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

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

問題4: 如何確保單核中的數(shù)據(jù)一致性?

:使用開關(guān)/掛起全局核內(nèi)全局中斷。

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

    關(guān)注

    2

    文章

    615

    瀏覽量

    35237
  • 通信
    +關(guān)注

    關(guān)注

    18

    文章

    6206

    瀏覽量

    137811
  • AUTOSAR
    +關(guān)注

    關(guān)注

    10

    文章

    379

    瀏覽量

    22660
  • ecu
    ecu
    +關(guān)注

    關(guān)注

    14

    文章

    934

    瀏覽量

    55820

原文標(biāo)題:AUTOSAR架構(gòu)下多核通信

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    AUTOSAR分層架構(gòu)

    AUTOSAR分層架構(gòu)
    發(fā)表于 09-26 11:12

    AUTOSAR架構(gòu)深度解析 精選資料推薦

    AUTOSAR架構(gòu)深度解析本文轉(zhuǎn)載于:AUTOSAR架構(gòu)深度解析目錄AUTOSAR架構(gòu)深度解析
    發(fā)表于 07-28 07:40

    AUTOSAR架構(gòu)深度解析 精選資料分享

    AUTOSAR架構(gòu)深度解析本文轉(zhuǎn)載于:AUTOSAR架構(gòu)深度解析AUTOSAR的分層式設(shè)計,用于支持完整的軟件和硬件模塊的獨立性(Indep
    發(fā)表于 07-28 07:02

    嵌入式異構(gòu)多核的片上通信架構(gòu)設(shè)計

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

    AUTOSAR架構(gòu)的WdgDriver WdgIf WdgM模塊

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

    AUTOSAR分層架構(gòu)介紹及SmartSAR studio使用總結(jié)

    AUTOSAR分層架構(gòu)
    發(fā)表于 03-28 16:44 ?11次下載

    AUTOSAR是什么?AUTOSAR軟件架構(gòu)簡介

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

    AutoSAR構(gòu)架以及在多核汽車MCU的運行

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

    基于Tricore芯片的AUTOSAR架構(gòu)多核啟動

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

    AUTOSAR架構(gòu),持續(xù)集成CI的最佳實踐

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

    AUTOSAR通信協(xié)議解析 如何實現(xiàn)AUTOSAR通信

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

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

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

    AUTOSAR通信框架的優(yōu)勢 AUTOSAR通信實例與應(yīng)用場景

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

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

    )的開發(fā)和生產(chǎn)。通信堆棧是AUTOSAR架構(gòu)中的關(guān)鍵組成部分,負責(zé)處理ECU之間的通信AUTOSAR
    的頭像 發(fā)表于 12-17 15:01 ?983次閱讀

    AUTOSAR通信與網(wǎng)絡(luò)安全 AUTOSAR通信在車輛中的應(yīng)用

    架構(gòu)合作伙伴計劃,旨在創(chuàng)建并建立一個開放的標(biāo)準(zhǔn)化軟件架構(gòu),以簡化汽車電子控制單元(ECU)的開發(fā)和生產(chǎn)。 1. AUTOSAR通信概述 AUTOSA
    的頭像 發(fā)表于 12-17 15:06 ?917次閱讀