[AutoSar]BSW_Com07 CAN報文接收流程的函數調用

目錄

  • 關鍵詞
  • 平臺說明
  • 一、背景
  • 二、順序總覽
  • 三、函數說明
    • 3.1 Com_RxIndication()

??

關鍵詞

嵌入式、C語言、autosar、OS、BSW

平臺說明

項目Value
OSautosar OS
autosar廠商vector ,
芯片廠商TI 英飛凌
編程語言C,C++
編譯器HighTec (GCC)
autosar版本4.3.1

在這里插入圖片描述
>>>>>回到總目錄<<<<<<

一、背景

??介紹了一個信號如何從底層傳輸到應用層的函數調用。note:該報文類型為應用報文
處理方式為輪詢模式

二、順序總覽

??
在這里插入圖片描述
??1.因為CAN_RX_PROCESSING is set to POLLING,中斷模式的情況后續更新.所以由BSW 輪詢調度Can_MainFunction_Read()。Can_MainFunction_Read()會獲取can 控制器中的寄存器數據。它會查詢當前所有MO或接收報文郵箱是否有報文被成功接收,如果有,則調用
CanIf_RxIndication 函數來向上層(PDUR)通知有報文被接收。一直通知到COM層。
??2.到了COM之后進行解包,APP 通過RTE_read_XX–>Com_ReceiveSignal() 從COM中獲取數據。
??
??
??
??

三、函數說明

3.1 Com_RxIndication()

對數據進行解包。在這里插入圖片描述

