【ARM 嵌入式 编译系列 2.3 -- GCC 编译参数学习 -Wa,-mimplicit-it=thumb 使用介绍】


请阅读【嵌入式开发学习必备专栏 之 ARM GCC 编译专栏】


文章目录

    • 问题背景
      • -wa,-mimplicit-it=thumb 介绍
      • `-wa` 选项
      • `-mimplicit-it=thumb` 选项
      • 使用 `-wa,-mimplicit-it=thumb`

问题背景

在移植 RT-Thread 时,使用Make 进行编译,结果遇到了下面问题:

rtt_os/cortex-m33/context_gcc.S: Assembler messages:
rtt_os/cortex-m33/context_gcc.S:154: Error: thumb conditional instruction should be in IT block – vstmdbeq r1!,{d8-d15}' rtt_os/cortex-m33/context_gcc.S:198: Error: thumb conditional instruction should be in IT block -- vldmiaeq r1!,{d8-d15}’
make: *** [rtt_os/cortex-m33/subdir.mk:13: rtt_os/cortex-m33/context_gcc.o] Error 1

-wa,-mimplicit-it=thumb 介绍

在使用 arm-none-eabi-gcc 编译 ARM 架构代码时,你可能会碰到一些控制汇编器行为的编译器选项。-wa 是一个 GCC 编译器选项,用于向汇编器传递参数。

-wa,-mimplicit-it=thumb 实际上是一组两个选项,它们的作用如下:

-wa 选项

-wa 选项允许你将参数直接传递给汇编器。它用于告诉 gcc 后端,在调用 as 汇编器时附加额外的命令行参数。你可以使用这个选项添加任何标准的汇编器命令行参数。

语法如下:

gcc -c -o output.o source.c -Wa,<assembler-options> 

其中 <assembler-options> 是要传递给 as 汇编器的选项列表,用逗号分隔。

-mimplicit-it=thumb 选项

-mimplicit-it=thumb 是传递给 as 汇编器的一个选项,它和 Thumb 指令集有关。

  • -m: 这总是 as 汇编器选项的前缀,表示这是一个指定给汇编器的机器相关的选项。

  • implicit-it: IT 指令是 ARM 架构中的「If-Then」指令,它用于 Thumb-2 指令集中的条件执行。在 ARM 模式下,大多数指令都可以直接带有条件码进行条件执行,而在 Thumb 模式(特别是在更旧的架构中),你需要显式地使用 IT 指令来实现条件执行。

  • =thumb: 这个值告诉汇编器在必要时隐式地插入 IT 指令,以使得后面的 Thumb 指令能够条件执行。这是对于兼容性的考虑,特别是在混合 ARM 和 Thumb-2 代码时有用。在 ARMv8 中,大多数形式的条件执行都已经被弃用,除了分支指令。

当使用 -mimplicit-it=thumb 时,你不需要在汇编代码中显式编写 IT 指令,汇编器会在需要的时候自动插入。

使用 -wa,-mimplicit-it=thumb

在命令行中组合这两个选项的实例如下:

arm-none-eabi-gcc -c -o output.o source.c -Wa,-mimplicit-it=thumb 

这条命令会编译 source.c 文件,并将 -mimplicit-it=thumb 选项传递给汇编器,允许在生成 Thumb-2 指令时自动插入 IT 指令。

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

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

相关文章

【正点原子STM32连载】 第四十四章 外部SRAM实验 摘自【正点原子】APM32E103最小系统板使用指南

1&#xff09;实验平台&#xff1a;正点原子APM32E103最小系统板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/docs/boards/xiaoxitongban 第四…

【备战蓝桥杯】快来学吧~ 图论巩固,Delia的生物考试

蓝桥杯备赛 | 洛谷做题打卡day12 文章目录 蓝桥杯备赛 | 洛谷做题打卡day12最大食物链计数题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示题解代码总的思路&#xff1a;拓扑排序 我的一些话 最大食物链计数 题目背景 你知道食物链吗&#xff1f;Delia 生…

SSM汽车维修管理系统

工具使用情况&#xff1a; eclipsetomcatmysqljdk 技术架构&#xff1a; 后台&#xff1a;springspring mvcmybatis 前台&#xff1a;easyui 功能介绍&#xff1a; 汽车维修管理、车辆接待、维修项目登记、维修领料、质检完工、消费结算 配件管理、财务管理、基础数据管理…

自存angular 复制功能 使用angular material design Clipboard cdk

import { Clipboard } from "angular/cdk/clipboard"; 实例化 constructor(private clipboard: Clipboard) {} 使用 参考angular clipboard cdk html&#xff1a; <button mat-button class"withdraw-btn" (click)"copyCode()"><mat-…

Vue3+Ts:使用i18n实现国际化与全局动态下拉框框切换语言

Vue3Ts&#xff1a;使用i18n实现国际化与全局动态下拉框框切换语言 一、下载依赖&#xff1a;二、创建ts文件并配置main.ts三&#xff0c;如何使用1.在<template>中使用2.在setup中使用 四、全局下拉框动态切换 一、下载依赖&#xff1a; npm install vue-i18nnex二、创…

二进制表示(14)

