canfestival移植到windows(VS)上

canfestival移植到windows(VS)上

前言

由于导师需要做一个基于canopen协议的上位机作为主站,让我将canopen协议移植到PC端,并且基于一个USB-CAN的分析仪进行二次开发,从而保证主站以下的协议稳定规范,而不是自己开发一个串口协议,于是在VS上创建了一个窗口空项目做测试。

一、canfestival源码获取

https://canfestival.org/code.html.en,选择最近版本即可。

二、canfestival移植到VS上

1.下载源码后解压如下:

请添加图片描述

比较重要的有四个文件夹:

(1)drivers:存放不同平台的定时器和can驱动

(2)include:存放着头文件

(3)src:存放源文件

(4)objdictgen:对象字典文件夹,安装对象字典工具后在这里面打开

2.在VS上新建一个空项目,然后在这个项目目录下建立一个文件夹,我取名为canfestival;打开这个文件夹继续新建三个文件夹,一个命名src,存放移植的源文件,一个命名inc,存放移植的头文件,最后一个命名drivers,存放移植的定时器和can的驱动文件,并在inc文件下再新建一个win32文件夹,存放移植到win32上必备的头文件。

请添加图片描述
请添加图片描述

3.打开解压的canfestival-3源码,注意以下复制的.c文件全部要改成.cpp

(1)将src文件夹下除了symbols.c的源文件复制到我们新建的src文件夹中,win32文件夹里面的canfestival-3.def也要复制,移植后的文件如下:

请添加图片描述
请添加图片描述
(2)打开源码的include文件夹,将里面的.h文件复制到新建的inc文件夹中,把win32文件夹里面的.h文件复制到inc的win32中,复制完如下:

请添加图片描述
请添加图片描述
请添加图片描述

(3)由于我是基于can-usb分析仪上进行二次开发的,所以can驱动我用的是CAN分析仪的库函数接口,没有使用源码里面的;定时器驱动使用的是源码drivers文件夹里面的timer_win32文件夹下的源文件,复制到新建的drivers文件夹下;

请添加图片描述

4.打开VS中新建的项目,将我们新建的canfestival文件夹添加到项目中;

点击解决方案资源管理器下的显示全部文件的图标;

请添加图片描述
然后右键点击我们新建的canfestival文件,选择包含在项目中,发现红色圆圈没有了就是全包含在项目中了;

请添加图片描述

此时编译会出现很多找不到头文件的错误,这是因为路径没有包含进去。右键单击项目名称,选择属性,然后找到C/C++——常规——附加包含目录,将我们新建的canfestival文件夹下的几个文件夹路径都包含进去即可,注意inc要包含到最底层的文件夹win32;另外如果没找到C/C++,说明你没有添加一个新的.c文件,需要先新建一个.c文件;

请添加图片描述
请添加图片描述

5.此时编译还有一些错误,比如指针不匹配,PDO.C文件下144行、208行、326行(不是这三行也无所谓,根据报错信息找位置)会报错,需要通过强制转换,如下所示,即可通过。

请添加图片描述

另外,还需要在除了dcf.h和canfestival.h的所有头文件的开头加上

#ifdef __cplusplus
extern "C" {
#endif

结尾处加上

#ifdef __cplusplus
};
#endif

请添加图片描述
请添加图片描述
另外,VS编译器由于默认开启了符合模式选项(/permissive),会导致一些char* 变量赋值出现错误,比如:lss.cpp文件中的波特率赋值会报错;
解决办法:需要点击项目属性——C/C++——语言——符合模式——选择否,即可
在这里插入图片描述
在这里插入图片描述

最后,还需要实现canfestival.h中的canSend()函数和canChangeBaudRate()函数,可以先定义一个空函数,返回一个值即可通过编译,另外,此时我遇到的问题都解决了,可以通过编译了,如果还有其他问题,可以根据报错信息解决。
请添加图片描述
后续的对象字典生成以及NMT网络管理、SDO通信、PDO通信的知识网上和很多,源码里面也有win32的例程,就不说了。定时器驱动用的是源码里面自带的timer_win32,里面的setTimer(),getElapsedTime()都实现了,TimeDispatch()也调用了,这部分就不用自己写了,只需要在main函数中调用TimerInit();然后CAN驱动用的是CAN分析仪厂家提供的库函数接口,自己写的,这个想用虚拟can口或者文件接口源码的drivers里面也提供了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值