FUNC(void, COM_CODE) Com_RxIndication(PduIdType RxPduId, P2CONST(PduInfoType, AUTOMATIC, COM_APPL_DATA) PduInfoPtr)
{
(void) Com_RxIndication_Processing((Com_RxPduInfoIterType) RxPduId, PduInfoPtr);
}
FUNC(boolean, COM_CODE) Com_RxIndication_Processing(Com_RxPduInfoIterType rxPduId, P2CONST(PduInfoType, AUTOMATIC, COM_APPL_DATA) PduInfoPtr)
{Com_RxIndication_ProcessPdu(rxPduId, &PduInfoLocal);      /* SBSW_COM_FCTCALL_WITH_P2CONST */
}
COM_LOCAL_INLINE FUNC(void, COM_CODE) Com_RxIndication_ProcessPdu(Com_RxPduInfoIterType comRxPduInfoIdx, P2CONST(PduInfoType, AUTOMATIC, COM_APPL_DATA) PduInfoPtr)
{
# if (COM_EXISTS_DEFERRED_SIGNALPROCESSINGOFRXPDUINFO == STD_ON)/* #10 If the passed Rx ComIPdu is handled deferred */if(Com_IsHandleRxPduDeferredUsedOfRxPduInfo(comRxPduInfoIdx)) /* COV_COM_FEATURE_ALWAYS_TRUE_TX */{SchM_Enter_Com_COM_EXCLUSIVE_AREA_RX();
#  if (COM_RXDEFPDUBUFFERUSEDOFRXPDUINFO == STD_ON)switch (Com_GetTypeOfRxPduInfo(comRxPduInfoIdx)){
#   if(COM_EXISTS_NORMAL_TYPEOFRXPDUINFO == STD_ON)case COM_NORMAL_TYPEOFRXPDUINFO:/* #20 If the passed Rx ComIPdu is not a TP Pdu and no NULL_PTR, copy the passed Sdu data to the deferred Pdu buffer */if(PduInfoPtr->SduDataPtr != NULL_PTR){if(Com_IsRxDefPduBufferUsedOfRxPduInfo(comRxPduInfoIdx))      /* COV_COM_CSL03_ISUSED_OPTIONAL_INDIRECTION */{Com_RxDefPduBufferLengthOfRxPduInfoType numberOfBytes =((Com_GetRxDefPduBufferLengthOfRxPduInfo(comRxPduInfoIdx)) >PduInfoPtr->SduLength) ? (Com_RxDefPduBufferLengthOfRxPduInfoType) (PduInfoPtr->SduLength) : Com_GetRxDefPduBufferLengthOfRxPduInfo(comRxPduInfoIdx);VStdMemCpyRamToRam(Com_GetAddrRxDefPduBuffer(Com_GetRxDefPduBufferStartIdxOfRxPduInfo(comRxPduInfoIdx)), (P2CONST(uint8, AUTOMATIC, COM_APPL_DATA)) PduInfoPtr->SduDataPtr, numberOfBytes); /* PRQA S 0315 */ /* MD_MSR_VStdLibCopy */ /* SBSW_COM_MEM_CPY_2RAM */}}break;
#   endif
#   if(COM_RXTPINFOUSEDOFRXPDUINFO == STD_ON)case COM_TP_TYPEOFRXPDUINFO:break;
#   endifdefault: /* COV_COM_MISRA */break;}
#  endif
#  if (COM_RXDEFERREDEVENTCACHE == STD_ON)/* #30 If the passed ComIPdu is not cached yet, add the Rx ComIPdu to the deferred event cache */if(Com_GetHandleRxPduDeferred(Com_GetHandleRxPduDeferredIdxOfRxPduInfo(comRxPduInfoIdx)) == 0u)     /* COV_COM_RXDEFERRED_PROCESSING */{Com_RxIndication_CacheDeferredEvent(comRxPduInfoIdx);}
#  endif/* #40 Store the passed Sdu length in the handle deferred buffer */Com_SetHandleRxPduDeferred(Com_GetHandleRxPduDeferredIdxOfRxPduInfo(comRxPduInfoIdx), (PduInfoPtr->SduLength + 1u));        /* SBSW_COM_CSL03 */
#  if(COM_GWEVENTCACHE == STD_ON)Com_RxIndication_CacheDeferredDescriptionGwEvent(comRxPduInfoIdx);
#  endifSchM_Exit_Com_COM_EXCLUSIVE_AREA_RX();}
# endif
# if ((COM_EXISTS_DEFERRED_SIGNALPROCESSINGOFRXPDUINFO == STD_ON) && (COM_EXISTS_IMMEDIATE_SIGNALPROCESSINGOFRXPDUINFO == STD_ON))else
# endif
# if (COM_EXISTS_IMMEDIATE_SIGNALPROCESSINGOFRXPDUINFO == STD_ON)/* #50 Otherwise process the Rx ComIPdu immediate */{FctPtrCacheStrct immediateFctPtrCacheStrct;#  if (COM_RXIMMEDIATEFCTPTRCACHE == STD_ON)uint32 fctPtrCache[COM_RXIMMEDIATEFCTPTRCACHESIZE];immediateFctPtrCacheStrct.ptrToCache = fctPtrCache;immediateFctPtrCacheStrct.cacheSize = COM_RXIMMEDIATEFCTPTRCACHESIZE;immediateFctPtrCacheStrct.cacheIndex = 0;
#  elseimmediateFctPtrCacheStrct.ptrToCache = NULL_PTR;immediateFctPtrCacheStrct.cacheSize = 0;immediateFctPtrCacheStrct.cacheIndex = 0;
#  endifSchM_Enter_Com_COM_EXCLUSIVE_AREA_RX();
#  if (COM_RXSIGINFOENDIDXOFRXPDUINFO == STD_ON)/* #60 Do Rx ComSignal processing */Com_RxProcessing_RxPduSigEvent(comRxPduInfoIdx, PduInfoPtr, &immediateFctPtrCacheStrct);    /* SBSW_COM_FCTCALL_WITH_P2CONST_AND_FCTPTR_CACHE_PTR_1 */
#  endif
#  if (COM_RXSIGGRPINFOINDENDIDXOFRXPDUINFO == STD_ON)/* #70 Do Rx ComSignalGroup processing */Com_RxProcessing_RxPduSigGrpEvent(comRxPduInfoIdx, PduInfoPtr, &immediateFctPtrCacheStrct); /* SBSW_COM_FCTCALL_WITH_P2CONST_AND_FCTPTR_CACHE_PTR_1 */
#  endif
#  if (COM_GWTXPDUDESCRIPTIONINFOUSEDOFRXPDUINFO == STD_ON)/* #75 If rxPdu has any configured GwDescriptions, do gateway description processing */if(Com_IsGwTxPduDescriptionInfoUsedOfRxPduInfo(comRxPduInfoIdx))    /* COV_COM_FEATURE_ALWAYS_TRUE_TX */{SchM_Enter_Com_COM_EXCLUSIVE_AREA_TX();Com_GwDescriptionEvent(comRxPduInfoIdx,      /* SBSW_COM_FCTCALL_WITH_P2CONST */PduInfoPtr, FALSE);SchM_Exit_Com_COM_EXCLUSIVE_AREA_TX();}
#  endif#  if (COM_RXTOUTINFOUSEDOFRXPDUINFO == STD_ON)/* #80 If the passed Rx ComIPdu has a timeout, remove the timeout occurred flag */if(Com_IsRxTOutInfoUsedOfRxPduInfo(comRxPduInfoIdx))        /* COV_COM_FEATURE_ALWAYS_TRUE_TX */{Com_LMgt_RemoveOccurredFlag(Com_GetRxTOutInfoIdxOfRxPduInfo(comRxPduInfoIdx));    /* SBSW_COM_CSL02_CSL03 */}
#  endifSchM_Exit_Com_COM_EXCLUSIVE_AREA_RX();#  if (COM_RXIMMEDIATEFCTPTRCACHE == STD_ON)/* #90 Call all cached notification or invalid notifications and clear the immediate function pointer cache */Com_ProcessRxFctPtrCache(&immediateFctPtrCacheStrct);       /* SBSW_COM_FCTPTR_CACHE_PTR_1 */
#  endifCOM_DUMMY_STATEMENT(immediateFctPtrCacheStrct);     /* PRQA S 1338, 2983, 3112 */ /* MD_MSR_DummyStmt */ /* lint -e{438} */}     /* Immediate signal processing */
# endif
}       /* PRQA S 6050 */ /* MD_MSR_STCAL */
#endif
}

