99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

CanIf發(fā)送邏輯CanIf_Transmit機(jī)制及CanIf發(fā)送配置解析

冬至子 ? 來(lái)源:汽車(chē)電子過(guò)山車(chē) ? 作者:歡樂(lè)皮皮峰 ? 2023-07-17 15:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一.前言:

整個(gè)的AUTOSAR的CAN通信模塊的層次如圖:

圖片

通信模塊可以大致分為三大功能:數(shù)據(jù)發(fā)送功能,數(shù)據(jù)接收功能,狀態(tài)切換和管理功能。

我們的系列按照這樣的功能排序和自底向上的模塊排序,每次只介紹其中的一個(gè)模塊的其中一個(gè)功能的實(shí)現(xiàn),所以在每篇文章中對(duì)于模塊不會(huì)事無(wú)巨細(xì)的介紹所有它所具備的功能,而是選擇性的介紹三大功能中的其中一個(gè)。BSW往上的所有模塊示例,為最大程度了解其設(shè)計(jì)思路以及避免侵權(quán)風(fēng)險(xiǎn),將會(huì)采用遵循AUTOSAR架構(gòu)的非商業(yè)代碼作為示例,其部分細(xì)節(jié)不保證完全遵循AUTOSAR最新的標(biāo)準(zhǔn),不保證所有功能的具備,敬請(qǐng)理解。

二.Canif模塊及其發(fā)送函數(shù)CanIf_Transmit

在上節(jié)的文章中介紹了CAN模塊的發(fā)送底層邏輯,Can_Write函數(shù)的介紹。Can_Write函數(shù)已經(jīng)對(duì)CAN驅(qū)動(dòng)進(jìn)行了抽象。抽象為了HOH供上層使用。而它的上層就是CanIf層.在CanIf模塊中,主要實(shí)現(xiàn)的功能如下:

1.傳輸請(qǐng)求(Transmit request)

傳輸請(qǐng)求功能的實(shí)現(xiàn)主體函數(shù)是CanIf_Transmit,這個(gè)函數(shù)內(nèi)部調(diào)用Can_Write進(jìn)行報(bào)文的發(fā)送

2.傳輸確認(rèn)(Transmit confirmation)

傳輸確認(rèn)功能的實(shí)現(xiàn)主體函數(shù)是CanIf_TxConfirmation,這個(gè)函數(shù)在CAN發(fā)送完成后被調(diào)用,作用是調(diào)用更上層的發(fā)送確認(rèn)回調(diào)函數(shù)通知更上層的各個(gè)模塊對(duì)應(yīng)的PDU已發(fā)送成功。

3.接收提示(Reception indication)

傳輸確認(rèn)功能的實(shí)現(xiàn)主體函數(shù)是CanIf_RxIndication,這個(gè)函數(shù)在CAN發(fā)送完成后被調(diào)用,作用是調(diào)用更上層的發(fā)送確認(rèn)回調(diào)函數(shù)通知更上層的各個(gè)模塊對(duì)應(yīng)的PDU已發(fā)送成功。

4.CAN控制器模式切換(Controller mode control)

controller模式切換的功能實(shí)現(xiàn)主體函數(shù)是CanIf_SetControllerMode,涉及到模式切換的功能后面專題詳解

5.PDU模式切換(PDU mode control)

PDU模式切換的功能實(shí)現(xiàn)主體函數(shù)是CanIf_SetPduMode,涉及到模式切換的功能后面專題詳解

整個(gè)CanIf模塊實(shí)現(xiàn)的基本函數(shù)如下:

1.jpg

本文側(cè)重介紹CanIf模塊的發(fā)送功能。CanIf的報(bào)文發(fā)送功能由CanIf_Transmit函數(shù)實(shí)現(xiàn),此函數(shù)原型如下:

Std_ReturnType CanIf_Transmit(PduIdType CanTxPduId,
                        const PduInfoType *PduInfoPtr)

此函數(shù)會(huì)調(diào)用MCAL的Can模塊中的Can_Write函數(shù)進(jìn)行報(bào)文的發(fā)送。在上節(jié)介紹Can_Write函數(shù)的時(shí)候,說(shuō)過(guò)其傳入的參數(shù)是以下:

  1. HOH
  2. CAN id:報(bào)文ID
  3. length:報(bào)文長(zhǎng)度
  4. sdu:報(bào)文數(shù)據(jù)
  5. swPduHandle :tx_confirm的ID

