我是靠谱客的博主 暴躁小蘑菇,最近开发中收集的这篇文章主要介绍AUTOSAR源码分析之一,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

AUTOSAR CANIF驱动中间层接口分析:canif.c/can.c
1、驱动初始化
       在Can_Init关中断处理中安装CAN线中断:Irq_Save——————Irq_Restore
       StartupTask->CanIf_InitController->Can_InitController->Can_Init->ISR_INSTALL_ISR2("DCAN1Level0",Can1_InterruptHandler,CAN1_LEVEL_0,2,0)->Can1_InterruptHandler,直接封装Can_InterruptHandler
       初始化区分Can_GeneralType,中间是一个unit8 CanIndex,定义为一个驱动模块的实例,序号从0开始

2、数据发送:
     数据发送看到两种情况,一是通过定时器触发消息队列发送,另一种是直接触发发送例程

     A、TASK(SchM_BswService,任务注册)->CanNm_MainFunction_All_Channels->CanNm_MainFunction->CanNm_Internal_TickMessageCycleTime->CanNm_Internal_TransmitMessage->CanIf_Transmit->Can_Write
     B、GEN_TASK_HEAD(任务注册)->MainFunctionTask->Com_MainFunctionTx->Com_Internal_TriggerIPduSend->PduR_ComTransmit->PduR_ARC_Transmit->PduR_ARC_RouteTransmit->J1939Tp_Transmit->J1939Tp_Internal_DirectTransmit->CanIf_Transmit->Can_Write->CAN_Transmit

      发送数据地址包括uint32_t StdId(between 0 to 0x7FF),uint32_t ExtId(between 0 to 0x1FFFFFFF),可以以一个unit32表示?

3、数据接收:
       CAN_ARC_PROCESS_TYPE_INTERRUPT(中断方式):
       Can_InterruptHandler->handleRxMsgObject->CanIf_RxIndication->J1939Tp_RxIndication/CanTp_RxIndication/PduR_CanIfRxIndication/CanNm_RxIndication
       CAN_ARC_PROCESS_TYPE_POLLING(轮询方式):
       GEN_TASK_HEAD(任务注册)->MainFunctionTask->Com_MainFunctionRx-> memcpy(IPdu->ComIPduDeferredDataPtr,IPdu->ComIPduDataPtr,IPdu->ComIPduSize);

      未见调用,可能是自定义或者静态配置中断向量表
      Can_1_RxIsr->Can_RxIsr->CAN_Receive

最后

以上就是暴躁小蘑菇为你收集整理的AUTOSAR源码分析之一的全部内容,希望文章能够帮你解决AUTOSAR源码分析之一所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部