整个预编译段就是为了说明要ARM的当前状态和编译器的状态要统一。这是个标准的例子,实际大多数情况不需要。但是上面的config==16只说明你编译器当前在使用的TASM.EXE 但你现在 Thumb-capable ARM processors start in ARM state(注意是MCU的状态和编译器无关)。所以要使两者一致编译出来的代码才能被运行,使用CO
DE32 使编译器也处于ARMASM.EXE状态,CO
DE16/32只会影响编译器,只有BX会改变processors state.只要两者一致就好
;Check if tasm.exe(armasm -16@ADS 1.0) is used.
GBLL THUMBCODE
[ {CONFIG} = 16
THUMBCODE SETL {TRUE}
CODE32
|
THUMBCODE SETL {FALSE}
]
MACRO
MOV_PC_LR
[ THUMBCODE
bx lr
|
mov pc,lr
]
MEND
MACRO
MOVEQ_PC_LR
[ THUMBCODE
bxeq lr
|
moveq pc,lr
]
MEND
关键字:ARM状态 编译器 状态统一
引用地址:
ARM状态和编译器状态统一
推荐阅读最新更新时间:2024-03-16 15:03
arm汇编学习(六)跳转到thumb状态
通常函数返回使用 pop {r7,pc}或bx lr等方式(bx,b类似jmp为跳转指令,但bx可以指定跳转区域究竟为thumb还是arm指令。 thumb指令指令的时候,直接填写该地址却总是产生SIGSYS信号(非法指令执行)。 原因就是该函数为thumb指令,因此跳转时必须要把指令地址的最低位设置为1(bx 通过这一位来区分指令集),所以函数地址就加了一。 thumb指令集与arm指令集切换 mov R0,#5 ;Argument to function is in R0 add R1,PC,#1 ;Load address of SUB_BRANCH, Set for THUMB by adding 1 BX
[单片机]
ARM状态寄存器 CPSR SPSR
CPSR:程序状态寄存器(current program status register) ,cpsr在用户级编程时用于存储条件码。CPSR包含条件码标志,中断禁止位,当前处理器模式以及其他状态和控制信息。 SPSR:程序状态保存寄存器。SPSR用于保存CPSR的状态,以便异常返回后恢复异常发生时的工作状态。 CPSR(当前程序状态寄存器)在任何处理器模式下被访问。它包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。每一种处理器模式下都有一个专用的物理状态寄存器,称为SPSR(备份程序状态寄存器)。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常中断退出时,可以用SPSR来恢
[单片机]
Keil5配置GCC编译器编译STM32工程
Keil一般使用ARMCC编译MCU工程代码。偶然听说Keil也是支持内嵌GCC编译器的。于是尝试了网上博客所述的一些方法,最终找到了一篇博客 http://blog.csdn.net/lan120576664/article/details/46806991 按照文中所述,发现仍存在一些其他错误,后来又查找了其他相关资料,在这作以总结 一、下载GCC编译器 https://launchpad.net/gcc-arm-embedded/ 二、安装GCC GCC解压到keil的安装目录下面。如下图 三、配置Keil 如下图所示进行相关设置: Prefix:arm-none-eabi- Folder:D:k
[单片机]
入门MSP430FR6989 第一章
从今天开始我就开始我开始学习了MSP430FR6989,前几天一直在找资料,找的很头疼。现在正式开始学习。 前两天我一直在琢磨到底用什么编译器,用什么版本,经过了我长时间的挣扎,一直不停的换编译器,最终选在CCS9.01版本上操作,选择他是因为好像CCS6.0不支持6989,8.3的Resource Explorer(430的辅助编程在线版,感觉还好用),不能联网。 先从安装软件开始。 先从ti官网下载ccs最新版(网站: http://software-dl.ti.com/ccs/esd/documents/ccs_downloads.html ),下载后解压-,0解压包建议不要放在含有中文的目录(切记),然后打开文件,如图
[单片机]
LabVIEW编译器深层解析
编译程序设计是一个复杂的话题,即使对内行的软件工程师来说也要考虑很多专业知识。 NI LabVIEW软件是一种多规范的图形化编程环境,含有多种概念,包括数据流,面向对象,以及事件驱动编程。LabVIEW也是跨越多种平台的,能够很好地用于多种操作系统(OSs),芯片组,嵌入式设备,以及现场可编程门阵列(FPGAs)。LabVIEW编译程序是一种精密的系统,在过去的20年中具有令人瞩目的发展。探索NI公司的LabVIEW编译程序的处理过程以及近来编译程序的创新。 LabVIEW编译程序处理过程 首先一个VI的编译是类的扩展,主要负责将隐含的类解析为适于终端输出与检查句法错误的类型。在类扩展之后,VI从编辑模型转化为可以被编译程
[测试测量]
控制IRQ和FIQ中断的编译器内部函数 - 基于Keil MDK
编译器内部函数__disable_irq、__enable_irq、__disable_fiq和__enable_fiq用于控制IRQ和FIQ中断。 只有当处理器处于特权模式才可以使用这些内部函数,因为这些函数要改变寄存器CPSR和SPSR(ARM7、ARM9等)或者PRIMASK和FAULTMASK寄存器(Cortex-M3、M4等),而这些寄存器只有在特权模式下才能被访问。 这些内部函数对所有架构的处理器都有效,无论是ARM状态还是Thumb状态,如下所述: 如果使用的是ARMv6(ARM11)或更新架构,编译器会将这些函数用CPS指令代替。 如果使用的是ARMv4或者ARMv5架构并且处于ARM状态,编译器会将这些函
[单片机]
Ubuntu 安装arm-linux-gcc编译器
/********************************************************************************** * Ubuntu 安装arm-linux-gcc编译器 * 说明: * Ubuntu下直接安装arm-linux-gcc编译器,省得去配置那些环境。 * * 2017-3-21 深圳 南山平山村 曾剑锋 *********************************************************************************/ 一、参考文档:
[单片机]
ARM状态和Thumb状态通俗理解
《嵌入式系统开发与应用教程(第2版)》上介绍说:有两种状态ARM状态和Thumb状态,当时初学甚为不解,现在一知半解时再看忽然想到了现实中的例子: ARM核就好比一个高中学校,那种包含普通高中和职业高中的。普通高中就相当于ARM状态,职业高中就相当于Thumb状态,这样还不能理解的话:可以认为 泡泡卡丁车 中普通模式和加速模式,,卡丁车加速要等到集气管加满,然后 ctrl 一下,就切换到了加速模式,气放完了就又回来了,不管加速模式还是普通模式都是在跑,只是速度不一样而已。 而ARM状态和Thumb状态可以直接通过某些指令直接切换,都是在运行程序,只不过指令长度不一样而已。这个概念对初学者相当重要,因为当ARM
[单片机]