而CanIf層的傳入?yún)?shù)變?yōu)榱耍?/p>

  1. CanTxPduId,
  2. PduInfoPtr這個(gè)參數(shù)包括了SduDataPtr和SduLength

所以CanTxPduId對(duì)Can_Write函數(shù)所需的HOH,CAN ID,swPduHandle做了抽象。我們基本也可以推斷出CanIf的TxPDU所需要配置的主要內(nèi)容了。

三.Canif模塊的發(fā)送配置解析

以下例子用于說(shuō)明CanIf層的tx配置。

Canif涉及到發(fā)送報(bào)文的主要配置結(jié)構(gòu)體如下:

const CanIf_InitConfigType CanIfInitConfig =
{
  .CanIfConfigSet = 0, 
  .CanIfNumberOfCanRxPduIds = sizeof(CanIfRxPduConfigData)/sizeof(CanIf_RxPduConfigType),
  .CanIfNumberOfCanTXPduIds = sizeof(CanIfTxPduConfigData)/sizeof(CanIf_TxPduConfigType),
  .CanIfNumberOfDynamicCanTXPduIds = 0, 


  // Containers
  .CanIfHohConfigPtr = CanIfHohConfigData,
  .CanIfRxPduConfigPtr = CanIfRxPduConfigData,
  .CanIfTxPduConfigPtr = CanIfTxPduConfigData,
};

我們以下主要關(guān)注:

1.HOH的配置結(jié)構(gòu)體CanIfHohConfigData,

2.發(fā)送PDU配置結(jié)構(gòu)體CanIfTxPduConfigData

1.HOH的配置結(jié)構(gòu)體CanIfHohConfigData,

對(duì)于HOH的配置結(jié)構(gòu)體CanIfHohConfigData的結(jié)構(gòu)如下:

const CanIf_InitHohConfigType CanIfHohConfigData[] = {


  {
        #if(CANIF_CONTROL_CAN_DRIVER ==STD_ON)
    .CanConfigSet = &CanConfigSetData,
    #endif
    .CanIfHrhConfig = CanIfHrhConfigData_Hoh_1,
      .CanIfHthConfig = CanIfHthConfigData_Hoh_1,
  },
};

其中配置了發(fā)送的HTH和接收的HRH。對(duì)于發(fā)送的HTH配置如下:

const CanIf_HthConfigType CanIfHthConfigData_Hoh_1[] =
{
  {
  .CanIfHthType = CAN_BASIC,
  .CanIfCanControllerIdRef = CANIF_Channel_1,
  .CanIfHthIdSymRef = HOH_3_UDSTX_Node,
  },
  {
    .CanIfHthType = CAN_BASIC,
    .CanIfCanControllerIdRef = CANIF_Channel_1,
    .CanIfHthIdSymRef = HOH_3_NMTX_Node,
  },
  {
  .CanIfHthType = CAN_BASIC,
  .CanIfCanControllerIdRef = CANIF_Channel_1,
  .CanIfHthIdSymRef = HOH_3_XCPTX_Node,
  },
  {
    .CanIfHthType = CAN_BASIC,
    .CanIfCanControllerIdRef = CANIF_Channel_1,
    .CanIfHthIdSymRef = HOH_3_EcuTestNode_CanCluster,
  },
};

主要就是引用了上節(jié)文章例子中介紹的CAN模塊配置的四個(gè)HOH。

2.發(fā)送PDU配置結(jié)構(gòu)體數(shù)組CanIfTxPduConfigData

這個(gè)結(jié)構(gòu)體數(shù)組有所有的發(fā)送PDU配置,每個(gè)PDU都是一個(gè)結(jié)構(gòu)體成員,其中的一個(gè)成員配置示例如下:

