当前位置: 首页 > news >正文

Clion中使用C/C++开发stm32程序

前言

        从刚开始学习阶段,一直是用的keil5开发stm32程序,自从看到稚晖君推荐的CLion开发嵌入式程序后,这次尝试在CLion上开发stm32程序。

1、配置CLion用于STM32开发的环境

        这里我就不详细写了,没必要重新写,网上教程很多,这里我主要参考的是稚晖君的文章,我是参考大佬写的文章一步一步配置成功的。     【教程】手把手教你用Clion进行STM32开发【如何优雅の进行嵌入式开发】 - 知乎 (zhihu.com)

以及几个其他几位博主的文章:   

配置CLion用于STM32开发【优雅の嵌入式开发】 - 知乎 (zhihu.com) 

Clion&&STM32环境配置教程(优雅开发STM32)_sailhang的博客-CSDN博客

2、C与C++程序之间的相互调用

        由于C和C++的特性不同,一个是面向过程的语言,一个是面向对象的语言。因此,C++中的很多特性,比如函数的重载,在使用时就给我们带来了很大的便利。而为了实现C++中的这些特性,程序在编译后就会对函数“改名”,比如在程序定义一个函数后,经过C++编译器和C编译器编译后的函数名不一样。

        正是这两种语言编译方式的不同,就会导致两种程序在调用的时候出现错误。因此就需要我们采用C++中的指令extern “C” 来实现两种语言文件的互相调用。

#ifdef __cplusplus
extern "C" {
#endif//这里包含的头文件包括:其他c语言的头文件
#include "main.h"
#include "gpio.h"
void test(void);#ifdef __cplusplus
}#include "my_cpp.h"
//这里extern "C"外面包括c++自身的头文件#endif

注意:extern “C” 关键字是在C++程序中使用的。

3、使用keil5开发C/C++程序

     这里主要注意:确认Micro LIB处于不启用的状态,因为MicroLIB为非标准的精简库,会与标准C++产生冲突

我看网上其他人说要在工程的设置中为编译参数增加--cpp11来启用C++编译器,但是经过我实践,发现不用加程序一样可以运行,不知道为什么。

4、使用CLion开发C/C++程序

      CLion中组织编译规则都是基于CMakeLists.txt文件的,只需要知道怎么在这个文件里面添加源码目录和include文件夹的路径就行,如图:

include_directories(Core/IncUserApp
// 其他include目录
)file(GLOB_RECURSE SOURCES"startup/*.*""Drivers/*.*""Core/*.*""UserApp/*.*""3rdParty/*.*"// *.*表示通配符)

相关文章:

Clion中使用C/C++开发stm32程序

前言 从刚开始学习阶段,一直是用的keil5开发stm32程序,自从看到稚晖君推荐的CLion开发嵌入式程序后,这次尝试在CLion上开发stm32程序。 1、配置CLion用于STM32开发的环境 这里我就不详细写了,没必要重新写,网上教程很多…...

JavaScript Web APIs第五天笔记

Web APIs - 第5天笔记 目标: 能够利用JS操作浏览器,具备利用本地存储实现学生就业表的能力 BOM操作综合案例 js组成 JavaScript的组成 ECMAScript: 规定了js基础语法核心知识。比如:变量、分支语句、循环语句、对象等等 Web APIs : DOM 文档对象模型&…...

[ICCV-23] Paper List - 3D Generation-related

ICCV-23 paper list 目录 Oral Papers 3D from multi-view and sensors Generative AI Poster Papers 3D Generation (Neural generative models) 3D from a single image and shape-from-x 3D Editing Face and gestures Stylization Dataset Oral Papers 3D from …...

Transformer为什么如此有效 | 通用建模能力,并行

目录 1 更强更通用的建模能力 2 并行计算 3 大规模训练数据 4 多训练技巧的集成 Transformer是一种基于自注意力机制的网络,在最近一两年年可谓是大放异彩,我23年入坑CV的时候,我看到的CV工作似乎还没有一个不用到Transformer里的一些组…...

【初识Jmeter】【接口自动化】

jmeter的使用笔记1 Jmeter介绍与下载安装介绍安装配置配置与扩展组件 jmeter的使用基本功能元素登陆请求与提取cookie其他请求接口关联Cookie-响应成功聚合报告查看 Jmeter介绍与下载安装 介绍 jmeter是apache公司基于java开发的一款开源压力测试工具,体积小&…...

C:数组传值调用和传地址调用

传地址调用 对数组进行修改&#xff1a;排序… #include <stdio.h>// 函数用于交换两个整数的值 void swap(int *a, int *b) {int temp *a;*a *b;*b temp; }// 函数用于对整数数组进行升序排序 void sortArray(int *arr, int size) {for (int i 0; i < size - 1…...

Python数据容器——字典的常用操作(增、删、改、查)

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 本文专栏&#xff1a;Python专栏 专栏介绍&#xff1a;本专栏为免费专栏&#xff0c;并且会持续更新python基础知识&#xff0c;欢迎各位订阅关注. 目录 一、理解字典 1. Python字典是什么&#xff1f; 2. 字…...

JavaScript入门——(5)函数

1、为什么需要函数 函数&#xff1a;function&#xff0c;是被设计为执行特定任务的代码块 说明&#xff1a;函数可以把具有相同或相似逻辑的代码“包裹”起来&#xff0c;通过函数调用执行这些被“包裹”的代码逻辑&#xff0c;有利于精简代码方便复用。 比如之前使用的ale…...

数据库sql查询成绩第二高

select * from propro; #查询成绩第二高 select max(id) from propro where id <(select max(id) from propro); #查询成绩第二高的第二种方式 select * from (select * from propro order by id desc limit 2) as b order by id asc limit 1;...

十五、异常(5)

本章概要 异常限制构造器 异常限制 当覆盖方法的时候&#xff0c;只能抛出在基类方法的异常说明里列出的那些异常。这个限制很有用&#xff0c;因为这意味着与基类一起工作的代码&#xff0c;也能和导出类一起正常工作&#xff08;这是面向对象的基本概念&#xff09;&#…...

途虎养车上市、京东养车“震虎”,如何突围汽车后市场?

“汽车后市场第一股”终于来了&#xff01; 赶在十一黄金周之前&#xff0c;途虎养车股份有限公司(09690.HK&#xff0c;下称“途虎养车”)于9月26日挂牌港交所&#xff0c;开盘价为28港元/股&#xff0c;与发行价持平&#xff1b;IPO首日报收29.50港元/股&#xff0c;涨幅5.3…...

【算法与数据结构】--算法基础--算法入门

一、什么是算法&#xff1f; 算法是一组有序的操作步骤&#xff0c;用于解决特定问题或执行特定任务。它是一种精确而有限的计算过程&#xff0c;以输入数据作为起点&#xff0c;经过一系列明确定义的步骤&#xff0c;最终产生输出结果。算法可以看作是一种计算机程序的抽象&a…...

AnyDesk密钥

最近最新的密钥&#xff1a;7K2CV32ER6T8F8I 这款软件应该是目前用的最好的可以免费的软件了&#xff0c;记录一下密钥...

C#(Csharp)我的基础教程(二)(我的菜鸟教程笔记)-属性和字段的探究与学习

目录 1、字段字段特点&#xff1a;2、属性属性的特点 1、字段 字段是定义在方法外面的变量&#xff0c;是成员变量&#xff0c;主要是为了类的内部数据交换使用&#xff0c;字段一般是用private修饰&#xff0c;也可以用readonly修饰&#xff0c;表示只读字段&#xff0c;其它…...

Programming abstractions in C阅读笔记:p176-p178

《Programming Abstractions In C》学习第59天&#xff0c;p176-p178总结。 一、技术总结 1.addtive sequences tn tn-1 tn-2 序列&#xff1a;3, 7, 10, 17, 27, 44, 71, 115, 186, 301, 487, 788, 1275, … p177, As a general class, the sequences that follow this…...

LeetCode-496-下一个更大元素

题目描述&#xff1a; 题目链接&#xff1a;LeetCode-496-下一个更大元素 解题思路&#xff1a; 方法一&#xff1a;暴力 方法二&#xff1a;单调栈 方法一代码实现&#xff1a; class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {// 最笨的方法&am…...

C++中的Lambda表达式

一、为什么要有lambda表达式 struct Goods {string _name; // 名字double _price; // 价格int _evaluate; // 评价Goods(const char* str, double price, int evaluate):_name(str), _price(price), _evaluate(evaluate){} }; 对于一个Goods类&#xff0c;需要对其中3个成员分…...

dockerfile搭建lnmp

systemctl stop firewalld systemctl disable firewalld setenforce 0 docker network create --subnet172.18.0.0/16 --opt "com.docker.network.bridge.name""docker1" mynetwork #部署nginx&#xff08;容器IP 为 172.18.0.10&#xff09; mkdir /…...

python之数据库操作详解

一般来说&#xff0c;我们对数据库里的操作需要先连接&#xff0c;创建游标对象&#xff0c;然后通过游标对象执行SQL语句去对SQL的数据进行操作&#xff0c;本篇文章旨在记录与科普。 1.cursor相关 元组是不可变的数据类型&#xff0c;只能查询&#xff0c;不能修改&#xf…...

完成flex布局与float布局

一、flex布局 <style>.nav {display: flex;background-color: #f8f8f8; /* 导航栏背景颜色 */}.nav a {flex: 1;display: flex;align-items: center;justify-content: center;padding: 14px 16px;text-decoration: none;color: #555555; /* 导航栏文字颜色 */}.nav a:ho…...

ThinkPHP团购拼购商城源码/带分销团购商城网站源码/完美版

ThinkPHP团购拼购商城源码&#xff0c;带分销团购商城网站源码&#xff0c;很完美的一套基于ThinkPHP开发的团购分销商城源码&#xff0c;界面也很大气&#xff0c;站长亲测。有需要的可以借鉴一下。 下载地址&#xff1a;https://bbs.csdn.net/topics/613231434...

awvs 中低危漏洞

低危 X-Frame-Options Header未配置 查看请求头中是否存在X-Frame-Options Header字段 会话Cookie中缺少secure属性(未设置安全标志的Cookie) 当cookie设置为Secure标志时&#xff0c;它指示浏览器只能通过安全SSL/TLS通道访问cookie。 未设置HttpOnly标志的Cookie 当cookie设置…...

openGauss学习笔记-95 openGauss 数据库管理-访问外部数据库-postgres_fdw

文章目录 openGauss学习笔记-95 openGauss 数据库管理-访问外部数据库-postgres_fdw95.1 使用postgres_fdw95.2 postgres_fdw下推主要成分95.3 常见问题95.4 注意事项 openGauss学习笔记-95 openGauss 数据库管理-访问外部数据库-postgres_fdw openGauss的fdw实现的功能是各个…...

并不止于表面理论和简单示例——《Python数据科学项目实战》

Python 现在可以说是运用最广泛的编程语言之一&#xff0c;使用 Python 的人不只局限在计算机相关专业的从业者,很多来自金融领域、医疗领域以及其他我们无法想象的领域的人,每天都在使用 Python处理各种数据、使用机器学习进行预测以及完成各种有趣的工作。 长久以来&#xff…...

skywalking功能介绍

目标 前置&#xff1a;性能监控-微服务链路追踪skywalking搭建-CSDN博客 使用skywalking进行链路监控&#xff0c;找到应用的时间消耗再哪。 服务 服务信息 请求接口后查看skywalking&#xff0c;可以看到有一个请求&#xff0c;响应时间为1852ms&#xff0c;性能指数Apdex…...

c++桥接模式,中介者模式应用实现状态跳转

上图为例&#xff0c;按上述两种方式实现的模式跳转&#xff0c;如果在原先的三种模式之间再增加多一种模式&#xff0c;就会引起每个模式都会要求改变&#xff0c;并且逻辑混乱&#xff0c;因此更改模式为桥接中介者访问&#xff0c;将抽象和实现分离&#xff0c;实现之间采用…...

【SpringCloud】Ribbon负载均衡原理、负载均衡策略、饥饿加载

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 Ribbon 一、 Ribbon负载均衡原理1.1 负载均…...

亘古难题——前端开发or后端开发

一、引言 前端开发 前端开发是创建WEB页面或APP等前端界面呈现给用户的过程&#xff0c;通过HTML&#xff0c;CSS及JavaScript以及衍生出来的各种技术、框架、解决方案&#xff0c;来实现互联网产品的用户界面交互。 前端开发从网页制作演变而来&#xff0c;名称上有很明显的时…...

Notepad++提取含有特定字符串的行

ctrl M快捷键&#xff0c;进入"标记" 页面 标记所在行–循环查找-- 正则表达式 – 输入关键字 – 全部标记 – Copy Marked Text 关键字格式如下&#xff1a; .*关键字.*ctrl v&#xff0c;粘贴即可。...

host配置

配置host文件的作用主要是用于自定义域名与IP地址之间的映射关系。Host文件是一个操作系统用于将人类可读的域名&#xff08;例如&#xff1a;www.example.com&#xff09;映射到IP地址&#xff08;例如&#xff1a;192.168.1.1&#xff09;的文件。当你在浏览器中输入一个网址…...