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

news2024/11/30 6:43:20

做嵌入式开发时,我们对使用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.coloradmin.cn/o/1586349.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录第36、37天| 435. 无重叠区间 763.划分字母区间 56. 合并区间

435. 无重叠区间 435. 无重叠区间 - 力扣(LeetCode) 代码随想录 (programmercarl.com) 贪心算法,依然是判断重叠区间 | LeetCode:435.无重叠区间_哔哩哔哩_bilibili 给定一个区间的集合 intervals ,其中 intervals[…

Python项目1 外星人入侵_外星人

在本章中,我们将在游戏《外星人入侵》中添加外星人。首先,我们在屏幕上边缘附近添加一个外星人,然后生成一群外星人。我们让这群外星人向两边和下面移 动,并删除被子弹击中的外星人。最后,我们将显示玩家拥有的飞船数量…

C/C++基础----运算符

算数运算符 运算符 描述 例子 两个数字相加 两个变量a b得到两个变量之和 - 两个数字相减 - * 两个数字相乘 - / 两个数字相除 - % 两个数字相除后取余数 8 % 3 2 -- 一个数字递减 变量a:a-- 、--a 一个数字递增 变量a: a 、 a 其中递…

容错组合导航

在初始值正确的情况下,惯性导航短期精度较高,但是其误差随着时间是累计的。如果要提高惯性导航的长期精度,就必须提高惯性器件的精度和初始读准精度,这必将大大提高成本。 如果将惯性导航与其他导航系统适当地组合起来&#xff0c…

开源项目若依放大招了?

前言 鉴于之前写了篇插件式相关的文章,阅读量比起其它文章可不要好太多,所以我决定继续这个主题! 以前我们公司用的就是Ruoyi,代码比较简单易懂。但是有些功能确实用不上,比如部门和岗位,每次新项目我拉了…

Web程序设计-实验02 CSS页面布局

【实验主题】 影视网站前台模板页设计 【实验任务】 1、浏览并分析多个影视网站(详见参考资源,建议自行搜索更多影视网站)的整体版面布局,对比同一网站不同页面(主页、列表页、详情页)的元素异同——剔除…

探索ChatGPT-Plus:AI 助手全套开源解决方案

探索ChatGPT-Plus:AI 助手全套开源解决方案 ChatGPT-plus是一种新型的对话生成模型,它是在OpenAI的ChatGPT基础上进行了改进和优化的版本。ChatGPT-plus的出现引起了广泛关注,因为它在对话生成方面展现出了更加出色的表现和能力。在本文中&am…

MobX 中 runInAction 的威力:构建原子性状态更新

"原子性状态更新"这个词可以很好地概括 runInAction 的核心功能,即将一组相关的状态更新作为一个整体,要么全部成功,要么全部失败。这种特性对于复杂的异步操作和状态管理非常重要。可以帮助我们构建更加可靠和可预测的 React 应用程序。 怎么理解原子性操作 "…

动态调整学习率方法(仅供自己学习)

目录 一、StepLR 二、MultiStepLR 三、ExponentialLR 四、CosineAnnealingLR 五、ReduceLRonPlateau 六、LambdaLR 小结:学习率调整​​​​​​​ 一、StepLR optimizer torch.optim.SGD(model.parameters(), lrlearn_rate) scheduler torch.optim.lr_sch…

linux重定向符号

将ls命令执行结果重定向到a文件中 将错误ls命令执行结果重定向到a文件中(这里用到前面的标准错误输出重定向)

【C++初阶】C++简单入门(长期维护)

本篇博客是对C的一些简单知识分享,有需要借鉴即可。 C简单入门目录 一、C前言1.C的概念:2.C发展历程3.C如何学? 二、C入门1.C关键字(C98标准)2.命名空间3.C输入&输出①概念说明②使用说明③特征说明④细节拓展⑤cout与cin的意义 4.缺省参…

【24年软考】系统架构设计师论文写作技巧(附范文10篇)

1.快速审题 写作文要先审题,架构师论文命题也是如此。论文命题除了确定题目之外,还会给你写作要求。而这个写作要求会告诉你本命题涉及的知识点有哪些,并给你确立一个写作向。这个可以参考后面的论文真题分析。 2.确定题目 在填写并确认好…

MATLAB有限元结构动力学分析与工程应用-徐斌|【PDF电子书+配套Matlab源码】

专栏导读 作者简介:工学博士,高级工程师,专注于工业软件算法研究本文已收录于专栏:《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现,并提供所有案例完整源码;2.单元…

wsl 2在windows11上的设置

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

篮球竞赛|基于Springboot的篮球竞赛预约平台系统设计与实现(源码+数据库+文档)

篮球竞赛预约平台目录 基于Springboot的篮球竞赛预约平台系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、前台: 2、后台 管理员功能 用户功能 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff…

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

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

主从数据同步原理

2.2.主从数据同步原理 2.2.1.全量同步 主从第一次建立连接时,会执行全量同步,将master节点的所有数据都拷贝给slave节点,流程: 这里有一个问题,master如何得知salve是第一次来连接呢?? 有几个…

添加索引真的不会锁表吗

1.MySQL DDL执行方式 MySQL5.5以及之前的版本,通常更改数据表结构操作(DDL)会阻塞对表数据的增删改操作(DML)。 MySQL5.6提供Online DDL之后可支持DDL与DML操作同时执行,降低了DDL期间对业务延迟带来的影响。 2.Online ddl: 概念&#xff…

Innodb架构解析

整体架构 通过《面试官:一条SQL是如何执行的?》我们了解了MySQL架构,下面我们看下Innodb架构。 innodb最早由Innobase Oy公司开发,5.5版本开始是MySQL默认存储引擎,该存储引擎是第一个完整支持ACID事务的MySQL存储引…

多线程GUI界面文件复制程序的解决方案

在Python中,你可以使用多线程来编写一个GUI界面的文件复制程序。这样可以使得文件复制过程在后台进行,而不会阻塞用户界面,提升用户体验。下面是一个使用Python的Tkinter库和多线程实现的文件复制程序的示例: 1、问题背景 我们有…