题目 public class Main {public static String con01(int x,int n) {StringBuffer s new StringBuffer();while(x!0) {s.append(x%n);x/n;}return s.reverse().toString();}public static int con02(int x,int n) {StringBuffer s new StringBuffer();int sum 0;while(x!0…

二、VS2019编译的VTK9.0.0 + Qt 5.14.2 环境测试

1. 使用CMake VS2019 编译vtk 9.0.0 时,需要启用支持Qt开关、如下图 如果不会编译的可以参见我的这篇文章: 一、VTK 9.0.0 编译安装步骤 VS2019 CMake3.26.0-CSDN博客 打开Qt5.14.2 ,创建Qt Widget 项目: 构建设置选择 MSVC2017 64bit pro 项目文件加入两行配置: …

MySQL深入——14

Mysql是如何保证数据不全的&#xff0c;Mysql的数据写入是两阶段提交完成的&#xff0c;即为redo log的prepare阶段和bin log阶段还有redo log的commit阶段&#xff0c;那么数据就和redo log 和bin log 有关。 我们来看看bin log 和redo log的写入机制 bin log bin log的写入…

鸿蒙开发系列教程(四)--ArkTS语言:基础知识

1、ArkTS语言介绍 ArkTS是HarmonyOS应用开发语言。它在保持TypeScript&#xff08;简称TS&#xff09;基本语法风格的基础上&#xff0c;对TS的动态类型特性施加更严格的约束&#xff0c;引入静态类型。同时&#xff0c;提供了声明式UI、状态管理等相应的能力&#xff0c;让开…

商铺对外出租招标标书

随着市场经济的蓬勃发展&#xff0c;商铺对外出租已成为一种普遍的商业模式。对于房东或业主而言&#xff0c;通过招标方式出租商铺不仅可以提高租金收益&#xff0c;更能确保商铺的稳定租户。 一、招标标书的基本要素 1. 项目概述&#xff1a;简要介绍商铺的位置、面积、装修…

2023华数杯国际赛A题核废水40页完整高质量原创论文

大家好&#xff0c;从昨天肝到现在&#xff0c;终于完成了本次华数杯国际赛数学建模A题的完整论文了。 给大家看一下目录吧&#xff1a; 目录 摘 要&#xff1a; 10 一、问题重述 12 二&#xff0e;问题分析 13 2.1问题一 13 2.2问题二 13 2.3问题三 13 2.4问题四 13 …

GetShell的姿势

0x00 什么是WebShell 渗透测试工作的一个阶段性目标就是获取目标服务器的操作控制权限&#xff0c;于是WebShell便应运而生。Webshell中的WEB就是web服务&#xff0c;shell就是管理攻击者与操作系统之间的交互。Webshell被称为攻击者通过Web服务器端口对Web服务器有一定的操作权…

javaWebssh运动会管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh运动会管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,M…

Beyond Compare ubuntu 安装

文章目录 参考 具体方法请参考【1】、【2】&#xff0c;亲测有效。 参考 【1】deepin深度系统 BeyondCompare 4.3.4破解教程 【2】Beyond-Compare 4 -linux 破解

Java医药WMS进销存系统

技术架构&#xff1a; jdk8 IntelliJ IDEA maven Mysql5.7 有需要的可以私信我。 系统功能与介绍&#xff1a; 医药进销存系统&#xff0c;主要分两种角色&#xff1a;员工、客户。本系统具有进销存系统的通用性&#xff0c;可以修改为其它进销存系统&#xff0c;如家电进…

Git tag使用

tag常被称作里程碑&#xff0c;发版Release时用到。 怎么添加tag&#xff1f; 问 &#xff1a; 刚修改完代码 还未 Commit 可以直接 git tag v2.4.6.1 -m "[Update]更新proxy379ac539"吗&#xff1f; 答&#xff1a; 不可以&#xff0c;git tag 命令是用来给已经存…

windows虚拟主机和linux虚拟主机的区别有哪些?

很多个人站长和中小企业在做网站的时候&#xff0c;会选择虚拟主机。虚拟主机用的操作系统多为Windows系统&#xff0c;很多人一提到操作系统立马联想到Windows系统。其实除了Windows系统外&#xff0c;还有很多的操作系统。其中Linux系统是其中的佼佼者。 1、操作系统 window…

JUC并发编程-线程和进程、Synchronized 和 Lock、生产者和消费者问题

1、什么是JUC 源码 官方文档 面试高频问&#xff01; java.util 工具包、包、分类 业务&#xff1a;普通的线程代码 Thread Runnable Runnable 没有返回值、效率相比入 Callable 相对较低&#xff01; 2、线程和进程 线程、进程&#xff0c;如果不能使用一句话说出来的技术…

Python基础数据结构和操作

一、字符串 一. 认识字符串 字符串是 Python 中最常用的数据类型。我们一般使用引号来创建字符串。创建字符串很简单&#xff0c;只要为变量分配一个值即可。 a hello world print(type(a))注意&#xff1a;控制台显示结果为<class str>&#xff0c; 即数据类型为str…

创建SERVLET

创建SERVLET 要创建servlet,需要执行以下任务: 编写servlet。编译并封装servlet。将servlet部署为Java EE应用程序。通过浏览器访问servlet。编写servlet 要编写servlet,需要扩展HttpServlet接口的类。编写servlet是,需要合并读取客户机请求和返回响应的功能。 读取和处…