[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;
#   endif
      default: /* 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);
#  endif
    SchM_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;
#  else
    immediateFctPtrCacheStrct.ptrToCache = NULL_PTR;
    immediateFctPtrCacheStrct.cacheSize = 0;
    immediateFctPtrCacheStrct.cacheIndex = 0;
#  endif

    SchM_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 */
    }
#  endif
    SchM_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 */
#  endif

    COM_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.mfbz.cn/a/421433.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

win11安装nodejs

一、下载安装包 链接: https://pan.baidu.com/s/1_df8s1UlgNNaewWrWgI59A?pwdpsjm 提取码: psjm 二、安装步骤 1.双击安装包 2.Next> 3.勾选之后&#xff0c;Next> 4.点击Change&#xff0c;选择你要安装的路径&#xff0c;然后Next> 5.点击Install安装 二、…

MySQL 存储过程批量插入总结

功能需求背景&#xff1a;今天接到产品经理核心业务表的数据压测功能&#xff0c;让我向核心业务表插入百万级的业务量数据&#xff0c;我首先想到的办法就是存储过程实现数据的批量 。 由于无法提供核心业务表&#xff0c;本文仅仅提供我刚刚自己创建的表bds_base_user 表做相…

【Vue3】深入理解Vue中的ref属性

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

VSCode通过SSH连接Docker环境进行开发

文章目录 VSCode 插件Docker 镜像构建镜像部署环境 VSCode 连接本地Docker容器VSCode SSH连接Docker容器VSCode 打开容器内目录文件 VSCode 插件 Remote - SSH Docker 镜像 https://hub.docker.com/_/golang # Golang 镜像 docker pull golang:1.22构建镜像 Dockerfile F…

Shell条件判断

一、文件类型判断 示例&#xff1a; # 判断文件是否存在&#xff0c;存在为0&#xff0c; 不存在为1 [rootlocalhost ~]# test -e person.txt [rootlocalhost ~]# echo $? 0 [rootlocalhost ~]# [rootlocalhost ~]# test -e aba [rootlocalhost ~]# echo $? 1 # 出test外&am…

SaaS 电商设计 (九) 动态化且易扩展的实现购物车底部弹层(附:一套普适的线上功能切量的发布方案)

