STM32 使用gcc编译介绍

文章目录

  • 前言
  • 1. keil5下的默认编译工具链用的是哪个
  • 2. Arm编译工具链和GCC编译工具链有什么区别吗?
  • 3. Gcc交叉编译工具链的命名规范
  • 4. 怎么下载gcc-arm编译工具链
  • 参考资料


前言

我们在STM32上进行开发时,一般都是基于Keil5进行编译下载,Keil5中默认集成了arm的编译工具链。

这种方式的优点是简单方便,但是相对应的不够灵活。例如我们在实际开发过程中
经常一套代码需要在不同的RTOS和硬件平台上运行,为了更好的维护这套代码,我们一般会对RTOS和硬件驱动进行抽象,不同的RTOS和硬件平台分别是实现这些抽象。

然后通过编译时传入不同参数来确定最终要使用的RTOS和硬件平台。这种情况如果利用Keil5去直接编译就比较麻烦,因此我们需要借助makefile去组织和管理代码。这个时候就要用到另外一种编译工具链gcc了。

本文主要介绍如何使用gcc通过makefile去管理和构建项目。

1. keil5下的默认编译工具链用的是哪个

在这里插入图片描述

KEIL -> Project -> Manage -> Manage Project Items -> Folders/Extensions
目录下查找,我们默认用的应该是这个ARMCC。

另外我们可以通过勾选“User Gcc Compiler for ARM ”旁边的按钮,选中使用gcc进行编译,后面有个Folder是Gcc编译工具链的目录。默认情况下这个目录是不具有我们所需的编译工具链的,因此此时需要我们去网上下载Gcc编译工具链,然后替换成下载后的编译工具链所在的目录再进行编译。

2. Arm编译工具链和GCC编译工具链有什么区别吗?

ARM编译工具链和GCC编译工具链都是常用的编译工具链,用于将源代码编译成目标可执行文件或库。它们之间的主要区别在于以下几点:

支持架构:

ARM编译工具链专门针对ARM架构的处理器进行优化,提供了针对ARM架构的特定优化选项,以实现更好的性能。
GCC编译工具链是一个开源的通用编译工具链,支持多种架构,包括ARM、x86、MIPS等,因此不像ARM编译工具链那样可以提供特定于ARM架构的优化。

授权和商业支持:

ARM编译工具链通常由ARM公司提供,可能需要购买授权才能使用,同时提供相应的商业支持。
GCC编译工具链是开源免费的,可以自由使用和分发,但可能缺乏官方的商业支持,依赖于社区及第三方提供的支持。

优化和性能:

由于ARM编译工具链专门针对ARM架构进行优化,因此在编译ARM架构的代码时可能会实现更好的性能。
GCC编译工具链虽然功能强大且支持多种架构,但在特定架构上的优化可能没有ARM编译工具链那么精确。

工具版本和更新:

ARM编译工具链可能会更紧密地与ARM架构的最新特性和指令集保持同步,从而在新一代ARM处理器上获得更好的性能。
GCC编译工具链由于是开源项目,更新和版本发布可能相对较慢,不一定能够及时支持最新的ARM架构特性。

总的来说,选择使用ARM编译工具链还是GCC编译工具链取决于具体应用场景和需求。如果项目主要面向ARM架构,并追求更好的性能和支持,则ARM编译工具链可能是一个更好的选择;而如果需要跨多个架构或对成本和开放性有更高要求,GCC编译工具链可能更适合。

3. Gcc交叉编译工具链的命名规范

命令规范

arch [-vendor] [-os] [-(gnu)eabi]arch : 架构的意思,如ARM ,MIPSvendor: 工具链的提供厂商os: 支持的操作系统eabi:嵌入式应用二进制接口(Embedded Application Binary Interface)
abi:	计算机上的

arm gcc还分为是否支持操作系统

  • 支持操作系统:
    arm-none-linux-gnueabi
    主要用于基于ARM架构的Linux系统,可用于编译 ARM 架构的 u-boot、Linux内核、linux应用等。基于GCC,使用Glibc库,经过 Codesourcery 公司优化过推出的编译器。

  • 不支持操作系统
    arm-none-eabi-gcc
    用于编译 ARM 架构的裸机系统(包括 ARM Linux 的 boot、kernel,不适用编译 Linux 应用 Application),一般适合 ARM7、Cortex-M 和 Cortex-R 内核的芯片使用,所以不支持那些跟操作系统关系密切的函数。

