您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   模型库  
会员   
   
AI 智能化软件测试方法与实践
5月23-24日 上海+在线
人工智能.机器学习TensorFlow
5月22-23日 北京
图数据库与知识图谱
5月22-23日 北京
   
 
 订阅
AUTOSAR实战教程 - 模式管理BswM与其他各模块的交互
 
作者:软件开发王老师
  117  次浏览      8 次
 2025-5-8
 
编辑推荐:
本文主要介绍了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()...集成商自定义的动作

   
117 次浏览       8
 
相关文章

CMM之后对CMMI的思考
对软件研发项目管理的深入探讨
软件过程改进
软件过程改进的实现
 
相关文档

软件过程改进框架
软件过程改进的CMM-TSP-PSP模型
过程塑造(小型软件团队过程改进)
软件过程改进:经验和教训
 
相关课程

以"我"为中心的过程改进(iProcess )
iProcess过程改进实践
CMMI体系与实践
基于CMMI标准的软件质量保证

最新活动计划
人工智能.机器学习TensorFlow 5-22[北京]
AI智能化软件测试方法与实践 5-23[北京]
图数据库与知识图谱 5-22[北京]
DeepSeek大模型应用开发 6-12[厦门]
基于 UML 和EA进行分析设计 6-23[北京]
嵌入式软件架构-高级实践 7-9[北京]
 
 
最新文章
iPerson的过程观:要 过程 or 结果
基于模型的需求管理方法与工具
敏捷产品管理之 Story
敏捷开发需求管理(产品backlog)
Kanban看板管理实践精要
最新课程
基于iProcess的敏捷过程
软件开发过程中的项目管理
持续集成与敏捷开发
敏捷过程实践
敏捷测试-简单而可行
更多...   
成功案例
英特尔 SCRUM-敏捷开发实战
某著名汽车 敏捷开发过程与管理实践
北京 敏捷开发过程与项目管理
东方证券 基于看板的敏捷方法实践
亚信 工作量估算
更多...