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

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

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

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

PduR模塊的發(fā)送機(jī)制 PduR這個(gè)模塊對什么進(jìn)行了抽象呢?

冬至子 ? 來源:汽車電子過山車 ? 作者:皮皮歡樂小學(xué) ? 2023-07-17 15:54 ? 次閱讀

一.前言

前兩期,我們講了CAN模塊的發(fā)送邏輯,Canif模塊的發(fā)送邏輯和發(fā)送確認(rèn)邏輯,可以看到MCAL的CAN模塊是對MessgeBuffer這個(gè)CAN郵箱機(jī)制 做了抽象,將其抽象成一個(gè)個(gè)的HOH。而Canif則是從報(bào)文層面做了抽象,抽象成了一個(gè)個(gè)的PDUID。再往上會(huì)有CANtp以及PDUR模塊調(diào)用Canif,本期我們講解PDUR的發(fā)送路由功能,請思考PduR這個(gè)模塊對什么進(jìn)行了抽象呢?

通信架構(gòu)中PduR的位置如圖所示:

圖片

PDUR作用是對IPDU進(jìn)行路由,分發(fā)到正確的模塊,它是雙向的,即上層的COM DCM的報(bào)文數(shù)據(jù)發(fā)送,會(huì)經(jīng)由PDUR分發(fā)到canif 或cantp或其他底層通信模塊.而下層的報(bào)文接收,也會(huì)經(jīng)由PDUR進(jìn)行分發(fā) 告知對應(yīng)的COM或者DCM,除此之外還有一些buffer功能等不在我們此系列介紹范圍內(nèi)。

二.PduR模塊及其發(fā)送函數(shù),發(fā)送確認(rèn)函數(shù)

在PDUR中實(shí)現(xiàn)發(fā)送報(bào)文的函數(shù)是PduR_Transmit

這個(gè)函數(shù)被PduR_ComTransmit和PduR_DcmTransmit調(diào)用,上層模塊COM以及DCM模塊通過這兩個(gè)函數(shù)和PduR模塊交互,實(shí)現(xiàn)發(fā)送報(bào)文的。在這個(gè)PduR_Transmit中,同樣是按照IPDUID去索引對應(yīng)的配置結(jié)構(gòu)體數(shù)組成員,找到對應(yīng)PDU的對應(yīng)RoutingPaths,對RoutingPaths中配置的目標(biāo)PDU進(jìn)行分發(fā),根據(jù)配置的目標(biāo)模塊調(diào)用對應(yīng)的下層CAN發(fā)送函數(shù)如Canif_transmit或者CanTp_Transmit…. 說起來比較抽象,我們看看一個(gè)具體的配置實(shí)例。

下面是RoutingPaths的配置:

const PduRRoutingPath_type * const PduRRoutingPaths[] = { 
  &PduRRoutingPath_PDU_ID_UDS_PHYS_TX,
  &PduRRoutingPath_PDU_ID_UDS_FUNC_TX,
  &PduRRoutingPath_PDU_ID_UDS_PHYS_RX,
  &PduRRoutingPath_PDU_ID_UDS_FUNC_RX,
  &PduRRoutingPath_Pdu_Tx_272T,
  &PduRRoutingPath_Pdu_Tx_273T,
  &PduRRoutingPath_Pdu_Rx_256R,
  NULL_PTR
};

在配置中,對每個(gè)IPDU都配置了對應(yīng)的RoutingPaths,

其中的一個(gè)RoutingPath配置實(shí)例如下:

const PduRRoutingPath_type PduRRoutingPath_PDU_ID_UDS_PHYS_TX = {
  .SrcModule = PDUR_DCM,
  .SrcPduId = 0,
  .SduLength = 0,
  .PduRDestPdus = PduRDestinations_PDU_ID_UDS_PHYS_TX
};

RoutingPath中定義了SrcModule,用以說明這個(gè)PDU來源于什么模塊,同時(shí)也定義了他要傳輸?shù)降哪繕?biāo)pdu組。

const PduRDestPdu_type * const PduRDestinations_PDU_ID_UDS_PHYS_TX[] = {
  &PduRDestination_PDU_ID_UDS_PHYS_TX_PduRDestination,
  NULL_PTR
};

在目標(biāo)PDU組中你可以定義多個(gè)PduRDestPdu,在PduRDestPdu中定義了目標(biāo)模塊。即這個(gè)pdu數(shù)據(jù)需要去的模塊。

const PduRDestPdu_type PduRDestination_PDU_ID_UDS_PHYS_TX_PduRDestination = {
    .DestModule = PDUR_CANTP,
    .DestPduId = CANTP_PDU_ID_UDS_PHYS_TX,
    .DataProvision = PDUR_NO_PROVISION,
    .TxBufferRef = NULL_PTR
};