4. 怎么下载gcc-arm编译工具链

下载地址
在这里插入图片描述
我们用的是Linux的虚拟机,所以需要下载基于Linux的gcc-arm-none-eabi工具链。
但是上方有两个不同架构平台的,分别是x86_64和aarch64。
可以通过在linux虚拟机上执行

 	uname -m 

来确定当前使用的是什么架构,并下载对应架构的编译工具链。

参考资料

Windows中使用GCC编译STM32CubeMx生成的Makefile文件

arm 交叉编译器各种gcc 傻傻分不清楚:gnueabi,gnueabhf,none-eaib

深入理解工具链-自己搭建STM32编程IDE

arm-gnu编译工具链下载地址

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

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

相关文章

React中的受控组件与非受控组件

受控组件与非受控组件 受控组件 组件(input, select)的状态与state的值绑定&#xff0c;组件的状态全程响应外部数据 class TestComponent extends React.Component {constructor (props) {super(props);this.state { username: lindaidai };}render () {return <input …

区块链安全之DDoS防护的重要性及其实施策略

随着区块链技术的不断发展和广泛应用&#xff0c;其安全问题也日益凸显。其中&#xff0c;分布式拒绝服务(DDoS)攻击是对区块链网络稳定性和效率构成潜在威胁的重要因素之一。本文旨在深入探讨区块链为何需要采取DDoS高防措施&#xff0c;并提出相应的防护策略。 一、区块链面…

博客系统——3、数据库表设计 - 博客标签表

任务描述 本关任务&#xff1a;在博客数据库中建立博客标签表。 相关知识 多对多关系的建立 每一个博客都可以设置很多个标签&#xff0c;比如一篇讲JavaWeb知识的博客&#xff0c;就可能会涉及到多个标签如&#xff1a;前端、后端、Java、SpringMVC等标签&#xff0c;而一…

碳课堂|什么是碳资产?企业如何进行碳资产管理?

碳资产是绿色资产的重要类别&#xff0c;在全球气候变化日益严峻的背景下备受关注。在“双碳”目标下&#xff0c;碳资产管理是企业层面实现碳减排目标和低碳转型的关键。 一、什么是碳资产&#xff1f; 碳资产是以碳减排为基础的资产&#xff0c;是企业为了积极应对气候变化&…

Kubernetes示例yaml:1. service-deployment.yaml

service-deployment.yaml 示例 apiVersion: apps/v1 kind: Deployment metadata:name: example-plusnamespace: aaaalabels:app: example-prdapp_unit: AAAA-EXAMPLE spec:replicas: 2selector:matchLabels:app: example-prdtemplate:metadata:labels:app: example-prdapp_uni…

js相关的dom方法

查找元素 //获取元素id为box的元素 document.getElementById(box) //获取元素类名为box的元素 document.getElementsByClassName(box) //获取标签名为div的元素 document.getElementsByTagName(div)改变元素 //设置id为box的元素内容 document.getElementById("box"…

常见位运算的总结

目录 一、基础位运算 二、给一个数n&#xff0c;确定它的二进制中的第x位是0还是1 三、将一个数n的二进制表示的第x位修改成1 四、将一个数n的二进制位表示的第x位修改成0 五、位图思想 六、提取一个数(n)二进制表示中最右侧的1(lowbit) 七、干掉一个数n的最右侧的1 八、…

1.5T数据惨遭Lockbit3.0窃取,亚信安全发布《勒索家族和勒索事件监控报告》

本周态势快速感知 本周全球共监测到勒索事件93起&#xff0c;近三周攻击数量呈现持平状态。 本周Lockbit3.0是影响最严重的勒索家族&#xff0c;Blacksuit和Ransomhub恶意家族紧随其后&#xff0c;从整体上看Lockbit3.0依旧是影响最严重的勒索家族&#xff0c;需要注意防范。 …

神经网络代码实现(用手写数字识别数据集实验)

目录 一、前言 二、神经网络架构 三、算法实现 1、导入包 2、实现类 3、训练函数 4、权重参数矩阵初始化 5、参数矩阵变换向量 6、向量变换权重参数矩阵 7、进行梯度下降 7.1、损失函数 7.1.1、前向传播 7.2、反向传播 8、预测函数 四、完整代码 五、手写数字识别 一、前言 …

