当前位置: 首页 > 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

就可以正常通讯了。

http://www.dtcms.com/a/175406.html

相关文章:

  • 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
  • 塔能水泵节能方案:精准驱动工厂能耗优化
  • 5.6刷题并查集
  • opencv实战:银行卡卡号识别
  • 即插即用!长安汽车复旦提出LMPOcc:长期记忆先验实现占用预测任务新SOTA
  • 富文本编辑器的第三方库ProseMirror
  • C++复习2
  • C#问题 加载格式不正确解决方法
  • HA: Natraj靶场渗透测试
  • Java并发编程-锁(一)
  • 工业质检/缺陷检测领域最新顶会期刊论文收集整理 | AAAI 2025【持续更新中】
  • [python] str