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.rhkb.cn/news/284027.html

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

相关文章

docker 数据卷 (二)

1,为什么使用数据卷 卷是在一个或多个容器内被选定的目录,为docker提供持久化数据或共享数据,是docker存储容器生成和使用的数据的首选机制。对卷的修改会直接生效,当提交或创建镜像时,卷不被包括在镜像中。 总结为两…

FileZilla 链接服务器提示 20 秒连接超时

FileZilla 有个默认设置是如果 20 秒没有数据的话会自动中断链接。 Command: Pass: **************** Error: Connection timed out after 20 seconds of inactivity Error: Could not connect to server修改配置 这个配置是可以修改的,修改的步骤为: …

PostgreSQL中控制文件的解析与恢复

最近遇到有人问起PG中控制文件的一些使用问题,总结了一下。 1、PG控制文件简介 1.1、存储的位置 它的路径位于: 相关信息,可以用命令pg_controldata得到: [10:41:27-postgres@centos2:/var/lib/pgsql/14/data/global]$ pg_controldata -D $PGDATA pg_control version …

【LabVIEW FPGA入门】FPGA寄存器(Register)

当您需要从多个时钟域或设计的不同部分访问数据,并且需要编写可重复使用的代码时,可使用寄存器项来存储数据。与 FIFO 相比,寄存器项消耗的 FPGA 逻辑资源更少,而且不消耗块存储器,而块存储器是最有限的 FPGA 资源类型…

java数据结构与算法基础-----字符串------正则表达式---持续补充中

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 目前校招的面试,经常会遇到各种各样的有关字符串处理的算法。掌…

综合知识篇20-基于中间件的开发新技术考点(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

专栏系列文章: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html案例分析篇00-【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例…

基于python+vue电影院订票信息管理系统flask-django-php-nodejs

根据此问题,研发一套电影院订票信息管理系统,既能够大大提高信息的检索、变更与维护的工作效率,也能够方便信息系统的管理运用,从而减少信息管理成本,提高效率。 该电影院订票信息管理系统采用B/S架构、前后端分离以及…

家用路由器和企业路由器的区别?

一、家用路由器 家用路由器路由器交换机 它只有一个WAN口和一个LAN口,WAN口接公网一个地址,LAN口接你电脑一个IP地址,完全符合路由器的设计,而因为家里如果用了,说明要接多个电脑,那么如果还需要对每个接口…

MySQL 8.0-索引- 不可见索引(invisible indexes)

概述 MySQL 8.0引入了不可见索引(invisible index),这个在实际工作用还是用的到的,我觉得可以了解下。 在介绍不可见索引之前,我先来看下invisible index是个什么或者定义。 我们依然使用拆开来看,然后再把拆出来的词放到MySQL…

LLM漫谈(五)| 从q star视角解密OpenAI 2027年实现AGI计划

最近,网上疯传OpenAI2027年关于AGI的计划。在本文,我们将针对部分细节以第一人称进行分享。​ 摘要:OpenAI于2022年8月开始训练一个125万亿参数的多模态模型。第一个阶段是Arrakis,也叫Q*,该模型于2023年12月完成训练&…

【小沐学Python】Python实现Web图表功能(Lux)

文章目录 1、简介2、安装3、测试3.1 入门示例3.2 入门示例2 结语 1、简介 https://github.com/lux-org/lux 用于智能可视化发现的 Python API Lux 是一个 Python 库,通过自动化可视化和数据分析过程来促进快速简便的数据探索。通过简单地在 Jupyter 笔记本中打印出…

数据结构系列-空间复杂度讲解

🌈个人主页:会编程的果子君 💫个人格言:“成为自己未来的主人~” 空间复杂度 空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用存储空间大小的量度。 空间复杂度不是程序占用了多少bytes的空间,因…

【WEEK4】 【DAY4】AJAX第一部分【中文版】

【WEEK4】 【DAY4】AJAX第一部分【中文版】 2024.3.21 Thursday 目录 8.AJAX8.1.简介8.2.伪造ajax8.2.1.新建module:springmvc-06-ajax8.2.2.添加web支持,导入pom依赖8.2.2.1.修改web.xml8.2.2.2.新建jsp文件夹 8.2.3.新建applicationContext.xml8.2.4.…

分布式搜索引擎ES-RestClient查询文档快速入门

RestClient查询文档快速入门 文章目录 RestClient查询文档快速入门1.1、match_all1.2、全文检索查询1.3、精确查询1.4、复合查询-boolean query1.5、排序和分页1.6、高亮(解析查询高亮结果) 1.1、match_all package cn.mannor.hotel;import org.apache.…

I2C系列(三):软件模拟I2C读写24C04

一.目标 PC 端的串口调试软件通过 RS-485 与单片机通信,控制单片机利用软件模拟 I2C 总线对 EEPROM(24C04) 进行任意读写。 二.RS-485简述 在工业控制领域,传输距离越长,要求抗干扰能力也越强。由于 RS-232 无法消除…

开放签开源电子签章白皮书-简版

开放签开源电子签章白皮书-简版 一、摘要: 开放签电子签章团队源自于电子合同SaaS公司,立志于通过开源、开放的模式,结合团队十多年的行业经验,将电子签章产品更简单、更低门槛的推广到各行各业中。让电子签章应用更简单&#x…

Pycharm小妙招之Anaconda离线配环境

Pycharm小妙招之Anaconda离线配环境———如何给无法联网的电脑配python环境? 1. 预备工作2. 电脑1导出包2.1 环境路径2.2 压缩py38导出至U盘 3. 电脑2导入包4. 验证是否导入成功4.1 conda查看是否导入4.2 pycharm查看能否使用 1. 预备工作 WINDOWS系统电脑1(在线)…

jmeter使用

jmeter是进行压力测试时候的关键的工具,对开发人员来说是重要的工具之一 一.安装 说明:因为jmeter是使用jave编写,并且从官网下载下来的是二进制source,需要java的运行环境即jdk ①去官网下载jdk的包https://www.oracle.com/java/technologies/downloads,之后再选好需要的jd…

利用Base64加密算法将数据加密解密

1. Base64加密算法 Base64准确来说并不像是一种加密算法,而更像是一种编码标准。 我们知道现在最为流行的编码标准就是ASCLL,它用八个二进制位(一个char的大小)表示了127个字符,任何二进制序列都可以用这127个字符表…

SpringBoot 文件上传(二)

上一节讲解了如何利用MultipartFile接收浏览器端上传的文件,这节讲解服务器端如何将文件保存到本地目录下,下节讲解服务端如何将文件保存在阿里云上。 本节需要解决两个难点: 文件重名问题文件大小限制问题 存储文件 首先解决如何存储文件…