目录 一.背景1.1 业务背景1.2 技术负债 二.技术目标三.方案设计3.1 解决移动端频繁发版3.1.1 场景分析3.1.2 技术方案 3.2 减少后端坏味道代码&无法灵活扩展问题3.2.1 通过抽象接口完成各自单独楼层渲染逻辑3.2.2 通过配置能力做到部分字段可配 四.升级上线(普适于高并发大…

小程序实现定位城市切换且城市根据首字母A-Z排序后端数据实现逻辑

场景&#xff1a; 话不多说后端提供数据实现步骤&#xff1a; 1.controller层 Api(tags {"[地区]-城市相关接口"}) RestController RequestMapping("region") Slf4j public class RegionController extends BaseController {Resourceprivate RegionServ…

盲人出行:科技创造美好的未来

在繁忙的都市中&#xff0c;我每天都要面对许多挑战&#xff0c;盲人出行安全保障一直难以得到落实。我看不见这个世界&#xff0c;只能依靠触觉和听觉来感知周围的一切。然而&#xff0c;我从未放弃过对生活的热爱和对未来的憧憬。在一次机缘巧合下&#xff0c;我认识了一款名…

信息系统项目管理师--项目管理概述

开展项⽬是为了通过可交付成果达成⽬标。⽬标是所指向的结果、要取得的战略地位、要达到的⽬的、要获得的成果、要⽣产的产品或者要提供的服务。 可交付成果形成的独特并可验证的产品、成果或服务。可交付成果可能是有形的&#xff0c;也可能是⽆形的。产⽣⼀个或多个可交付成…

【ArcGIS】渔网分割提取栅格图+网格化分析图绘制

ArcGIS按渔网分割提取栅格图并绘制网格化分析图 准备数据操作步骤步骤1&#xff1a;创建渔网&#xff08;Create Fishnet&#xff09;步骤2&#xff1a;栅格数据处理步骤3&#xff1a;栅格插值步骤4&#xff1a;数据关联 参考 网格化的目的是让各个数据更加标准化的进行统计。因…

C语言-指针(上)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 本篇文章将为大家介绍C语言中的核心内容-指针&#xff0c;指针在C语言的中知识内容比…

全新挑战:微软 AI 奥德赛邀您全方位 Get AI 应用技能!

点击蓝字 关注我们 AI 风暴的火速席卷&#xff0c;大语言模型的不断迭代&#xff0c;在企业面临着机遇与挑战并存的新形势下&#xff0c;许许多多的个人也在经历着职业生涯的巨大压力与变革。在这场人工智能的浪潮之中&#xff0c;AI 技能无疑是我们破局焕新的关键利器。 为助力…

Dell R730 2U服务器实践3:安装英伟达上代专业AI训练Nvidia P4计算卡

Dell R730是一款非常流行的服务器&#xff0c;2U的机箱可以放入两张显卡&#xff0c;这次先用一张英伟达上代专业级AI训练卡&#xff1a;P4卡做实验&#xff0c;本文记录安装过程。 简洁步骤&#xff1a; 打开机箱将P4显卡插在4号槽位关闭机箱安装驱动 详细步骤&#xff1a; 对…

k8s单机部署zookeeper

&#xff08;作者&#xff1a;陈玓玏&#xff09; 拉取镜像&#xff1a;docker pull zookeeper&#xff1b;编辑yaml&#xff1a; apiVersion: v1 kind: Service metadata:name: zookeeperlabels:app: zookeeper spec:ports:- name: clientport: 2181protocol: TCPtargetP…

图片说话软件一览

目录 ~~tokkingheads~~~~myvoiceyourface~~~~avatarify~~wav2lip(值得研究) 最近刷到很多古画唱歌视频&#xff0c;搜了一下&#xff0c;好多教你怎么做的&#xff0c;今天来尝试了一下&#xff0c;感觉不咋地&#xff0c;就没有成功的 tokkingheads 网页一直转圈&#xff0c;…

Python环境下一种改进的基于梯度下降的自适应短时傅里叶变换

在数字信号处理技术中&#xff0c;傅里叶变换及其逆变换是一种信号时频分析方法。该方法将信号的时域描述及频域描述联系在一起&#xff0c;时域信号可通过正变换转变为频域信号&#xff0c;频域信号可通过逆变换转变为时域信号进行分析。但傅里叶变换及其逆变换是一种信号的整…

基于阿里云平台 通过树莓派实现 1:1人脸识别

之前的学习中&#xff0c;曾经在香橙派上使用阿里云平台的服务实现过类型识别&#xff1a; 使用香橙派并基于Linux实现最终版智能垃圾桶项目 --- 下_香橙派 项目-CSDN博客 现在&#xff0c;尝试在树莓派上通过阿里云平台的服务实现人脸识别&#xff01; 通过VScode远程连接树莓…

EasyRecovery数据恢复软件2024最新版包括Windows和Mac

EasyRecovery数据恢复软件适用于多种环境和使用场景。首先&#xff0c;它适用于各种操作系统&#xff0c;包括Windows和Mac。无论用户使用的是哪种操作系统&#xff0c;都可以使用该软件进行数据恢复。 其次&#xff0c;EasyRecovery支持从各种存储设备和媒介中恢复数据&#…

iOS消息转发流程

当向Objc对象发送消息时&#xff0c;如果找到对象对应的方法&#xff0c;就会进入消息转发流程&#xff0c;给开发者提供一些最后的机会处理消息无法发送问题&#xff0c;以免出现程序崩溃。 1. 回调对象的resolveInstanceMethod方法&#xff0c;在这个方法中&#xff0c;允许开…

【图论】【并集查找】【C++算法】928. 尽量减少恶意软件的传播 II

作者推荐 动态规划的时间复杂度优化 涉及知识点 图论 并集查找 LeetCode928. 尽量减少恶意软件的传播 II 给定一个由 n 个节点组成的网络&#xff0c;用 n x n 个邻接矩阵 graph 表示。在节点网络中&#xff0c;只有当 graph[i][j] 1 时&#xff0c;节点 i 能够直接连接到…
最新文章