在keil里用c++编程(1)

做嵌入式开发时,我们对使用c++语言写的库有强烈的需求,比如eigen,boost等,但是通常来说,我们的开发是围绕c语言进行的,怎么把c++的库文件放在c语言环境下进行编译,就是我们需要面对的问题

1.问题来源:需要把一个用cpp语言写的库放在c语言环境下进行编译。

参考:C++ in Keil 使用指南_keil使用c++-CSDN博客

STM32 C++编程系列一:STM32 C++编程介绍-CSDN博客

KEIL / MDK C++支持方法:基于TencentOS-Tiny 工程修改,STM32芯片_keil c++-CSDN博客

主要的思路是到用一个函数把整个c++函数都引导到C环境里。

开始实操

1.用cubemx生成一个基本的项目,启用一个串口,方便我们调试,其他什么都不开。

2.在arm compiler里选择use default complier version6(use default complier version5 也能用,需要在c/c++(AC5)选项卡里加入-cpp11关键字来启用cpp11支持)

3.在c/c++(ac6)里面把c语言版本和cpp语言版本设置成你所需要的版本,我这里选的是c11/cpp14。

 4.引入你所需要的包和相关依赖项

先把源代码引入

 

再把头文件的路径引入。

5.写一个使用了这个库其中的函数的函数, 有点绕口,就是写一个函数,在里面使用你要用的cpp库的函数,并且写出相关的头文件。这个头文件一定一定要用extern“C”关键字包起来,这样才能被正确识别。

记得把头文件的路径引入,具体引入的方法在上一步,不引入的话会找不到头文件。

 6.这时候编译基本上只要配置正确,就没什么error,然后下载入板子调试,会遇到以恶很经典的问题

【 BEAB BKPT 0XAB】,这是因为进入了半主机模式,下面这篇文章有相关的内容

STM32 C++编程系列2.5:让Keil MDK工程支持现代C++特性及填坑_stm32 支持c++-CSDN博客怎么解决这个问题,三个办法,第一如果我们在用纯c代码的时候,我们可以勾选mcriolib,第二,重写target.c文件,第三,我们选择keil官方补丁,上面这个问咋是第三种办法,我们采用第二种办法。

7.重写target.c文件

KEIL / MDK C++支持方法:基于TencentOS-Tiny 工程修改,STM32芯片_keil c++-CSDN博客

我们按照这篇文章来进行改写。

8.如果你的cpp文件所需的内存空间很大,这时候你需要修改堆栈大小,或者使用内存管理,这篇文章讲了一下。到此,你应该就可以在keil种使用c/cpp混合编程了。

STM32 C++编程系列2.5:让Keil MDK工程支持现代C++特性及填坑_stm32 支持c++-CSDN博客

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/305327.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【c++】STl-list使用list模拟实现

主页:醋溜马桶圈-CSDN博客 专栏:c_醋溜马桶圈的博客-CSDN博客 gitee:mnxcc (mnxcc) - Gitee.com 目录 1. list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 …

Linux下网络编程基础知识--协议

网络基础 这一个课程的笔记 相关文章 协议 Socket编程 高并发服务器实现 线程池 协议 一组规则, 数据传输和数据的解释的规则。 比如说依次发送文件的文件名, 文件的大小, 以及实际的文件, 这样规定发送一个文件的顺序以及发送的每一个部分的格式等可以算是一种协议 型协议 …

【MATLAB源码-第185期】基于matlab的16QAM系统相位偏移估计EOS算法仿真,对比补偿前后的星座图误码率。

操作环境: MATLAB 2022a 1、算法描述 1. 引言 M-QAM调制技术的重要性 现代通信系统追求的是更高的数据传输速率和更有效的频谱利用率。M-QAM调制技术,作为一种高效的调制方案,能够通过在相同的带宽条件下传输更多的数据位来满足这一需求…

二分查找-图文详解,看不懂你来打我。。。

一、查找算法 在计算机科学和算法领域,搜索是一项基本的任务。在海量数据中寻找特定的元素是一项常见的任务,而二分查找(Binary Search)是一种非常高效的搜索算法,特别适用于有序数组。 二、二分查找 二分查找是一种…

ctf_show笔记篇(web入门---SSRF)

ssrf简介 ssrf产生原理: 服务端存在网络请求功能/函数,例如:file_get_contens()这一类类似于curl这种函数传入的参数用户是可控的没有对用户输入做过滤导致的ssrf漏洞 ssrf利用: 用于探测内网服务以及端口探针存活主机以及开放服务探针是否存…

常用的深度学习自动标注软件

0. 简介 自动标注软件是一个非常节省人力资源的操作,而随着深度学习的发展,这些自动化标定软件也越来越多。本文章将会着重介绍其中比较经典的自动标注软件 1. AutoLabelImg AutoLabelImg 除了labelimg的初始功能外,额外包含十多种辅助标注…

Java+BS +saas云HIS系统源码SpringBoot+itext + POI + ureport2数字化医院系统源码

