色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

PduR模塊的發送機制 PduR這個模塊對什么進行了抽象呢?

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

一.前言

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

通信架構中PduR的位置如圖所示:

圖片

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

二.PduR模塊及其發送函數,發送確認函數

在PDUR中實現發送報文的函數是PduR_Transmit

這個函數被PduR_ComTransmit和PduR_DcmTransmit調用,上層模塊COM以及DCM模塊通過這兩個函數和PduR模塊交互,實現發送報文的。在這個PduR_Transmit中,同樣是按照IPDUID去索引對應的配置結構體數組成員,找到對應PDU的對應RoutingPaths,對RoutingPaths中配置的目標PDU進行分發,根據配置的目標模塊調用對應的下層CAN發送函數如Canif_transmit或者CanTp_Transmit…. 說起來比較抽象,我們看看一個具體的配置實例。

下面是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
};

在配置中,對每個IPDU都配置了對應的RoutingPaths,

其中的一個RoutingPath配置實例如下:

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,用以說明這個PDU來源于什么模塊,同時也定義了他要傳輸到的目標pdu組。

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

在目標PDU組中你可以定義多個PduRDestPdu,在PduRDestPdu中定義了目標模塊。即這個pdu數據需要去的模塊。

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
};

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

PduRRoutingPath_PDU_ID_UDS_PHYS_TX作為RoutingPath。遍歷這個RoutingPath配置的所有目標PDU組

獲取對應PDU的destination.根據destination的DestModule(PDUR_DCM),調用對應的Transmit函數(CanTp_Transmit)。向對應模塊的Transmit函數傳入DestPduId。完成報文發送。這是整個PduR_Transmit的報文發送的路由過程

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中實現報文發送確認的函數是PduR_TxConfirmation,其被PduR_CanIfTxConfirmation調用,也被PduR_CanTpTxConfirmation調用。其和報文發送的邏輯類似。只不過最后調用的是對應模塊的Confirmation函數。

總結:PDUR這個模塊把各個報文收發的分配路徑做了抽象。上層調用PDUR的發送接口傳輸數據,傳入IPDU ID即可根據PDUR的Routing Path配置知道這些IPDU應該下發給哪些下層模塊.同理對于接收也是這樣。

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

    關注

    145

    文章

    1946

    瀏覽量

    130727
  • 路由器
    +關注

    關注

    22

    文章

    3728

    瀏覽量

    113701
  • PDU
    PDU
    +關注

    關注

    0

    文章

    94

    瀏覽量

    16978
  • DCM
    DCM
    +關注

    關注

    0

    文章

    158

    瀏覽量

    26473
  • CAN模塊
    +關注

    關注

    0

    文章

    24

    瀏覽量

    8747
