前言
这篇文章是用于freertos系统能够在vs2019上实现,并且加入Vrep的remoteAPI,最终是为了能够使得仿真的代码能直接倒是移植到单片机上,stm32上也是搭载的freertos,这样会少很多衔接工作
这篇博文介绍了freertos载入vs2019工程的全过程与问题解决
一、Freertos在vs2019的实现(如果只看VS2019与coppeliasim的连接直接跳到第二部分即可)
1.下载freertos示例,根据示例展开移植
点击Book companion source code即可下载。
2.vs2019中创建空工程test
打开下载的解压包中复制如下到工程根目录
至于FreeRTOSConfig.h,这是frertos配置文件,我们也不一定需要自己配,可以打开example,里面许多示例,你可以现在vs中每个例子运行的看看,那个是你当前需要的,这样直接复制其目录下的两个文件到工程test根目录
此时文件部分就ok了,接下转入vs中进行设置
3.设置链接头文件
打开项目/属性
点击到这里在 附加包含目录内添加以下路径
$(ProjectDir)\
$(ProjectDir)Supporting_Functions\
$(ProjectDir)FreeRTOS_Source\include\
$(ProjectDir)FreeRTOS_Source\portable\MSVC-MingW\
在c/c++/处理器/预处理器定义添加
WIN32
_DEBUG
_CONSOLE
_CRT_SECURE_NO_WARNINGS
DO_NOT_USE_SHARED_MEMORY
NON_MATLAB_PARSING
MAX_EXT_API_CONNECTIONS=255
4.添加资源文件
添加Freertos文件夹(就是筛选器)
里面加入Freertos_Source内的所有文件如下图
然后再头文件源文件内添加现有项,main.h可有可无,是我后期自己加的
5.编译运行
编译一下,我当时选择的FreeRTOSConfig.h是example008里的,也就是第八个例子,发现报错
定位过去
意思是这两个参数配置不能一个是1一个是0,于是我转到INCLUDE_xTimerPendFunctionCall将它定义成0就好了
如果用的其它例子可能有其它问题,可以自己修改配置文件FreeRTOSConfig.h解决
示例八运行成功
二、Vrep在vs2019的实现(基于freertos)
1.先找到remoteapi的资源文件位置:
C:\Program Files\CoppeliaRobotics\CoppeliaSimEdu\programming\remoteApiBindings\lib
目录内长这样,其实就是个vs的例子,我这里已经运行过给,所以多了一些文件,第一次进去首先选择64位或者32位的程序,如果你需要和其他有些模块一起用的话,比如我这里需要和freertos一起用,而它是32位的,如果你知识用remoteAPI控制一下,那么64位和32位都行,VS支持两种编译器。
这里我选择32位的打开,vs会提示平台工具集更改新的V142,确认就行
修改项目属性的C\C++\输出文件的对象文件名为$(IntDir)%(RelativeDir)
然后编译成功即可
如果选择32位则上面那个目录里多了Release文件夹,如果64位的则多了x64\Release的文件夹,里面就是我们对应的库
2.复制文件
这三个文件夹复制到刚刚创建的vs工程内,可以是freertos的那个工程,也可以是单纯的新工程,新建个文件夹RemoteAPI_Source,放进去
32位
然后回去最初找的文件夹,C:\Program Files\CoppeliaRobotics\CoppeliaSimEdu\programming\remoteApiBindings\lib,进入Release文件夹,复制上面目录地址
64位
然后回去最初找的文件夹,C:\Program Files\CoppeliaRobotics\CoppeliaSimEdu\programming\remoteApiBindings\lib,进入Debug\Release文件夹,复制上面目录地址
然后进入电脑,系统高级设置\环境变量
3.vs内配置
第四步完了后输入链接库的地址,就是当时复制过的的dll文件的所在目录,记得自己验证一下目录自己的电脑里存不存在
32位
C:\Program Files\CoppeliaRobotics\CoppeliaSimEdu\programming\remoteApiBindings\lib\Release
64位就是
C:\Program Files\CoppeliaRobotics\CoppeliaSimEdu\programming\remoteApiBindings\lib\x64\Release
在c/c++内的常规添加RemoteAPI的头文件目录,就是第二步复制过去的三个文件夹,都加入,$(ProjectDir)的意思就是工程的根目录,这样添加地址可以之后移动工程位置时候保持这些目录地址都存在,记得下面计算的值可以复制出来验证一下你的地址对不对。
$(ProjectDir)RemoteAPI_Source\
$(ProjectDir)RemoteAPI_Source\remoteApi\
$(ProjectDir)RemoteAPI_Source\include\
$(ProjectDir)RemoteAPI_Source\common\
修改项目属性的C\C++\输出文件的对象文件名为$(IntDir)%(RelativeDir)
然后在main.c内添加头文件
#include"extApi.h"
编译,如果没有报错说明成功了,然后就是vrep仿真的内容了
测试:
添加main文件内容如下,同时打开vrep随便一个世界,编译代码通过后点击vs2019的运行
#include"extApi.h"
#include "stdio.h"
int main() {
int ID = simxStart("127.0.0.1", 19997, 1, 1, 1000, 5);
if (ID != -1) {
printf("susseful");
simxStartSimulation(ID, simx_opmode_oneshot);
}
while (1) {
}
}
如果查看vrep中如图所示开始运行了,说明连接成功
三、问题解决
1.报错.dll无法打开
dll链接库出错,仔细检查这个库目录内的地址,善用之前说的那个计算的值,是实际电脑的目录,可以复制到文件管理器跳转去看看,地址下是否存在dll文件
2.头文件"extApi.h"不存在
也是库连接出错,可能也是资源文件没有添加到位,仔细检查目录地址,下图目录添加的是头文件目录,检查地址是否出错,注意看下“计算的值“就是你输入完的地址
注意!!!!VS内的编译器,如图是64位编译器
32位编译器就是x86