LVS负载均衡(load balance)

一 LVS LVS&#xff1a;Linux Virtaul Server&#xff0c;该软件的功能是实现 LB&#xff08;load balance&#xff09; 二LVS 的三种工作模式 1.NAT 模式&#xff08;NAT&#xff09; LVS 服务器同时充当一台 NAT 网关&#xff0c;拥有公有 IP &#xff0c;同时负责将针对此…

数据结构——队列(C语言版)

前言&#xff1a; 在学习完数据结构顺序表和链表之后&#xff0c;其实我们就可以做很多事情了&#xff0c;后面的栈和队列&#xff0c;其实就是对前面的顺序表和链表的灵活运用&#xff0c;今天我们就来学习一下队列的原理和应用。 准备工作&#xff1a;本人习惯将文件放在test…

美国大选献金项目数据分析

需求 加载数据查看数据的基本信息指定数据截取&#xff0c;将如下字段的数据进行提取&#xff0c;其他数据舍弃 cand_nm &#xff1a;候选人姓名contbr_nm &#xff1a; 捐赠人姓名contbr_st &#xff1a;捐赠人所在州contbr_employer &#xff1a; 捐赠人所在公司contbr_occu…

yarn安装和使用及与npm的区别

一、yarn安装和使用 要安装和使用yarn&#xff0c;您可以按照以下步骤进行操作&#xff1a; 安装Node.js&#xff1a;首先&#xff0c;您需要在您的计算机上安装Node.js。您可以从Node.js的官方网站&#xff08;https://nodejs.org/en/download/&#xff09;下载并安装适用于您…

Linux 中用grep命令 辅助excle筛查数据

问题&#xff1a;因为要对多个年度的多个工作的相关于人员进行匹配&#xff0c;以形成人员信息详细表&#xff0c;要从总表中根据项目人员名单进行筛出。最常用是excle 中的VULOOUP 函数&#xff0c;但是由于人员信息详表中有格式、内容方面的问题&#xff0c;无法实现&#xf…

搭建Flutter开发环境、从零基础到精通(文末送书【北大出版社】)

目录 搭建开发环境 1. 下载Flutter SDK 2. 设置镜像地址及环境变量 3. 安装与设置Android Studio 4. 安装Visual Studio Code与Flutter开发插件 5. IDE的使用和配置 6. 安装Xcode 7. 检查Flutter开发环境 好书推荐 内容简介 作者简介 搭建开发环境 Flutter可以跨平…

selenium完结篇,补充知识点

1、前两期没看的建议先去看前两期博客 2、选择框的勾选 getAttribute("type")是获取属性的意思 List<WebElement> webElementswebDriver.findElements(By.cssSelector("input"));for(int i0;i<webElements.size();i){if(webElements.get(i).getA…

使用npm i进行admin依赖安装的时候出现问题

提示&#xff1a; npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to https://registry.npm.taobao.org/string-width failed, reason: certificate has expired 切换淘宝源到http或者更换其他国内镜像 npm config set registry http:/…

C# get set 访问器

在C#中get 访问器set 访问器属性的优势例子 在C#中 get 和 set 是访问器&#xff08;accessors&#xff09;的关键词&#xff0c;它们用于定义属性的读取和写入行为。属性是一种特殊的类成员&#xff0c;它提供了对字段&#xff08;field&#xff09;或计算结果的灵活访问。 …

Vue2进阶——组件通信

文章目录 一、props配置项二、组件自定义事件三、全局事件总线四、消息订阅与发布 一、props配置项 作用&#xff1a;组件间通信传递数据 <Demo name"xxx"/>接收数据 1. 只接收 props:[name] 2. 限制类型 props&#xff1a;{name:string } 3.限制类型&#…

Salesforce宣布将停用Workflow Rules和Process Builder!

在近期的公告中&#xff0c;Salesforce透露在2025年12月31日之后将不再支持Workflow Rules和Process Builder。 Salesforce敦促用户在截止日期前将其自动化流程迁移到Flow Builder&#xff0c;以确保不间断的支持和漏洞修复。此举正值Salesforce将重点转向更现代、可扩展、低代…