编辑推荐: |
本文主要介绍了AUTOSAR实战教程
- 模式管理BswM与其他各模块的交互相关内容。 希望对您的学习有所帮助。
本文来自于微信公众号汽车嵌入式学堂,由火龙果软件Linda编辑、推荐。 |
|
BswM与EcuM
EcuM指示唤醒源状态给BswM。在EcuM控制上下电期间与BswM联系尤其密切!

reset vector -> init stack and memory -> main()
-> EcuM_Init() -> MCAL_Init() -> StartOS()
-> BswM_StartupOne() -> MemStack_Init() /NvM_ReadALL
- > BswM_StartupTwo() -> Rte_start() - >
进入main函数之前会初始化 stack 和 memory .bss .data 这些?
main函数里面第一行就是EcuM_Init() 函数
EcuM_Init() 里面干了两件事,调用MCAL的各个init 函数,然后 startPreOS()
startOS() 只是一个while(1)的无限循环, TimerISR去触发Task运行,Task切换这些OS内核服务还没开始
之后就到了BswM模块,最重要的就是通过Rte_start()函数激活OS counter,开启scheduler
table的运行,至此task的调度开始运行。


在上电阶段EcuM来执行BswM初始化。在Flex类型的ECUM中:在Main函数中首先完成堆栈空间的初始化,然后调用EcuM_Init函数进入到后续的StartPreOS,StartOS阶段,在开启OS的初始化函数中调用EcuM_StartupTwo进行第二启动阶段的初始化,最后就是进入StartPostOS阶段,如完成BswM模块的初始化,进而将控制权转交给BswM模块(如上图)。

在唤醒的时候,EcuM要通过BswM_EcuM_CurrentWakeup()来告知BswM当前唤醒源有效。所以BswM也要配置引用的ECUM唤醒源。




BswM调用EcuM_SelectShutdownTarget更新ShutdownTarget和Mode,设置shutdown的目标是复位 /休眠/下电.
EcuM_GoDown(0)-->改变全局变量 EcuM_Prv_flgGoDown_b
-->在EcuM_Mainfunction中执行EcuM_Prv_ProceedShutdown
-->写入shutdown info到NvM/EcuM_OnGoOffOne()
-->==>ShutdownOS==>ShutdownHook ==>EcuM_Shutdown
==>Reset(EcuM_AL_Reset)/or/ SwitchOff(EcuM_AL_SwitchOff)
-->EcuM_OnGoOffTwo()...


BswM与ComM
来自ComM的模式切换指示通过BswM进一步传给SWC。BswM可以作为CommUser向ComM请求通讯模式切换。
BSWM模块的BswMModeRequestPorts容器里面可以配置BswMComMIndication的MRP来获取ComM某个Channel的状态(ComM在通道发生切换的BswM_ComM_CurrentMode),我们可以根据获取的状态来实现一些特定的目的,比如在RUN->POSTRUN的时候,获取ComM==NO_COMM是状态跳转的必要条件。

BSWM模块的BswMActions容器里面可以配置BswMComMAllowCom的Action来改变某个Channel的状态。比如在被动唤醒的时候,EcuM验证唤醒源无误之后会向ComM发起FULL_COMM请求,同时会向BswM发起CommAllow请求。

BswM与CanSM
BSWM模块的BswMModeRequestPorts容器里面可以配置BswMCanSMIndication的MRP来获取CanSM某个Channel的状态(CanSM在通道发生切换用BswM_CanSM_CurrentState)。


BswM与Dcm
Dcm对通信的控制,比如$28服务请求关闭通信、Dcm对ECU的控制比如$11服务服务或$10 02往Bootloader跳转都需要BswM的协助。
DCM_ENABLE_RX_TX_NORM
DCM_ENABLE_RX_DISABLE_TX_NORM
DCM_DISABLE_RX_ENABLE_TX_NORM
DCM_DISABLE_RX_TX_NORMAL
DCM_ENABLE_RX_TX_NM
DCM_ENABLE_RX_DISABLE_TX_NM
DCM_DISABLE_RX_ENABLE_TX_NM
DCM_DISABLE_RX_TX_NM
DCM_ENABLE_RX_TX_NORM_NM
DCM_ENABLE_RX_DISABLE_TX_NORM_NM
DCM_DISABLE_RX_ENABLE_TX_NORM_NM
DCM_DISABLE_RX_TX_NORM_NM
Dcm在发生通道状态切换的时候会调用BswM_Dcm_CommunicationMode_CurrentState()函数通知到BSW获取到这个MRP的信息后回去停/发对应Channel的Ipdu_Group来实现通信的开关。


整个过程为:Dcm ECU Reset-->RTE-->BswM中执行-->ECUM执行复位。
BswM与DEM
BswM与DEM的关系主要体现在:
1.执行下电对扩展数据、冻结帧的存储
2.执行下电时候对Confirmed DTC的存储
3.执行下电时候对老化计数器的更新
4.管理操作循环Opertion Cycle
上电初始化:
Dem_SetOperationCycleState(OperationCycleId, CycleState
= DEM_CYCLE_STATE_START)
下电:
Dem_SetOperationCycleState (0,DEM_CYCLE_STATE_END);//结束本次点火循环
注意:在11 01使能复位的时候,要走完正规下电流程,否则老化计数器无法计数!

EcuM_GoDown()
EcuM_GoDown(0)-->改变全局变量EcuM_Prv_flgGoDown_b
-->在EcuM_Mainfunction中执行EcuM_Prv_ProceedShutdown
-->写入shutdown info到NvM/EcuM_OnGoOffOne()
-->==>ShutdownOS==>ShutdownHook ==>EcuM_Shutdown
==>Reset(EcuM_AL_Reset)/or/ SwitchOff(EcuM_AL_SwitchOff)
取决于所选择的ShutdownTarget(RESET or OFF)
-->EcuM_OnGoOffTwo()...集成商自定义的动作 |