const CanIf_TxPduConfigType CanIfTxPduConfigData[] = {
 {
  .CanIfTxConfrimPduId = CANTP_PDU_ID_UDS_PHYS_TX,
  .CanIfCanTxPduIdCanId = 0x7ea,
  .CanIfCanTxPduIdDlc = 8,
  .CanIfCanTxPduType = CANIF_PDU_TYPE_STATIC,
#if ( CANIF_READTXPDU_NOTIFY_STATUS_API == STD_ON )
  .CanIfReadTxPduNotifyStatus = false,
#endif
  .CanIfTxPduIdCanIdType = CANIF_CAN_ID_TYPE_11,
  .CanIfUserTxConfirmation = CanTp_TxConfirmation,
  .CanIfCanTxPduHthRef = &CanIfHthConfigData_Hoh_1[0],
  .PduIdRef = NULL,
  },
  .....
  }

關(guān)鍵的參數(shù)解釋如下:

  • CanIfTxConfrimPduId :用于為swPduHandle 復(fù)值,向?qū)?yīng)的TxConfirm函數(shù)傳入?yún)?shù)。
  • CanIfCanTxPduIdCanId:對(duì)應(yīng)PDU的報(bào)文ID
  • CanIfCanTxPduIdDlc:對(duì)應(yīng)PDU的報(bào)文長(zhǎng)度
  • CanIfUserTxConfirmation:發(fā)送確認(rèn)回調(diào)函數(shù)
  • CanIfCanTxPduHthRef:發(fā)送此PDU要使用的HOH

類似上節(jié)的結(jié)尾說(shuō)到的抽象。這些配置元素打包成一個(gè)結(jié)構(gòu)體數(shù)組元素,

CanIf_Transmit需要傳入的CanTxPduId,即代表這個(gè)配置結(jié)構(gòu)體數(shù)組的數(shù)組下標(biāo)。用來(lái)索引到其抽象的對(duì)象屬性。說(shuō)起來(lái)比較枯燥,以下是CanIf_Transmit的實(shí)現(xiàn)函數(shù):

Std_ReturnType CanIf_Transmit(PduIdType CanTxPduId,
    const PduInfoType *PduInfoPtr)
{
  Can_PduType canPdu;
  const CanIf_TxPduConfigType *txEntry;
  CanIf_ControllerModeType csMode;
  CanIf_ChannelGetModeType pduMode;


  VALIDATE(CanIf_Global.initRun, CANIF_TRANSMIT_ID, CANIF_E_UNINIT );
  VALIDATE((PduInfoPtr != 0), CANIF_TRANSMIT_ID, CANIF_E_PARAM_POINTER );


  // Get the controller from L-PDU handle
  txEntry = CanIf_FindTxPduEntry(CanTxPduId);


  if (txEntry == 0)
  {
    VALIDATE(FALSE, CANIF_TRANSMIT_ID, CANIF_E_INVALID_TXPDUID);
    return E_NOT_OK;
  }


  CanIf_Arc_ChannelIdType channel = txEntry- >CanIfCanTxPduHthRef- >CanIfCanControllerIdRef;


  // Get and verify the controller mode
  if (CanIf_GetControllerMode(channel, &csMode) == E_NOT_OK){
    return E_NOT_OK;
  }


  if (csMode != CANIF_CS_STARTED){  // CANIF_161
    return E_NOT_OK;
  }


  // Get and verify the PDU channel mode control
  if (CanIf_GetPduMode(channel, &pduMode) == E_NOT_OK){
    return E_NOT_OK;
  }


  if ((pduMode != CANIF_GET_TX_ONLINE) && (pduMode != CANIF_GET_ONLINE)){
    return E_NOT_OK;
  }


  canPdu.id = txEntry- >CanIfCanTxPduIdCanId;
  canPdu.length = PduInfoPtr- >SduLength;
  canPdu.sdu = PduInfoPtr- >SduDataPtr;
  canPdu.swPduHandle = CanTxPduId;


  Can_ReturnType rVal = Can_Write(txEntry- >CanIfCanTxPduHthRef- >CanIfHthIdSymRef, &canPdu);


  if (rVal == CAN_NOT_OK){
    return E_NOT_OK;
  }
  if (rVal == CAN_BUSY)  // CANIF 082, CANIF 161
  {
    // Tx buffering not supported so just return.
    return E_NOT_OK;
  }

  return E_OK;
}