按照示例配置分析分配過程,假如現(xiàn)在上層傳過來一個(gè)pduid為0的PDU,按照0索引找到

PduRRoutingPath_PDU_ID_UDS_PHYS_TX作為RoutingPath。遍歷這個(gè)RoutingPath配置的所有目標(biāo)PDU組

獲取對應(yīng)PDU的destination.根據(jù)destination的DestModule(PDUR_DCM),調(diào)用對應(yīng)的Transmit函數(shù)(CanTp_Transmit)。向?qū)?yīng)模塊的Transmit函數(shù)傳入DestPduId。完成報(bào)文發(fā)送。這是整個(gè)PduR_Transmit的報(bào)文發(fā)送的路由過程

Std_ReturnType PduR_Transmit(PduIdType PduId, const PduInfoType* PduInfo, uint8 serviceId) {
  PDUR_VALIDATE_INITIALIZED(serviceId,E_NOT_OK);
  PDUR_VALIDATE_PDUPTR(serviceId, PduInfo, E_NOT_OK);
  PDUR_VALIDATE_PDUID(serviceId, PduId, E_NOT_OK);


  Std_ReturnType retVal = E_OK;
  const PduRRoutingPath_type *route = PduRConfig- >RoutingPaths[PduId];
  uint8 i = 0;
  for (i = 0; route- >PduRDestPdus[i] != NULL; i++) {
    const PduRDestPdu_type * destination = route- >PduRDestPdus[i];


    retVal |= PduR_RouteTransmit(destination, PduInfo);
  }
  return retVal;
}
Std_ReturnType PduR_RouteTransmit(const PduRDestPdu_type * destination, const PduInfoType * pduInfo) {
  Std_ReturnType retVal = E_NOT_OK;
  switch (destination- >DestModule) {
  case PDUR_CANIF:
#if PDUR_CANIF_SUPPORT == STD_ON
    retVal = CanIf_Transmit(destination- >DestPduId, pduInfo);
#endif
    break;
  case PDUR_COM:
#if PDUR_COM_SUPPORT == STD_ON
    Com_RxIndication(destination- >DestPduId, pduInfo);
#endif
    break;
  case PDUR_LINIF:
#if PDUR_LINIF_SUPPORT == STD_ON
    retVal = LinIf_Transmit(destination- >DestPduId, pduInfo);
#endif
    break;
  case PDUR_CANTP:
#if PDUR_CANTP_SUPPORT == STD_ON
    retVal = CanTp_Transmit(destination- >DestPduId, pduInfo);
#endif
    break;
  case PDUR_SOADIF:
#if PDUR_SOAD_SUPPORT == STD_ON
    retVal = SoAdIf_Transmit(destination- >DestPduId, pduInfo);
#endif
    break;
  case PDUR_SOADTP:
#if PDUR_SOAD_SUPPORT == STD_ON
    retVal = SoAdTp_Transmit(destination- >DestPduId, pduInfo);
#endif
    break;
  case PDUR_J1939TP:
#if PDUR_J1939TP_SUPPORT == STD_ON
    retVal = J1939Tp_Transmit(destination- >DestPduId, pduInfo);
#endif
    break;
  default:
    retVal = E_NOT_OK;
    break;
  }


  return retVal;
}

在PDUR中實(shí)現(xiàn)報(bào)文發(fā)送確認(rèn)的函數(shù)是PduR_TxConfirmation,其被PduR_CanIfTxConfirmation調(diào)用,也被PduR_CanTpTxConfirmation調(diào)用。其和報(bào)文發(fā)送的邏輯類似。只不過最后調(diào)用的是對應(yīng)模塊的Confirmation函數(shù)。

總結(jié):PDUR這個(gè)模塊把各個(gè)報(bào)文收發(fā)的分配路徑做了抽象。上層調(diào)用PDUR的發(fā)送接口傳輸數(shù)據(jù),傳入IPDU ID即可根據(jù)PDUR的Routing Path配置知道這些IPDU應(yīng)該下發(fā)給哪些下層模塊.同理對于接收也是這樣。

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

    關(guān)注

    145

    文章

    1974

    瀏覽量

    132267
  • 路由器
    +關(guān)注

    關(guān)注

    22

    文章

    3816

    瀏覽量

    116017
  • PDU
    PDU
    +關(guān)注

    關(guān)注

    0

    文章

    96

    瀏覽量

    17246
  • DCM
    DCM
    +關(guān)注

    關(guān)注

    0

    文章

    166

    瀏覽量

    26936
  • CAN模塊
    +關(guān)注

    關(guān)注

    0

    文章

    25

    瀏覽量

    8970