在這里插入圖片描述
>>>>>回到總目錄<<<<<<

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/713526.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713526.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713526.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

貝葉斯定理與條件獨立假設:樸素貝葉斯分類方法深度解讀

今天給大家分享的是樸素貝葉斯算法&#xff0c;這個算法在實際使用中不是很多&#xff0c;因為現在很多算法已經發展的很好&#xff0c;性能上也比樸素貝葉斯算法的好很多&#xff0c;因此在實際中我們其實看到在實際應用中樸素貝葉斯算法的使用已經比較少&#xff0c;即使出現…

HotFix原理學習 IL2CPP 學習

原文鏈接&#xff1a;Unity 游戲用XLua的HotFix實現熱更原理揭秘-CSDN博客 本文通過對XLua的HoxFix使用原理的研究揭示出來這樣的一套方法。這個方法的 第一步&#xff1a;通過對C#的類與函數設置Hotfix標簽。來標識需要支持熱更的類和函數。第二步&#xff1a;生成函數連接器…

好視通視頻會議系統存在任意文件讀取漏洞復現 [附POC]

漏洞簡介 好視通視頻會議是由深圳市華視瑞通信息技術有限公司開發&#xff0c;其在國內率先推出了3G互聯網視頻會議&#xff0c;并成功應用于SAAS領域。 資產 FOFA:app"好視通-視頻會議" POC GET /register/toDownload.do?fileName../../../../../../../../../.…

代碼隨想錄-回溯算法

組合 //未剪枝 class Solution {List<List<Integer>> ans new ArrayList<>();Deque<Integer> path new LinkedList<>();public List<List<Integer>> combine(int n, int k) {backtracking(n, k, 1);return ans;}public void back…

MySql安全加固:可信IP地址訪問控制 設置密碼復雜度

MySql安全加固&#xff1a;可信IP地址訪問控制 & 設置密碼復雜度 1.1 可信IP地址訪問控制1.2 設置密碼復雜度 &#x1f496;The Begin&#x1f496;點點關注&#xff0c;收藏不迷路&#x1f496; 1.1 可信IP地址訪問控制 當您在創建用戶時使用’%作為主機部分&#xff0c;…

【C語言】字符型變量and整型變量的類型轉換

一、將字符型變量轉換為整型變量 char c A; int i (int)c; 二、將整型變量轉換成字符型變量 int i 65; char c (char)i;

Unity 實戰一:這幾年被廣告刷屏的沙雕跑酷游戲

姐就是女王&#xff0c;功夫跑酷&#xff0c;揀槍干架跑酷等 核心不用說了吧&#xff1a; 就是一個人不斷地跑&#xff0c;獲取不同屬性&#xff0c;判斷是否過關 好的&#xff0c;以下是一篇基于Unity 開發簡易版有障礙物的跑酷游戲的教程博客&#xff1a; 在這篇博客中&…

static在c語言中的作用

1、關鍵字static的作用是什么&#xff1f; 這個簡單的問題很少有人能回答完全。在C語言中&#xff0c;關鍵字static有三個明顯的作用&#xff1a; 1). 在函數體&#xff0c;一個被聲明為靜態的變量在這一函數被調用過程中維持其值不變。 2). 在模塊內(但在函數體外)&#xf…

Linux tload 命令教程:實時監控系統負載(附案例詳解和注意事項)

