初识canopen的实现CanFestival
来源:互联网 发布:好玩的网络捕鱼游戏 编辑:程序博客网 时间:2024/05/22 00:53
编译CanFestival
zengming@jyxtec:~/下载/CanFestival-3-1936110171a2> ./configure --cc=arm-linux-gcc --arch=arm --os=unix --kerneldir=$HOME/workspace/s3c-linux --prefix=$PWD/myinstall --target=unix --can=socket --timers=unix --debug=WAR,MSG
Host OS: unix
Host arch: arm
Using arm-linux-gcc as a C compiler
Using arm-linux-g++ as a C++ compiler
Using arm-linux-g++ as a linker
Using prefix: /home/zengming/下载/CanFestival-3-1936110171a2/myinstall
No wxWidgets available
Creating Makefile
Creating src/Makefile
Creating drivers/Makefile
Creating objdictgen/Makefile
Creating examples/Makefile
Creating objdictgen/canfestival_config.py
Creating drivers/timers_unix/Makefile
Creating drivers/can_socket/Makefile
Creating drivers/unix/Makefile
Creating examples/CANOpenShell/Makefile
Creating examples/TestMasterSlave/Makefile
Creating examples/TestMasterSlaveLSS/Makefile
Creating examples/SillySlave/Makefile
Creating examples/TestMasterMicroMod/Makefile
Creating examples/test_copcican_linux/Makefile
All done.
上面提示 No wxWidgets available,需要安装
python-wxWidgets-2_9-devel
python-wxWidgets-2_9
再编译
$ make
$ make install
make: ldconfig:命令未找到
make: *** [install] 错误 127
出错了,但是ldconfig确实存在,解决方法:
$ sudo make install
会安装到myinstall中
SDO
if(useBlockMode) {
initSDOline(d, line, transNodeId, index, subIndex, SDO_BLOCK_DOWNLOAD_IN_PROGRESS);
d->transfers[line].objsize = count; // 总大小
}
else
initSDOline(d, line, transNodeId, index, subIndex, SDO_DOWNLOAD_IN_PROGRESS);
d->transfers[line].count = count;
SDO_DYNAMIC_BUFFER_ALLOCATION 不开这个宏的话,如果count大于SDO_MAX_LENGTH_TRANSFER,就会溢出,默认是32
SDO_MAX_SIMULTANEOUS_TRANSFERS 限定最大的line数,且不可超过255,因为程序中有循环且下标类型为UNS8(这个是无符号的),默认是4
另外还有一个设置会影响数据流通量,那就是timer的最大值,每一个传输通道都会占用一个timer,默认为32,其应该大于等于line数
initSDOline()
{
if (state == SDO_DOWNLOAD_IN_PROGRESS || state == SDO_UPLOAD_IN_PROGRESS ||
state == SDO_BLOCK_DOWNLOAD_IN_PROGRESS || state == SDO_BLOCK_UPLOAD_IN_PROGRESS){
StartSDO_TIMER(line)
}else{
StopSDO_TIMER(line)
}
}
在_writeNetworkDict中会调用StartSDO_TIMER(line),
启动相应的timer,并返回这个timer在timers的下标
d->transfers[id].timer = SetAlarm(d,id,&SDOTimeoutAlarm,MS_TO_TIMEVAL(SDO_TIMEOUT_MS),0); /* SDO_TIMEOUT_MS 默认为3000毫秒 */
如果超时对方无响应,则发送结束信息并结束传输,如果对方
收到对方回复SDO_BSS_INITIATE_DOWNLOAD_RESPONSE 或者SDO_BSS_DOWNLOAD_RESPONSE,会RestartSDO_TIMER(line)
如果是SDO_BSS_INITIATE_DOWNLOAD_RESPONSE 则发送一个block的数据
TimerInit()
timer_create
每段时间调用TimeDispatch(),此函数功能是遍历timers,如果有超时的,就调用相应的call, 这些timers是由SetAlarm()函数来设定的
IMER_HANDLE SetAlarm(CO_Data* d, UNS32 id, TimerCallback_t callback, TIMEVAL value, TIMEVAL period);
canOpen()
CreateReceiveTask(&(canports[i]), &canports[i].receiveTask, &canReceiveLoop); 创建一线程,不断读取canbus的数据,然后处理
StartTimerLoop(&Init);
作者:帅得不敢出门 程序员群:31843264
zengming@jyxtec:~/下载/CanFestival-3-1936110171a2> ./configure --cc=arm-linux-gcc --arch=arm --os=unix --kerneldir=$HOME/workspace/s3c-linux --prefix=$PWD/myinstall --target=unix --can=socket --timers=unix --debug=WAR,MSG
Host OS: unix
Host arch: arm
Using arm-linux-gcc as a C compiler
Using arm-linux-g++ as a C++ compiler
Using arm-linux-g++ as a linker
Using prefix: /home/zengming/下载/CanFestival-3-1936110171a2/myinstall
No wxWidgets available
Creating Makefile
Creating src/Makefile
Creating drivers/Makefile
Creating objdictgen/Makefile
Creating examples/Makefile
Creating objdictgen/canfestival_config.py
Creating drivers/timers_unix/Makefile
Creating drivers/can_socket/Makefile
Creating drivers/unix/Makefile
Creating examples/CANOpenShell/Makefile
Creating examples/TestMasterSlave/Makefile
Creating examples/TestMasterSlaveLSS/Makefile
Creating examples/SillySlave/Makefile
Creating examples/TestMasterMicroMod/Makefile
Creating examples/test_copcican_linux/Makefile
All done.
上面提示 No wxWidgets available,需要安装
python-wxWidgets-2_9-devel
python-wxWidgets-2_9
再编译
$ make
$ make install
make: ldconfig:命令未找到
make: *** [install] 错误 127
出错了,但是ldconfig确实存在,解决方法:
$ sudo make install
会安装到myinstall中
SDO
if(useBlockMode) {
initSDOline(d, line, transNodeId, index, subIndex, SDO_BLOCK_DOWNLOAD_IN_PROGRESS);
d->transfers[line].objsize = count; // 总大小
}
else
initSDOline(d, line, transNodeId, index, subIndex, SDO_DOWNLOAD_IN_PROGRESS);
d->transfers[line].count = count;
SDO_DYNAMIC_BUFFER_ALLOCATION 不开这个宏的话,如果count大于SDO_MAX_LENGTH_TRANSFER,就会溢出,默认是32
SDO_MAX_SIMULTANEOUS_TRANSFERS 限定最大的line数,且不可超过255,因为程序中有循环且下标类型为UNS8(这个是无符号的),默认是4
另外还有一个设置会影响数据流通量,那就是timer的最大值,每一个传输通道都会占用一个timer,默认为32,其应该大于等于line数
initSDOline()
{
if (state == SDO_DOWNLOAD_IN_PROGRESS || state == SDO_UPLOAD_IN_PROGRESS ||
state == SDO_BLOCK_DOWNLOAD_IN_PROGRESS || state == SDO_BLOCK_UPLOAD_IN_PROGRESS){
StartSDO_TIMER(line)
}else{
StopSDO_TIMER(line)
}
}
在_writeNetworkDict中会调用StartSDO_TIMER(line),
启动相应的timer,并返回这个timer在timers的下标
d->transfers[id].timer = SetAlarm(d,id,&SDOTimeoutAlarm,MS_TO_TIMEVAL(SDO_TIMEOUT_MS),0); /* SDO_TIMEOUT_MS 默认为3000毫秒 */
如果超时对方无响应,则发送结束信息并结束传输,如果对方
收到对方回复SDO_BSS_INITIATE_DOWNLOAD_RESPONSE 或者SDO_BSS_DOWNLOAD_RESPONSE,会RestartSDO_TIMER(line)
如果是SDO_BSS_INITIATE_DOWNLOAD_RESPONSE 则发送一个block的数据
TimerInit()
timer_create
每段时间调用TimeDispatch(),此函数功能是遍历timers,如果有超时的,就调用相应的call, 这些timers是由SetAlarm()函数来设定的
IMER_HANDLE SetAlarm(CO_Data* d, UNS32 id, TimerCallback_t callback, TIMEVAL value, TIMEVAL period);
canOpen()
CreateReceiveTask(&(canports[i]), &canports[i].receiveTask, &canReceiveLoop); 创建一线程,不断读取canbus的数据,然后处理
StartTimerLoop(&Init);
作者:帅得不敢出门 程序员群:31843264
0 0
- 初识canopen的实现CanFestival
- CANOpen移植(CanFestival移植)
- CanOpen协议【CanFestival】移植到STM32
- CanOpen协议【CanFestival】移植方法 支持VC、QT、STM32
- IXXAT的CANopen协议
- CanFestival源码的获取和编译
- canfestival中对象字典编辑器的打开
- CAN和CANOpen的关系
- CAN 学习笔记一_【基于STM32的CANopen通讯协议的实现】
- CAN之上层协议(CANOpen)实现
- CANfestival-arm主站设计几个常用的命令
- ARM板Ubuntu平台上编译CANFestival的方法
- ARM板Ubuntu平台上编译CANFestival的方法
- Mongo-canfestival-3-asc中对象字典编辑器的打开
- canfestival 学习
- CANFestival简介
- CANOpen的几种操作以及数据
- CAN与CANopen协议的关系
- linux下使用apktool破解修改安卓apk
- BPM助力ERP深化应用
- wamp You don't have permission to access / on this server等问题的解决.
- iOS 定制应用程序字体
- 输入年、月、日计算是星期几
- 初识canopen的实现CanFestival
- 处世为人,说易易,说难难——低调做人,高调做事。
- Mac OS X上安装配置apache服务器
- ava自带的性能监测工具
- 手机网络制式
- vb.net 动态传参小结
- URAL 1009. K-based Numbers
- linux中获取本机ip和mac地址
- 微信开放JS SDK,这场web巨变意味着什么?