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相关功能要求的实现而已。
CANopen——笔记的更多相关文章
- CANopen笔记2
PDO 过程数据对象用于在节点之间传送过程数据,如I/O模块I/O状态读取和设定,模拟量采集和模拟量输出等等,协议考虑从机硬件限制最多支持4组PDO,每组包含一个RPDO和一个TPDO.The Gol ...
- CANopen笔记1
CAN现场总线只定义了OSI网络模型的第一层(物理层) 和第二层(数据链路层) ,而这两层一般已被CAN硬件完全实现了.由于没有规定应用层,本身并不完整,需要一个高层协议来定义CAN报文中的11/29 ...
- 【转】(笔记)CANopen协议【CANFestival】移植方法
一.背景 CAN组网就必须得要应用层协议,原因就在于 * 便于网络管理与控制 * 确认数据的收发 * 发送大于8个字节的数据块(CAN每帧数据传输大小为8字节) * 为不同节点分配不同的报文标识符 * ...
- (笔记)CanOpen协议【CanFestival】移植方法 支持VC、QT、STM32
转自http://bbs.21ic.com/icview-878522-1-1.html 前段时间学习了CanOpen协议,到网上下载的CanFestival3-10源码,移植到VC.QT.STM ...
- (笔记)CANOpen移植(CanFestival移植)
在网上下载CanFestival源码最新版本CanFestival-3-884a60cbb83e建立以下文件夹:inc文件夹:放LM3S8962硬件相关以及驱动部分的头文件,adc.h.hw_adc. ...
- 基于CANopen DSP402的运动控制笔记
常用的mode of operation 有以下几种: 控制字 control word: 6--------------7---------------15--------------------7 ...
- Apollo学习笔记(一):canbus模块与车辆底盘之间的CAN数据传输过程
Apollo学习笔记(一):canbus模块与车辆底盘之间的CAN数据传输过程 博主现在从车载自组网信道分配和多跳路由转向了自动驾驶,没啥经验,想快些做出来个Demo还是得站在巨人的肩膀上才行,我选择 ...
- git-简单流程(学习笔记)
这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
随机推荐
- POJ 1664 放苹果( 递推关系 )
链接:传送门 思路:苹果m个,盘子n个.假设 f ( m , n ) 代表 m 个苹果,n个盘子有 f ( m , n ) 种放法. 根据 n 和 m 的关系可以进一步分析: 特殊的 n = 1 || ...
- 笔试算法题(33):烙饼排序问题 & N!阶乘十进制末尾0的个数二进制最低1的位置
出题:不同大小烙饼的排序问题:对于N块大小不一的烙饼,上下累在一起,由于一只手托着所有的饼,所以仅有一只手可以翻转饼(假设手足够大可以翻转任意块数的 饼),规定所有的大饼都出现在小饼的下面则说明已经排 ...
- [Python3网络爬虫开发实战] 1.9.3-Scrapyd-Client的安装
在将Scrapy代码部署到远程Scrapyd的时候,第一步就是要将代码打包为EGG文件,其次需要将EGG文件上传到远程主机.这个过程如果用程序来实现,也是完全可以的,但是我们并不需要做这些工作,因为S ...
- win7右键菜单不见解决办法
直接 开始 运行: cmd /k reg add "HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\Ne ...
- Python中的列表(6)
列表切片 如何拿到列表中的部分元素,Python 引入了 “切片” 的概念. 上代码: words = ['a','b','c','d'] print(words[0:3]) console: 冒号( ...
- vscode 解决符号无法识别的问题
一开始浏览代码出现了下面这个问题, __attribute__ 标记为红色,符号无法识别,下面还出现了很多提示需要加 ), } 等符号,虽然编译没问题,但是看着红色标记和一堆提示真是要逼死强迫症. 既 ...
- HUAS Summer Contest#4 D题 DP
Description Speakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要准备的材料,于是,便需要去申请学校了.要申请国外的任何大学,你都要交纳一定的申请费用,这可是很惊人的 ...
- 集训第四周(高效算法设计)H题 (贪心)
Description Most financial institutions had become insolvent during financial crisis and went bank ...
- jQuery调用WCF 说明
在项目中用过一些WCF的技术这篇文章是对以前用过的一点东西的一个梳理 一,webconfig的配置除了一般的配置外,与WCF相关的配置如下 <system.serviceModel> ...
- Quartz.Net 学习之路02 初探Quartz.Net
第二讲:简单的实例,看看Quartz.Net强在哪里? 直接上代码,代码里有注释: using System; using Quartz; using Quartz.Impl; namespace L ...