注意到其中CanIf_Transmit的傳入?yún)?shù)CanTxPduId的使用方式:

txEntry = CanIf_FindTxPduEntry(CanTxPduId);

CanIf_FindTxPduEntry的函數(shù)原型如下

static const CanIf_TxPduConfigType * CanIf_FindTxPduEntry(PduIdType id)
{
  if (id >= CanIf_ConfigPtr- >InitConfig- >CanIfNumberOfCanTXPduIds) {
    return NULL;
  } else {
    return &CanIf_ConfigPtr- >InitConfig- >CanIfTxPduConfigPtr[id];
  }
}

就是以CanIf_Transmit的傳入?yún)?shù)CanTxPduId為下標(biāo),找到對(duì)應(yīng)的CanIfTxPduConfigData的數(shù)組成員。并獲取其屬性,對(duì)Can_Write函數(shù)的傳入?yún)?shù)進(jìn)行配置。調(diào)用Can_Write函數(shù)進(jìn)行發(fā)送。

四.發(fā)送確認(rèn)函數(shù):CanIf_TxConfirmation

CanIf_TxConfirmation是由Can模塊底層驅(qū)動(dòng)在PDU傳輸完成后調(diào)用的。之前講到Can_Write函數(shù)的其中一個(gè)傳入?yún)?shù):swPduHandle是用來(lái)在底層標(biāo)記傳輸?shù)腜DU ID,在更新MessageBuffer前記住PDU對(duì)應(yīng)的swPduHandle參數(shù),在對(duì)應(yīng)的PDU發(fā)出去后,底層驅(qū)動(dòng)函數(shù)調(diào)用CanIf_TxConfirmation傳入swPduHandle。

而我們的CanIf_TxConfirmation實(shí)現(xiàn)如下:

void CanIf_TxConfirmation(PduIdType canTxPduId)
{
  VALIDATE_NO_RV(CanIf_Global.initRun, CANIF_TXCONFIRMATION_ID, CANIF_E_UNINIT)
  VALIDATE_NO_RV(canTxPduId < CanIf_ConfigPtr- >InitConfig- >CanIfNumberOfCanTXPduIds, CANIF_TXCONFIRMATION_ID, CANIF_E_PARAM_LPDU);


  const CanIf_TxPduConfigType* entry =
    &CanIf_ConfigPtr- >InitConfig- >CanIfTxPduConfigPtr[canTxPduId];


      if (entry- >CanIfUserTxConfirmation != NULL)
      {
        CanIf_ChannelGetModeType mode;
        CanIf_GetPduMode(entry- >CanIfCanTxPduHthRef- >CanIfCanControllerIdRef, &mode);
        if ((mode == CANIF_GET_TX_ONLINE) || (mode == CANIF_GET_ONLINE)
            || (mode == CANIF_GET_OFFLINE_ACTIVE) || (mode == CANIF_GET_OFFLINE_ACTIVE_RX_ONLINE) )
        {
          entry- >CanIfUserTxConfirmation(entry- >CanIfTxPduId);  /* CANIF053 */
        }
      }
      return;
}

在這個(gè)函數(shù)中,會(huì)直接向上文CanIfTxPduConfigData配置的CanIfUserTxConfirmation中傳入swPduHandle。

而在CanIf_Transmit中,swPduHandle又是由CanIfTxPduConfigData配置的CanIfTxConfrimPduId決定的。所以CanIfTxConfrimPduId會(huì)作為參數(shù)傳入對(duì)應(yīng)的CanIfUserTxConfirmation。

