问题标签 [thumb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - 如何为 thumb2 (T32) 指令运行 linaro 汇编程序
我有一个带有 thumb2 (T32) 指令的简单汇编文件 (temp.S)。例如: orr R4,R7,R8
我想用 linaro 汇编器来组装它,但我找不到合适的标志来做这件事。
如果我尝试:
然后我得到了A32版本指令的汇编
但是,如果我尝试:
我收到错误消息
好像它正在等待 T16 指令。
任何有关 T32 指令正确标志的帮助将不胜感激。
顺便说一下,我的汇编器版本是:GNU assembler (crosstool-NG linaro-1.13.1-4.8-2014.01 - Linaro GCC 2013.11) 2.24.0.20131220
branch - Issues with Thumb-2 Branch Instruction
I'm currently creating an application that would take in the user's input and return to them the hex of the branch instruction they wanted.
The input includes:
- Branch Type (Conditional/Non-Conditional)
- If conditional, the condition
- Address to branch to
- Address branching from
I can currently fill in most bits of the 32 bits but I am unable to fill in three certain bits which bother me. These are the S bit, the J1 bit, and the J2 bit as shown in the references below:
Do these bits have default values? Otherwise, how do I know the value I need to use for them? Thanks for your time.
linker - 如何最小化或消除 ARM/Thumb 远调用补丁?
我正在开发一种产品,其中闪存空间(用于固件存储)和内存(用于执行)都非常宝贵。因此,我希望生成的 ELF 尽可能小,而不会明显牺牲产品性能。代码混合编译为 ARM 和 Thumb,当我可以摆脱它时,基本上使用 Thumb 模式。我一直在调整编译器/链接器选项以减小大小(优化空间、删除未使用的函数等)。我注意到的一件事是我得到了很多(大约 180 个)生成的远调用补丁,这占用了一些空间。
长话短说,任何人都知道最小化或消除这些补丁的好方法(大概是通过避免大多数/所有远调用)?在我看来,应该有一种方法来重新组织和优化所有内容在其各自的内存部分中的存储/链接顺序,到目前为止调用是不必要的或至少是最小化的。
编辑:我不再需要这个问题的答案。事实证明,远调用在该产品中是不可避免的,因为它们是 ITCM 和 SRAM 之间的调用所必需的(不幸的是,它们在地址空间中彼此相距很远)。感谢您的评论和回答。
c - 执行 arm blx rx 时的 EXC_BAD_ACCESS
这是在 armv7 上崩溃的 c 源代码行:
在调试器中,fnPtr 的地址为 0x04216c00。当我在指向上述语句的电脑上反汇编时,这是我得到的:
现在,当我反汇编地址 $r2 (=0x4216c00) 的内存时,我得到了看似有效的代码,应该毫无问题地执行:
然而,真正发生的是:
EXC_BAD_ACCESS(代码=2,地址=0x4216c00)
谁能解释什么是错的以及为什么该地址被认为是非法的?
全面披露:我不是装配专家。编译和链接的代码都是 c 代码。编译器是clang。
c - LPC1788 微控制器的原子测试和设置
我正在使用 NXP LPC1788 微控制器,并且正在用 C 语言开发一个多线程应用程序。在我的应用程序的一部分中,我定义了一个自定义链表数据结构。由于对特定列表的并发访问,我之前的程序遇到了问题,我似乎已经通过为列表实现“锁定获取”方法和“锁定释放”方法解决了这些问题,线程可以在访问列表本身之前调用这些列表。
我通过在列表结构中添加一个“sema”数据成员来做到这一点:
我的“锁定获取”方法如下:
我的“锁定释放”方法如下:
一般来说,这似乎工作正常,因为我的应用程序涉及每秒数千次向这样的列表添加和删除项目,并且从那以后我没有注意到任何与并发访问相关的错误。
但是,为了更有信心这样做,我想知道是否有任何方法可以实现测试和设置方法。LPC1788 依赖于特定于 Cortex-M3 微控制器的 Thumb 指令集版本,可在此处或第 918 页的用户手册中找到该版本。
但是,通过它,我找不到像测试和设置指令这样的东西。我可能只是忽略了它。
理想情况下,我想要这样的东西:
编辑
根据 Nemo 的回答,我尝试了以下方法:
如果有帮助,这是相应的汇编代码:
我无法重现并发访问问题(假设这是我遇到的并发问题),所以我不确定这是否有效。
arm - 在用户模式下恢复 Thumb 状态
我正在编写线程切换代码,其中内核将相关状态转储到内存,但实际的线程切换完全发生在用户模式下。
这可以正常工作,除非抢占点出现在 Thumb If-Then (IT) 块内。在那种情况下,我无法弄清楚如何恢复 ITSTATE(即 CPSR 的 [15:10] 和 [26:25] 位),因为这些位是用户 RAZ/WI,并且无论如何它可能不会给定 ITSTATE 的语义。
什么(如果有)是在不陷入内核的情况下恢复此状态的正确方法?
我已经考虑过倒带执行并从 IT 指令继续,但除了重量很大之外,我不确定这是否总是可能的。
编辑:对 ARMv7-A 感兴趣
android - Why both arm and thumb compiling in Eclipse ADT?
I am using the ndk along with Eclipse ADT to build apps for Android and it works fine. However I am wondering why the building process involves compiling both for arm and for thumb, ie every time I do a modification in a source file it re-compiles both for arm and thumb. Is it necessary ? If not how can I tell the builder to only compile and link with armabi-V7a ? That would divide by 2 my build process time...
gcc - GCC ARM Cortex-M3/M4:由于向量表中的值错误,SVC 指令将 CPU 从 Thumb 置于 ARM 状态
我正在将实时内核TNeoKernel移植到 Cortex-Mx 处理器,它在使用 ARMCC 编译时工作,但在使用 GCC 编译时不起作用:在调用SVC
指令之后,PC
更新为SVC_Handler
,并在下一个(任何)指令,UsageFault 异常发生。
检查CFSR
显示该INVSTATE
位已设置:即处理器处于 ARM 状态,这在 Cortex-M CPU 上是非法的。我检查过xPSR
:是的,T
位已清除。
然后我检查了向量表:是的,在偏移处0x2c
我有我的地址SVC_Handler
,但是 LSB 被清除了:0x8013c40
。因此,CPU 进入 ARM 状态也就不足为奇了。令人惊讶的是为什么我清除了 LSB?
我重新检查了SVC_Handler
用ARMCC编译时的地址,是的,在那里设置了LSB:实际地址SVC_Handler
是0x0800297a
,但是向量表包含0x0800297b
。
因此,GCC 生成了错误的向量表。
目前我使用 CooCox IDE 和arm-none-eabi-gcc
4.8.4 版本;提供给 GCC 的选项是:
-mthumb -mcpu=cortex-m4
让 GCC 知道 CPU 不支持 ARM 状态似乎已经足够了,那么,这是 GCC 中的错误吗?或者,我应该给它更多的键,让它生成正确的向量表吗?
UPD:这是 bitbucket 上的源文件tn_arch_cortex_m.S。我在.thumb
那里有指示;请注意,此文件旨在与 GCC 和 ARMCC 一起使用,因此有一些宏可以同时处理这两种工具。
macos - 如何使用 MacOS 的汇编器汇编到 THUMB
我需要将一个小程序集文件 (.S) 编译为 THUMB,但 MacOS 的as
工具会生成 ARM 机器代码:
如您所见,它生成 ARM 机器代码。如何让它生成 THUMB?
arm - 禁用 ARM 16 位拇指指令
ARM 世界有没有办法只使用 32 位指令(例如在 Cortex M3 上)并禁用 16 位拇指指令?我说的是指令本身,而不是加载/存储访问机制。
对不起,如果这个问题已经被问过了,或者这个问题太愚蠢了,等等。
非常感谢您的帮助...