当前位置: 首页 > news >正文

作为主动唤醒的节点,ECU上电如何请求通讯

一个ECU如果作为主动唤醒的节点,ECU上电时可以通过以下方式请求通信

在这里插入图片描述
如上图所示,ECU在上电后,在OS起来后,可以通过在BSWM模块中完成NvM_ReadAll和相关BSW 模块初始化以及Rte_Start后,这个时候周期性Task已经可以正常调度了。

此时可以通过在BSWM模块中依次配置请求ALLOWCom和请求COMM_FULL_COMMUNICATION的模式请求,
在这里插入图片描述其中当BSWM请求ALLOWCom后,BswM会通过
BswM_Prv_Action_ComMAllowCom调用 ComM_CommunicationAllowed 来准许该通道可以进行通讯

void BswM_Prv_Action_ComMAllowCom( Std_ReturnType * action_RetVal_pu8, const void * dataActionParameter_pv)
{const BswM_Cfg_AC_ComMAllowComType_tst * dataActionPara_pst = (const BswM_Cfg_AC_ComMAllowComType_tst*)dataActionParameter_pv;*action_RetVal_pu8 = BSWM_NO_RET_VALUE;/* ComM Channel communication is allowed or blocked by invoking following function */ComM_CommunicationAllowed(dataActionPara_pst->idNetworkReference_u8, dataActionPara_pst->isComAllowed_b);return;
}

在这里插入图片描述在BSWM中请求COMM_FULL_COMMUNICATION后,BSWM模块会通过BswM_Prv_Action_ComMModeSwitch调用ComM_RequestComMode

void BswM_Prv_Action_ComMModeSwitch( Std_ReturnType * action_RetVal_pu8, const void * dataActionParameter_pv)
{const BswM_Cfg_AC_ComMModeSwitchType_tst * dataActionPara_pst = (const BswM_Cfg_AC_ComMModeSwitchType_tst*)dataActionParameter_pv;*action_RetVal_pu8 = BSWM_NO_RET_VALUE;if (BSWM_COMM_FULL_COMMUNICATION == dataActionPara_pst->dataComMRequestedMode_en){*action_RetVal_pu8 = ComM_RequestComMode(dataActionPara_pst->idComMUserReference_u8, COMM_FULL_COMMUNICATION);}else{	*action_RetVal_pu8 = ComM_RequestComMode(dataActionPara_pst->idComMUserReference_u8, COMM_NO_COMMUNICATION);}return;
}

将变量channelRamPtr_pst->ComMFullComWakeupRequestStatus_b = TRUE;
接着ComM会在对应Channel中的Mainfunction中通过ComM_Prv_RequestBusSm调用CanSM_RequestComMode
将变量置成COMM_FULL_COMMUNICATION
CanSM_ReqComM_Mode_en[network] = COMM_FULL_COMMUNICATION ;
接着会在CanSM的Mainfunction中

CanSM_MainFunctionCanSM_NetworkModeTrans((NetworkHandleType)CanSM_NetworkIdx_u8,CanSM_ReqComMode_uo);CanSM_NO2FULL_COM(network);/*Start the CAN controllers*/CanSM_StartCtrl(network);CanIf_SetControllerMode(CanSM_ControllerId_u8,CAN_CS_STARTED));lRetVal_en = lCtrlDrvConfig_pst->SetCrtlMode(lCtrlConfig_pst->CtrlCanCtrlRef, ControllerMode);Can_Integn_SetControllerMode (uint8 Controller_u8, Can_ControllerStateType Transition_en){return Can_SetControllerMode(Controller_u8, Transition_en);}

将Can控制器的状态设置为CAN_CS_STARTED

就可以正常通讯了。

相关文章:

  • String、StringBuilder、StringBuffer的区别
  • 翻转二叉树(简单)
  • 使用原生javascript手动实现一个可选链运算符
  • 牛客——暴力、技巧、字符与数组的使用(强强联合、字符数量)
  • 【工具】解析URL获取实际图片地址下载原始FFHQ图像
  • C++:实现线程池
  • VMware中虚拟机和主机的SSH远程连接
  • langchain使用推理模型如DeepSeek,删除回答中的推理过程<think></think>
  • 数据库实验10 函数存储
  • vitepress 复杂环境引入 mermaid
  • Python技巧:TX串口输入十六进制字符串,并获取输出,RX获取输出;循环1000次,通过分析RX输出,计算丢包率。
  • 使用docker配置Mysql
  • 深度学习:图神经网络GNN、GCN及其在推荐系统的应用
  • 人工智能 计算智能领域中分布估计算法的核心思想
  • 影刀RPA中使用AI模型
  • 【PhysUnits】1 SI Prefixes 实现解析(prefix.rs)
  • 常识补充(NVIDIA NVLink技术:打破GPU通信瓶颈的革命性互联技术)
  • 前端基础之《Vue(14)—组件通信》
  • 【LLM】什么是 MCPACPACA
  • 塔能水泵节能方案:精准驱动工厂能耗优化
  • 陈雯出任外交部离退休干部局局长,此前为外交部办公厅副主任
  • 上海市委政法委召开会议传达学习总书记重要讲话精神
  • 夜读丨最美的风景,在亲人的目光里
  • 胡祥|人工智能时代:文艺评论何为?
  • 广东省联社:积极推动改制组建农商联合银行工作
  • 国铁:今天预计发送旅客2110万人次,加开列车1896列