CANopen——笔记
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
			canSend
writeNetworkDictCallBackAI  
	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
			GetSDOClientFromNodeId
			
		
		
read_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相关功能要求的实现而已。 
                    
                
                
            
        
浙公网安备 33010602011771号