CanFestival源码学习笔记

CANOpen从机
setNodeId(&TestSlave_Data,nodeID);
setState(&TestSlave_Data,Initialisation);
setState(&TestSlave_Data,Operational);

这三句话非常重要,是Canopen协议栈的入口。
nodeID是从机地址,取值范围可以是0x01至0x7F。
协议栈初始化时,状态会按照Initialisation->Pre_operational->Operational的顺序变化。

主要的函数调用关系如下:
setState->switchCommunicationState->StateOrStop。
在StateOrStop函数中对各个服务进行初始化,包括BootUp、SDO、Emergency、SYNC、LifeGuard、PDO和LSS。初始化过程中分别调用对应的Start或Stop函数。调用顺序是:startSYNC、lifeGuardInit、emergencyInit、slaveSendBootup,最后是PDOInit。
在lifeGuardInit方法中,会对心跳报文的发送函数(ProducerHeartbeatAlarm)进行初始化。在slaveSendBootup方法中,会发送上线报文,数据内容是0x00。

你可能感兴趣的:(CAN学习笔记)