Linux tload 命令介紹 tload 是一個用于監控系統負載的命令行工具。它以圖形化的方式顯示系統的負載情況&#xff0c;幫助你了解 CPU 和內存的使用情況。 Linux tload 命令適用的 Linux 版本 tload 在大多數 Linux 發行版中都可用。如果你在某些特定的 Linux 發行版上找不到…

java數據結構與算法刷題-----LeetCode437. 路徑總和 III(前綴和必須掌握)

java數據結構與算法刷題目錄&#xff08;劍指Offer、LeetCode、ACM&#xff09;-----主目錄-----持續更新(進不去說明我沒寫完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目錄 1. 深度優先2. 前綴和 1. 深度優先 解題思路&#xff1a;時間復…

kibana7.17.7 將數據導出csv文件

配置kibana文件 首先先配置kibana.yaml內容如下&#xff0c;這里假設我的服務器ip地址為192.168.130.128&#xff0c;elasticsearch的ip地址為&#xff1a;192.168.130.129:9200&#xff0c;192.168.130.130:9200&#xff1a; server.host: "192.168.130.128" serv…

每日OJ題_分治歸并③_力扣315. 計算右側小于當前元素的個數

目錄 315. 計算右側小于當前元素的個數 解析代碼 力扣315. 計算右側小于當前元素的個數 315. 計算右側小于當前元素的個數 難度 困難 給你一個整數數組 nums &#xff0c;按要求返回一個新數組 counts 。數組 counts 有該性質&#xff1a; counts[i] 的值是 nums[i] 右側…

MongoDB 未授權訪問

開啟 MongoDB 服務時不添加任何參數時,默認是沒有權限驗證的,而且可以遠程訪問數據庫&#xff0c; 登錄的 用戶可以通過默認端口無需密碼對數據庫進行增、刪、改、查等任意高危操作。 防護 為 MongoDB 添 加 認 證 &#xff1a; 1)MongoDB 啟動時添加–auth參數 2)給 MongoD…

Java 讀寫 ini ( 調用 Windows Api )

市面上讀取 ini 的包都是 讀取整個文件到內存中,再獲取和修改值, 最后自己再調用保存文件, 這種方式在讀取大文件的時候 非常的不友好. windows api 中有現成的高效方法 安裝 jna-platform (里面封裝了各個系統的 api ,直接用就行. 不用再手動寫固定的函數定義) jna-platfor…

JPA常見異常 JPA可能拋出的異常

1、EntityNotFoundException&#xff08;實體不存在異常&#xff09;: 通過 JPA 查找一個不存在的實體。 2、NonUniqueResultException&#xff08;非唯一結果異常&#xff09;&#xff1a; 查詢返回了多個結果&#xff0c;但期望只有一個結果。 3、TransactionRequiredExcep…

AutoSAR(基礎入門篇)13.1-EB Tresos使用初探

目錄 一、新建工程 二、添加和刪除模塊 三、界面 四、代碼生成 1、直接生成代碼

Mac 以SH腳本安裝Arthas

SH腳本安裝Aethas curl -L https://alibaba.github.io/arthas/install.sh | sh安裝腳本說明 示例源文件&#xff1a; #! /bin/bash# temp file of as.sh TEMP_ARTHAS_FILE"./as.sh.$$"# target file of as.sh TARGET_ARTHAS_FILE"./as.sh"# update timeo…

微服務中的Feign:優雅實現遠程調用的秘密武器(一)

本系列文章簡介&#xff1a; 本系列文章將深入探討Feign的特點、原理以及在微服務中的應用場景&#xff0c;幫助讀者更好地理解和使用這個優秀的遠程調用工具。無論您是初學者還是有經驗的開發人員&#xff0c;本文都將為您揭示Feign的秘密&#xff0c;并帶您一起走進微服務的世…

人類與機器的不同交流特點

對人類而言&#xff0c;事實是用來交流的&#xff0c;價值是用來自我交流的。事實是用來交流的&#xff0c;是通過提供準確、可證實的信息來傳遞和共享知識的。事實具有客觀性&#xff0c;不受個人主觀意見的影響。通過分享事實&#xff0c;人們可以更好地理解世界和彼此&#…

Android挖取原圖手指觸點區域RectF(并框線標記)放大到ImageView寬高與矩陣mapRadius,Kotlin

Android挖取原圖手指觸點區域RectF(并框線標記)放大到ImageView寬高與矩陣mapRadius&#xff0c;Kotlin 這里 Android挖取原圖中心區域RectF(并框線標記)放大到ImageView寬高&#xff0c;Kotlin-CSDN博客 實現的是把原圖中心區域的一片小圖挖取出來放大放到下面的ImageView里面…