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的开发者 ...
随机推荐
- 笔试算法题(48):简介 - A*搜索算法(A Star Search Algorithm)
A*搜索算法(A Star Search Algorithm) A*算法主要用于在二维平面上寻找两个点之间的最短路径.在从起始点到目标点的过程中有很多个状态空间,DFS和BFS没有任何启发策略所以穷举 ...
- DB2隔离级别
四.隔离级别与锁 数据库是利用锁和隔离级别来共同处理数据库的并发的.DB2数据库用来尝试实施并发性的方法之一是通过使用隔离级别,它决定在第一个事务访问数据时,如何对其他事务锁定或隔离该事务所使用的数据 ...
- python3.6的requests库&HTMLTestRunner实现测试报告
'''1. 在suite.addTest时,可以把需要的用例先写入一个列表list中,list当做addTest的参数:2. 在unittest.main(verbosity=2)中,默认为1,设置为 ...
- virtualenvwrapper.sh: There was a problem running the initialization hooks. If Python could not import the module virtualenvwrapper.hook_loader, check that virtualenvwrapper.........(解决办法)
Linux(ubuntu)上python2与python3共存环境下,安装virtualenvwrapper后, 其环境变量被自动设置为VIRTUALENVWRAPPER_PYTHON=/usr/bi ...
- 模板 求GCD&LCM
求最大公倍数 int GCD(int a,int b) { ) return b; else return GCD(b,a%b); } 求最小公倍数 int LCM(int a,int b) { re ...
- sort cmp函数的写法 (特判排序 二级排序)
特判排序: 看看以下cmp写法,猜想作用: 该函数作用就是“将正数升序排列, 负数排到最后” 我认为cmp函数的一个特性就是, 如果return false, 那么函数就会将他们互换位置, retur ...
- CentOS7 Failed to start LSB: Bring up/down解决方法(真正有效的方法)
刚刚装好的虚拟机突然不能上网了,报错很诡异,具体报错如下: /etc/init.d/network restart Restarting network (via systemctl): Job f ...
- 文件 jq 传到后台
XMLHttpRequest Level 2 添加了一个新的接口——FormData.与普通的 Ajax 相比,使用 FormData 的最大优点就是我们可以异步上传二进制文件. jQuery 2.0 ...
- Windows和Linux启动虚拟环境
快速跳转到Linux操作 Windows启动虚拟环境 <!--tab回车可以补全--> 安装virtualenv pip install virtualenv 创建虚拟环境 方法一: py ...
- KNN-K近邻算法(1)
KNN(K-nearest neighbors) 思想简单 数学所需知识少(近零) 效果好 可解释机器学习算法使用过程中的很多细节问题 更完整的刻画机器学习应用的流程 天然可解决多分类问题 可解决回归 ...