在模式管理(2) -- BswM我们了解到,BswM_Init由EcuM_StartupTwo调用,这也意味着,在调用该函数之后,BswM此时的状态处于BSWM_INIT。但根据现象来看,INIT的状态是没法收发报文的。为什么呢?照常理说,在EcuM_Init CAN、CanIF等都已经初始化了,可以发报文了呀。这就要到代码中去找答案了。
首先我们要了解Com层的报文发送是由谁来主导的?CanSM和ComM。那CanSM和ComM的状态又是由谁来控制的呢?这里就引入了今天的话题,BswM(Basic Sofeware Mode Manager)。既然是基础软件管理,那么CanSM和ComM必定受BswM管理。具体怎么管理的?我们会用一个CAN报文唤醒的例子来解读,今天我们先简单将BswM代码梳理一下。
1.BswM状态分析
在Vector的代码中,BswM也设计了一套状态机,该状态机沿用了ASR3中EcuM的状态行为,这里暂且将其叫Ecu St