CANopen——笔记

it2022-05-05  126

1. c语言的typedef高级用法 typedef void (*post_sync_t)(CO_Data*);

http://zhidao.baidu.com/link?url=_lDBGq_ukEjYngcgn4yVGnJum_wrrxfyUUTWRvFZ7WyXPm9Urm6shNAShHNByuYzCQT8C6Sq9hjHbgKoEqoSEK

 

2. 弄清楚为什么要用TIM_IT_CC1,而不是用TIM_IT_UPDATE?

http://www.dndev.com/cgi-bin/forum/topic.cgi?forum=2&topic=2263这个是Canfestival移植到STM32平台上的例程,TIM5是利用了STM32的Timer5来实现定时中断的功能,相当于提供一个时钟节拍,

在中断服务程序中调用Canfestival协议栈的TimeDispatch()函数实现一些定时任务,STM32有很多定时器,这里只是用到Timer5而已。

其他的单片机也有自己的定时器,在定时中断或定时线程(针对多线程)中调用TimeDispatch()就可以了。

TimeDispatch()和CanDispatch()是Canfestival协议栈最重要的两个函数。

Canopen协议栈的基础DS301协议里有很多功能要求需要通过定时来实现或完成。这些都是DS301协议的要求,TimeDispatch()只是CanFestival协议栈对DS301相关功能要求的实现而已。

 

Ret = writeNetworkDictCallBackAI(d, /* CO_Data* d*/ nodeId, /* UNS8 nodeId*/ 0x1010, /* UNS16 index*/ 1, /* UNS8 subindex*/ 4, /* UNS8 count*/ 0, /* UNS8 dataType*/ (void *)&data,/* void *data*/ CheckSDOAndContinue,/* Callback*/ 0, /* no endianize*/ 0); /* no block mode */

check_and_start_node start_node masterSendNMTstateChange canSendwriteNetworkDictCallBackAI CheckSDOAndContinue start_and_seek_node start_node masterSendNMTstateChange canSend setState check_and_start_node init_consise_dcf read_consise_dcf_next_entry readNetworkDictCallbackAI CheckSDOAndContinue SaveNode

write_consise_dcf_next_entry writeNetworkDictCallBackAI CheckSDOAndContinue _writeNetworkDict GetSDOClientFromNodeIdread_consise_dcf_next_entry get_next_DCF_data readNetworkDictCallbackAI CheckSDOAndContinue

emergencyInit RegisterSetODentryCallBack scanIndexOD

switchCommunicationState StartOrStop

sendEMCY canSend

EMCY_setError sendEMCY

EMCY_errorRecovered sendEMCY

proceedEMCY

OnHeartbeatProducerUpdate heartbeatStop heartbeatInit RegisterSetODentryCallBack scanIndexOD

proceedNODE_GUARD canSend

heartbeatInit

masterSendNMTstateChange canSend

masterSendNMTnodeguard canSend

masterRequestNodeState masterSendNMTnodeguard canSend

canDispatch proceedNMTstateChange setState getNodeId

slaveSendBootUp //Transmit the boot-Up frame when the slave is moving from initialization state to pre_operational state. canSend

NMT报文数据由2个字节组成,第0个字节是cs;第1个字节是节点ID;cs可取值如下: NMT_Start_Node NMT_Stop_Node NMT_Enter_PreOperational NMT_Reset_Node NMT_Reset_Comunication节点ID取值0~127之一;节点保护的ID是0x700; m.cob_id = 0x0000; /*(NMT) << 7*/ m.rtr = NOT_A_REQUEST; m.len = 2; m.data[0] = cs; m.data[1] = Node_ID;

 

TimeDispatch()和CanDispatch()函数。其中,Canfestival协议栈最重要的两个函数。

Canopen协议栈的基础DS301协议里有很多功能要求需要通过定时来实现或完成。这些都是DS301协议的要求,TimeDispatch()只是CanFestival协议栈对DS301相关功能要求的实现而已。

 

转载于:https://www.cnblogs.com/zaishuiyifang006/p/5341195.html


最新回复(0)