JavaBS saas云HIS系统源码SpringBootitext POI ureport2数字化医院系统源码 医院云HIS系统是一种运用云计算、大数据、物联网等新兴信息技术的业务和技术平台。它按照现代医疗卫生管理要求,在特定区域内以数字化形式收集、存储、传递和处理医疗卫生行业的数据。通…

llama-factory SFT系列教程 (一),大模型 API 部署与使用

文章目录 背景简介难点 前置条件1. 大模型 api 部署下一步阅读 背景 本来今天没有计划学 llama-factory,逐步跟着github的文档走,发现这框架确实挺方便,逐渐掌握了一些。 最近想使用 SFT 微调大模型,llama-factory 是使用非常广泛…

java八股——消息队列MQ

上一篇传送门:点我 目前只学习了RabbitMQ,后续学习了其他MQ后会继续补充。 MQ有了解过吗?说说什么是MQ? MQ是Message Queue的缩写,也就是消息队列的意思。它是一种应用程序对应用程序的通信方法,使得应用…

【Java+Springboot】------ 通过JDBC+GetMapping方法进行数据select查询、多种方式传参、最简单的基本示例!

一、JDBC如何使用、PostGresql数据库 1、在pom.xml 先引用jdbc组件。 <!--jdbc--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency> 2、在pom.xml 再引用p…

每天学点儿Python(6) -- 列表和枚举

列表是Python中内置的可变序列&#xff0c;类使用C/C中的数组&#xff0c;使用 [ ] 定义列表&#xff0c;列表中的元素与元素之间用英文逗号&#xff08; , &#xff09;分隔&#xff0c; 但是Python中列表可以存储任意类型的数据&#xff0c;且可以混存&#xff08;即类型可以…

Spring项目的创建和简单使用

目录 一.Spring项目的创建 二.存储Bean 2.1创建Bean对象 2.2Bean注入 三.读取Bean 3.1得到Spring上下文 3.2获取指定Bean对象 3.3为什么不使用new呢&#xff1f; 四.获取Bean的三种方式 4.1 BeanFactory类 4.2两者区别 4.3获取Bean的优化操作 五.总结 一.Spring项目…

海山数据库(He3DB)Redis技术实践:继承开源Redis精髓,强化升级企业级服务

数字化转型中的企业数据的处理速度和效率直接关系到企业的竞争力&#xff0c;Redis作为业界广泛使用的开源键值对存储系统&#xff0c;以其卓越的性能和丰富的数据结构&#xff0c;成为了众多开发者和企业的首选。然而&#xff0c;近期Redis开源社区对Redis协议进行了变更&…

基于SSM+Jsp+Mysql的快递管理系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

工作流引擎常见API(以camunda为例)

在Camunda中&#xff0c;API的继承关系主要体现在各个服务接口之间。以下是Camunda中一些常见服务接口的继承关系&#xff1a; ProcessEngineServices 接口&#xff1a; RepositoryService&#xff1a; 负责管理流程定义和部署。RuntimeService&#xff1a; 负责管理流程实例的…

植物大战僵尸Python版,附带源码注解

目录 一、实现功能 二、安装环境要求 三、如何开始游戏 四、怎么玩 五、演示 六、部分源码注释 6.1main.py 6.2map.py 6.3Menubar.py 七、自定义 7.1plant.json 7.2zombie.json 一、实现功能 实施植物&#xff1a;向日葵、豌豆射手、壁桃、雪豆射手、樱桃炸弹、三…

Linux下批量的批量操作

批量删除docker 镜像 docker images | grep ent-form-web |awk ‘{print $3}’ | xargs docker rmi docker images: 列出所有的docker 镜像 docker images | grep ent-form-web : 选取出结果带 ent-form-web的信息 docker images | grep ent-form-web |awk ‘{print $3}’ 选取…

YOLOv5实战记录05 Pyside6可视化界面

个人打卡&#xff0c;慎看。 指路大佬&#xff1a;【手把手带你实战YOLOv5-入门篇】YOLOv5 Pyside6可视化界面_哔哩哔哩_bilibili 零、虚拟环境迁移路径后pip报错解决 yolov5-master文件夹我换位置后&#xff0c;无法pip install了。解决如下&#xff1a; activate.bat中修改…

wsl 2在windows11上的设置

详细参考&#xff1a;Manual installation steps for older versions of WSL | Microsoft Learn 1.系统组件要打开 分别是&#xff1a;Hyper-V、虚拟机平台、适用于Windows的Linux子系统 2.以管理员方式运行命令行&#xff0c;逐步执行下面的命令 update to WSL 2, you must…

js爬虫puppeteer库 解决网页动态渲染无法爬取

我们爬取这个网址上面的股票实时部分宇通客车(600066)_股票价格_行情_走势图—东方财富网 我们用正常的方法爬取会发现爬取不下来&#xff0c;是因为这个网页这里是实时渲染的&#xff0c;我们直接通过网址接口访问这里还没有渲染出来 于是我们可以通过下面的代码来进行爬取: …