這期的介紹就到這,本期介紹了CanIf主要實(shí)現(xiàn)的功能,主要函數(shù),主要的發(fā)送配置以及CanIf_Transmit,CanIf_TxConfirmation的機(jī)制,可以了解CanIf做了更進(jìn)一步的抽象,將HOH進(jìn)一步抽象為了PDU。各個(gè)AUTOSAR架構(gòu)的代碼實(shí)現(xiàn)并不一致,文中所有的函數(shù)實(shí)現(xiàn)和配置思路僅作參考。

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

    關(guān)注

    5

    文章

    97

    瀏覽量

    18427
  • 接收機(jī)
    +關(guān)注

    關(guān)注

    9

    文章

    1224

    瀏覽量

    54580
  • AUTOSAR
    +關(guān)注

    關(guān)注

    10

    文章

    380

    瀏覽量

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

    關(guān)注

    0

    文章

    96

    瀏覽量

    17336
  • CAN控制器
    +關(guān)注

    關(guān)注

    3

    文章

    75

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    ZYNQ進(jìn)階:PL端UART 發(fā)送設(shè)計(jì)案例

    主要是uart發(fā)送模塊的編碼講述,uart發(fā)送模塊設(shè)計(jì)主要分為波特率控制計(jì)數(shù)邏輯和按位發(fā)送邏輯,其具體編碼如下所示: 波特率控制計(jì)數(shù)
    的頭像 發(fā)表于 11-25 17:26 ?3983次閱讀
    ZYNQ進(jìn)階:PL端UART <b class='flag-5'>發(fā)送</b>設(shè)計(jì)案例

    使用CAN以及CANIF配置了S32K310的CAN驅(qū)動(dòng)模塊,如何進(jìn)行報(bào)文的接收呢?

    我使用CAN以及CANIF配置了S32K310的CAN驅(qū)動(dòng)模塊。我知道調(diào)用CAN_Write()函數(shù)進(jìn)行報(bào)文的發(fā)送,但我存有以下的一些問(wèn)題: 1.我該如何進(jìn)行報(bào)文的接收呢?我看到有一些文章說(shuō)能夠通過(guò)
    發(fā)表于 03-21 07:24

    求助,使用EB配置S32K310 MCAL CAN模塊時(shí)遇到的疑問(wèn)求解

    我在使用EB配置S32K310的MCAL的CAN模塊時(shí)產(chǎn)生一些疑問(wèn): 1.我在手冊(cè)中看到S32K310的MessageBuffer大小是64,那么HwObjectCount的最大配置數(shù)是否
    發(fā)表于 04-02 06:10

    cubemx配置的串口中斷發(fā)送HAL_UART_Transmit_IT不行

    為何HAL_UART_Transmit發(fā)送,改成HAL_UART_Transmit_IT就不行了cube配置的stm32f407系統(tǒng)其他代碼均一樣while(HAL_OK
    發(fā)表于 12-10 08:39

    請(qǐng)問(wèn)怎么用HAL_UART_Transmit發(fā)送數(shù)值型數(shù)據(jù)?

    如何用HAL_UART_Transmit 發(fā)送數(shù)值型數(shù)據(jù)?我看例程,都是發(fā)送字符型數(shù)據(jù)的uint8_t TxData[10]= "01234abcde"
    發(fā)表于 02-19 07:40

    AUTOSAR_MCAL_CAN_IM.pdf提示找不到 config/CanIf.xdm怎么解決?

    在 AUTOSAR_MCAL_CAN_IM.pdf 文件中聲明還需要 CanIf 插件來(lái)實(shí)現(xiàn) CAN 插件。但是,當(dāng)我嘗試在 Tresos 上添加 CanIf 模塊時(shí),它給出了一個(gè)錯(cuò)誤,提示找不到
    發(fā)表于 03-30 08:48

    在EB tresos 23.0.0中配置模塊時(shí)出錯(cuò)怎么解決?

    在EB tresos 23.0.0中配置模塊時(shí)出錯(cuò)模塊“CanIf_TS_T40D2M10I3R0”(在插件“CanIf_TS_T40D2M10I3R0”中定義)定義了無(wú)法找到的模式文件
    發(fā)表于 04-11 09:06

    Verilog實(shí)現(xiàn)UART之二:發(fā)送模塊

    波特率的16倍,因此對(duì)clk16x計(jì)數(shù)到16時(shí),發(fā)送D0;計(jì)數(shù)到32時(shí),發(fā)送D1……依此類推; 2.發(fā)送模塊代碼: module tx_module( inputclk16x,/*transm
    發(fā)表于 02-09 09:48 ?924次閱讀
    Verilog實(shí)現(xiàn)UART之二:<b class='flag-5'>發(fā)送</b>模塊

    發(fā)送隊(duì)列長(zhǎng)度功率控制

    無(wú)線多跳網(wǎng)絡(luò)具有信道時(shí)變性強(qiáng)、拓?fù)鋭?dòng)態(tài)變化等特點(diǎn),需要簡(jiǎn)單高效的功率控制機(jī)制。發(fā)射功率影響數(shù)據(jù)發(fā)送速率,而基于發(fā)送隊(duì)列長(zhǎng)度的功率控制機(jī)制存在可行解。為此,結(jié)合無(wú)線多跳網(wǎng)絡(luò)中間節(jié)點(diǎn)需要協(xié)
    發(fā)表于 03-20 15:07 ?0次下載
    <b class='flag-5'>發(fā)送</b>隊(duì)列長(zhǎng)度功率控制

    基于CAN總線進(jìn)行網(wǎng)絡(luò)管理與Transceiver的關(guān)系梳理

    Transceiver1145在初始化或者h(yuǎn)andler程序中檢查喚醒源,判斷到上電或者CAN總線干擾事件時(shí)會(huì)通知EcuM有喚醒事件,之后EcuM通過(guò)CanIf模塊調(diào)用CanTrcv_CheckWakeup檢查喚醒源。
    發(fā)表于 08-23 11:19 ?3568次閱讀
    基于CAN總線進(jìn)行網(wǎng)絡(luò)管理與Transceiver的關(guān)系梳理

    AUTOSAR通信之CanIf模塊簡(jiǎn)介1

    CAN接口模塊(下文簡(jiǎn)“CanIf”)位于底層CAN驅(qū)動(dòng)(CanDrv)、CAN收發(fā)器(CanTrcv)和上層通信服務(wù)層(CanSm、CanNm)、CAN傳輸協(xié)議(CanTp)、PDU路由器(PduR)之間。它表示上層通信層的CAN驅(qū)動(dòng)程序服務(wù)接口。
    的頭像 發(fā)表于 02-13 14:29 ?4932次閱讀
    AUTOSAR通信之<b class='flag-5'>CanIf</b>模塊簡(jiǎn)介1

    AUTOSAR通信之CanIf模塊簡(jiǎn)介2

    CAN接口模塊(下文簡(jiǎn)“CanIf”)位于底層CAN驅(qū)動(dòng)(CanDrv)、CAN收發(fā)器(CanTrcv)和上層通信服務(wù)層(CanSm、CanNm)、CAN傳輸協(xié)議(CanTp)、PDU路由器(PduR)之間。它表示上層通信層的CAN驅(qū)動(dòng)程序服務(wù)接口。
    的頭像 發(fā)表于 02-13 14:29 ?3154次閱讀
    AUTOSAR通信之<b class='flag-5'>CanIf</b>模塊簡(jiǎn)介2

    AUTOSAR通信之CanIf模塊簡(jiǎn)介3

    CAN接口模塊(下文簡(jiǎn)“CanIf”)位于底層CAN驅(qū)動(dòng)(CanDrv)、CAN收發(fā)器(CanTrcv)和上層通信服務(wù)層(CanSm、CanNm)、CAN傳輸協(xié)議(CanTp)、PDU路由器(PduR)之間。它表示上層通信層的CAN驅(qū)動(dòng)程序服務(wù)接口。
    的頭像 發(fā)表于 02-13 14:29 ?4431次閱讀
    AUTOSAR通信之<b class='flag-5'>CanIf</b>模塊簡(jiǎn)介3

    EthIf模塊的主要作用是什么?Ethif的常見(jiàn)函數(shù)接口有哪些呢?

    正如我們了解的CanIf模塊一樣,作為CAN收發(fā)器,CAN控制器的統(tǒng)一上層ECU抽象,能夠讓我們實(shí)現(xiàn)CanIf上層的應(yīng)用模塊與底層硬件解耦,大大增加了軟件的可移植性。
    的頭像 發(fā)表于 03-23 11:27 ?1938次閱讀

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

    前兩期,我們講了CAN模塊的發(fā)送邏輯,Canif模塊的發(fā)送邏輯發(fā)送確認(rèn)
    的頭像 發(fā)表于 07-17 15:54 ?3905次閱讀
    PduR模塊的<b class='flag-5'>發(fā)送機(jī)制</b> PduR這個(gè)模塊對(duì)什么進(jìn)行了抽象呢?