收藏 人收藏

    評論

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

    CBE1系列SDI視音頻數(shù)字光發(fā)送機(jī)

    CBE1系列SDI視音頻數(shù)字光發(fā)送機(jī)丞播CBE1系列視音頻數(shù)字光發(fā)送機(jī)的輸入視頻信號(hào)為復(fù)合視頻CVBS、分量視頻YUV或半分量視頻YC,輸入音頻信號(hào)為模擬音頻AUDIO或數(shù)字音頻AES/EBU;輸出
    發(fā)表于 03-12 02:33

    零基礎(chǔ)學(xué)FPGA(十二)一步一腳印之基于FIFO的串口發(fā)送機(jī)

    與DSP連接時(shí)就可以使用FIFO來達(dá)到數(shù)據(jù)匹配的目的。 下面我們開始設(shè)計(jì)。 這次設(shè)計(jì)我們要設(shè)計(jì)一個(gè)串口發(fā)送機(jī),想一下的話,我們要發(fā)送數(shù)據(jù),總得有一個(gè)數(shù)據(jù)產(chǎn)生模塊和數(shù)據(jù)發(fā)送
    發(fā)表于 08-21 15:35

    零基礎(chǔ)學(xué)FPGA(十二)基于FIFO的串口發(fā)送機(jī)設(shè)計(jì)全流程

    設(shè)計(jì)一個(gè)串口發(fā)送機(jī),想一下的話,我們要發(fā)送數(shù)據(jù),總得有一個(gè)數(shù)據(jù)產(chǎn)生模塊和數(shù)據(jù)發(fā)送模塊吧。好,那么在我們的腦海里就出現(xiàn)了這兩個(gè)
    發(fā)表于 04-07 17:03

    關(guān)于“小墨同學(xué)”推出的零基礎(chǔ)FPGA“基于FIFO的串口發(fā)送機(jī)設(shè)計(jì)全流程”相關(guān)部分討論

    鏈接為“小墨同學(xué)”推出的零基礎(chǔ)FPGA“基于FIFO的串口發(fā)送機(jī)設(shè)計(jì)全流程”,https://bbs.elecfans.com/jishu_475408_1_1.html其中,有幾個(gè)部分不是很明白小墨同學(xué)的設(shè)計(jì)思路,希望大家拍磚(見圖片紅色框體部分)
    發(fā)表于 07-27 19:34

    為什么NRF24L01模塊作為發(fā)送機(jī)時(shí)卻發(fā)不出數(shù)據(jù)

    為什么NRF24L01模塊作為發(fā)送機(jī)時(shí)卻發(fā)不出數(shù)據(jù)?如何去解決
    發(fā)表于 12-17 07:38

    有線電視系統(tǒng)調(diào)幅激光發(fā)送機(jī)和接收機(jī)入網(wǎng)技術(shù)條件和測量方法 G

    有線電視系統(tǒng)調(diào)幅激光發(fā)送機(jī)和接收機(jī)入網(wǎng)技術(shù)條件和測量方法 GY T 143-2000
    發(fā)表于 11-22 16:45 ?57次下載

    GYT_143-2000_有線電視系統(tǒng)調(diào)幅激光發(fā)送機(jī)和接收機(jī)

    GYT_143-2000_有線電視系統(tǒng)調(diào)幅激光發(fā)送機(jī)和接收機(jī)入網(wǎng)技術(shù)條件和測量方法
    發(fā)表于 08-10 12:01 ?33次下載

    分時(shí)計(jì)費(fèi)用負(fù)荷期信號(hào)載波發(fā)送機(jī)電路圖

    分時(shí)計(jì)費(fèi)用負(fù)荷期信號(hào)載波發(fā)送機(jī)電路圖
    發(fā)表于 05-26 14:11 ?596次閱讀
    分時(shí)計(jì)費(fèi)用負(fù)荷期信號(hào)載波<b class='flag-5'>發(fā)送機(jī)</b>電路圖

    CBE1系列SDI視音頻數(shù)字光發(fā)送機(jī)

    丞播CBE1系列視音頻數(shù)字光發(fā)送機(jī)的輸入視頻信號(hào)為復(fù)合視頻CVBS、分量視頻YUV或半分量視頻YC,輸入音頻信號(hào)為模擬音頻AUDIO或數(shù)字音頻AES/EBU;輸出為符合數(shù)字電視國際標(biāo)準(zhǔn)的SDI數(shù)字視頻
    發(fā)表于 04-01 14:28 ?29次下載

    CBE2系列SDI數(shù)字視音頻光發(fā)送機(jī)

    丞播CBE2系列SDI數(shù)字視音頻光發(fā)送機(jī)的輸入視頻信號(hào)為SDI數(shù)字視頻流,輸入音頻信號(hào)為模擬音頻AUDIO或數(shù)字音頻AES/EBU。輸出為符合數(shù)字電視國際標(biāo)準(zhǔn)的SDI數(shù)字視頻(音頻嵌入式)信號(hào),與
    發(fā)表于 04-05 16:20 ?32次下載

    FPGA視頻教程:SF-EP1C開發(fā)板-基于FIFO的串口發(fā)送機(jī)設(shè)計(jì)

    發(fā)送機(jī)是指產(chǎn)生并送出信號(hào)或數(shù)據(jù)的設(shè)備。光發(fā)送機(jī)是光傳輸網(wǎng)中的一類設(shè)備,和光接收機(jī)成對使用。光發(fā)送機(jī)將電信號(hào)轉(zhuǎn)成光信號(hào),通過光纖發(fā)送,光接收機(jī)則將光信號(hào)轉(zhuǎn)成電信號(hào)。
    的頭像 發(fā)表于 12-13 07:03 ?1814次閱讀
    FPGA視頻教程:SF-EP1C開發(fā)板-基于FIFO的串口<b class='flag-5'>發(fā)送機(jī)</b>設(shè)計(jì)

    DLS11 網(wǎng)關(guān)中繼器(LTE-LoRA) 數(shù)據(jù)發(fā)送機(jī)制

    DLS11 網(wǎng)關(guān)中繼器(LTE-LoRA) 數(shù)據(jù)發(fā)送機(jī)制 DLS11 網(wǎng)關(guān)中繼器(LTE-LoRA)? DLS11 是 LoRA-LTE 網(wǎng)關(guān)設(shè)備,專用于接收其它 LoRA 設(shè)備發(fā)來的數(shù)據(jù)包存儲(chǔ)并在
    的頭像 發(fā)表于 09-13 10:19 ?1019次閱讀
    DLS11 網(wǎng)關(guān)中繼器(LTE-LoRA) 數(shù)據(jù)<b class='flag-5'>發(fā)送機(jī)制</b>

    CAN、LIN報(bào)文的發(fā)送過程詳解

    還是Com_TriggerIPDUSend最后都是調(diào)用PDUR模塊PduR_ComTransmit來發(fā)送報(bào)文,且傳入到PduR
    的頭像 發(fā)表于 11-14 10:02 ?1.4w次閱讀

    DSL與其他模塊的交互

    DSP(Diagnostic Service Processing)用于分發(fā)不同的診斷服務(wù)請求。 DSL與其他模塊的交互 與PduR模塊交互: ● PduR
    的頭像 發(fā)表于 10-04 11:08 ?971次閱讀
    DSL與其他<b class='flag-5'>模塊</b>的交互

    DSL模塊的功能有哪些

    ” 診斷響應(yīng)處理 DSD子模塊應(yīng)請求DSL子模塊進(jìn)行診斷響應(yīng)數(shù)據(jù)的傳輸。 ● 轉(zhuǎn)發(fā)DSD子模塊傳入的診斷響應(yīng)數(shù)據(jù)到PduR
    的頭像 發(fā)表于 10-04 11:22 ?1048次閱讀
    主站蜘蛛池模板: 日本三级香港三级人妇99视 | 国产精品国产三级国产在线观看 | 草色在线 | 成人a毛片高清视频 | 四虎现在的网址入口 | 国产视频黄色 | 在线免费观看你懂的 | 国产精品三级视频 | 亚洲第一免费网站 | 黄色国产在线视频 | 国产视频三区 | 免费一级特黄 | 亚洲a毛片| 成人免费视频一区二区三区 | 五月天婷婷激情 | 五月激情电影 | 一级做a爰片久久毛片免费看 | 国内一级野外a一级毛片 | 99精品福利 | 国内精品久久影视免费 | 免费国产小视频 | bt天堂资源在线官网bt | 手机看片国产在线 | 亚洲一区 在线播放 | 欧美黄色大片免费观看 | www.夜| 欧美一区二区三区免费看 | 久久久黄色大片 | 黄色午夜视频 | 看黄视频免费 | 国产黄色录像视频 | 国产看午夜精品理论片 | 一级做a爰片久久毛片人呢 一级做a爰片久久毛片图片 | 欧美一区二区视频三区 | 免费中国一级啪啪片 | 欧美日韩在线成人免费 | 加勒比精品久久一区二区三区 | 日韩一级在线视频 | 久操综合| 亚洲成在人线中文字幕 | 天堂资源在线 |