PSINS-VC60代码移植到STM32单片机(问题记录)

PSINS-VC60代码移植到STM32单片机

1.代码管理

PSINS源代码使用VC6.0编写,可以使用CMAKE对代码进行管理,在Windows平台下,可以使用MINGW或MSVC编译代码,通过编写CMakeLists.txt文件来链接代码(最基础的三行即可实现对PSINSC++代码的链接,或者参考KF-GINS的写法),编译器使用VSCODE即可。

2.代码结构

2.1 主函数入口Main_SinsGps.cpp

PSINS主函数内容比较简单,主要实现文件的读取,Demo的调用和卡尔曼滤波函数的调用。

2.2 核心函数库部分PSINS.h与PSINS.cpp

这一部分是PSINS C++代码的核心,包括对全局变量的定义,定义三维向量函数和矩阵函数、四元数函数等,也包括辅助数据处理类函数如Allan方差法统计序列的方差,同时定义了初始对准如凝固系对准法、GNSS速度辅助对准等,卡尔曼滤波函数与组合导航函数以及文件读写函数也包含在内,这一部分是将PSINS移植和调用的关键。

2.3 卡尔曼滤波函数KFApp.h与KFApp.cpp

这一部分定义了卡尔曼滤波函数及其实现

2.4 串口函数SerialPort.h与SerialPort.cpp

2.5 示例Demo

包含丰富的Demo示例

函数移植

如果想将PSINS移植到STM32单片机平台,需要创建C++的STM32代码,为了省去前期配置单片机的时间可以将配置好的.ioc文件复制到新创建的工程中,生成代码即可,编写代码过程中注意将C++头文件命名为.hpp将C++源文件命名为.cpp,并将main.c重命名为main.cpp。

问题1:C/C++混合编译
C/C++混合编译,使用g++编译器进行编译,如果不加以区分,由于C++编译器会对C++函数名称进行改写,而不会对C函数进行改写,因此会出现链接错误,为了解决这个问题可以在C函数头文件中使用extern “C”,使得g++编译器在遇到C文件时还是以C的方式去编译链接函数。
请添加图片描述
问题2:路径包含问题
对于从外部直接粘贴过来的源代码程序或文件夹,需要手动将源文件的地址包含在其他需要调用此程序的路径中,如果勾选了上方的Exclude resource from build , 则该源码不会被编译,如果需要调用该源码内容会出现链接错误。
请添加图片描述
问题3:CubeMX自动生成代码导致的重定义问题
CubeMX可以选择自动生成代码,如果又想自己接管这个函数的定义,就会出现函数重定义错误,需要在相应部分(NVIC->Genrate…)取消勾选。
请添加图片描述
请添加图片描述
问题4:波特率修改后不生效问题
修改波特率后,再次烧录程序发现没有生效,需要清理工程重新构建方可生效。
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值