收藏 人收藏

    評論

    相關推薦

    CBE1系列SDI視音頻數字光發送機

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

    零基礎學FPGA(十二)一步一腳印之基于FIFO的串口發送機

    與DSP連接時就可以使用FIFO來達到數據匹配的目的。 下面我們開始設計。 這次設計我們要設計一個串口發送機,想一下的話,我們要發送數據,總得有一個數據產生模塊和數據發送
    發表于 08-21 15:35

    零基礎學FPGA(十二)基于FIFO的串口發送機設計全流程

    設計一個串口發送機,想一下的話,我們要發送數據,總得有一個數據產生模塊和數據發送模塊吧。好,那么在我們的腦海里就出現了這兩個
    發表于 04-07 17:03

    關于“小墨同學”推出的零基礎FPGA“基于FIFO的串口發送機設計全流程”相關部分討論

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

    為什么NRF24L01模塊作為發送機時卻發不出數據

    為什么NRF24L01模塊作為發送機時卻發不出數據?如何去解決
    發表于 12-17 07:38

    有線電視系統調幅激光發送機和接收機入網技術條件和測量方法 G

    有線電視系統調幅激光發送機和接收機入網技術條件和測量方法 GY T 143-2000
    發表于 11-22 16:45 ?57次下載

    GYT_143-2000_有線電視系統調幅激光發送機和接收機

    GYT_143-2000_有線電視系統調幅激光發送機和接收機入網技術條件和測量方法
    發表于 08-10 12:01 ?33次下載

    分時計費用負荷期信號載波發送機電路圖

    分時計費用負荷期信號載波發送機電路圖
    發表于 05-26 14:11 ?562次閱讀
    分時計費用負荷期信號載波<b class='flag-5'>發送機</b>電路圖

    CBE1系列SDI視音頻數字光發送機

    丞播CBE1系列視音頻數字光發送機的輸入視頻信號為復合視頻CVBS、分量視頻YUV或半分量視頻YC,輸入音頻信號為模擬音頻AUDIO或數字音頻AES/EBU;輸出為符合數字電視國際標準的SDI數字視頻
    發表于 04-01 14:28 ?29次下載

    CBE2系列SDI數字視音頻光發送機

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

    FPGA視頻教程:SF-EP1C開發板-基于FIFO的串口發送機設計

    發送機是指產生并送出信號或數據的設備。光發送機是光傳輸網中的一類設備,和光接收機成對使用。光發送機將電信號轉成光信號,通過光纖發送,光接收機則將光信號轉成電信號。
    的頭像 發表于 12-13 07:03 ?1643次閱讀
    FPGA視頻教程:SF-EP1C開發板-基于FIFO的串口<b class='flag-5'>發送機</b>設計

    DLS11 網關中繼器(LTE-LoRA) 數據發送機制

    DLS11 網關中繼器(LTE-LoRA) 數據發送機制 DLS11 網關中繼器(LTE-LoRA)? DLS11 是 LoRA-LTE 網關設備,專用于接收其它 LoRA 設備發來的數據包存儲并在
    的頭像 發表于 09-13 10:19 ?817次閱讀
    DLS11 網關中繼器(LTE-LoRA) 數據<b class='flag-5'>發送機制</b>

    CAN、LIN報文的發送過程詳解

    還是Com_TriggerIPDUSend最后都是調用PDUR模塊PduR_ComTransmit來發送報文,且傳入到PduR
    的頭像 發表于 11-14 10:02 ?1.2w次閱讀

    DSL與其他模塊的交互

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

    DSL模塊的功能有哪些

    ” 診斷響應處理 DSD子模塊應請求DSL子模塊進行診斷響應數據的傳輸。 ● 轉發DSD子模塊傳入的診斷響應數據到PduR
    的頭像 發表于 10-04 11:22 ?736次閱讀
    主站蜘蛛池模板: 处初女处夜情视频在线播放| 免费乱理伦片在线观看夜| 99久酒店在线精品2019| 先锋影音av资源站av| 绿巨人www在线观看| 国产精品久久久久久人妻香蕉| 最新在线黄色网址| 亚洲AV国产国产久青草| 泡妞高手在都市完整版视频免费| 国内自拍 在线 亚洲 欧美| 成年人视频在线免费观看| 在线视频网站www色| 亚洲精品色情婷婷在线播放| 青青视频国产色偷偷| 久久婷婷五月免费综合色啪| 国产精品一国产精品免费| 啊灬啊别停灬用力啊老师| 18禁国产精品久久久久久麻豆| 午夜想想爱午夜剧场| 色综合久久久久久| 欧美黑人经典片免费观看| 久久福利影院| 国内精品伊人久久久久| 国产精品丰满人妻AV麻豆| cctv官网| 99精品网站| 91麻豆精品| 0951影音在线| 在线播放av欧美无码碰| 亚洲精品欧美精品中文字幕| 特级黑人三人共一女| 日韩一区二区在线免费观看| 欧美A级肉欲大片XXX| 麻豆精品传媒卡一卡二传媒短视频| 近亲乱中文字幕| 精品日产1区2卡三卡麻豆| 国产在线观看免费观看不卡| 国产精品久久自在自2021| 国产成人精品区在线观看| 国产AV白丝爆浆在线播放| 成人在线视频播放|