Questions tagged «arm»

该标签用于与ARM(高级RISC机器)计算机家族有关的问题。即在ARM处理器内核或使用ARM内核的系统上运行的机器或电子设备。

1
如何影响Android / ARM目标的Delphi XEx代码生成?
更新2017-05-17。我不再为产生此问题的公司工作,也无法访问Delphi XEx。在我在那里的时候,通过迁移到混合FPC + GCC(Pascal + C)来解决问题,对于某些例程,NEON内在函数有所作为。(强烈建议使用FPC + GCC,因为它可以使用标准工具,尤其是Valgrind。)如果有人可以通过可靠的示例演示他们实际上如何从Delphi XEx生成优化的ARM代码,我很乐意接受答案。 Embarcadero的Delphi编译器使用LLVM后端为Android设备生成本机ARM代码。我有大量Pascal代码,需要将这些代码编译到Android应用程序中,并且我想知道如何使Delphi生成更有效的代码。现在,我什至没有在谈论诸如自动SIMD优化之类的高级功能,而只是在生成合理的代码。当然必须有一种方法可以将参数传递给LLVM端,否则会影响结果?通常,任何编译器都会有很多选择来影响代码的编译和优化,但是Delphi的ARM目标似乎仅仅是“优化开/关”,仅此而已。 LLVM应该能够生成合理的紧致和明智的代码,但是Delphi似乎在以奇怪的方式使用其功能。Delphi希望非常大量地使用堆栈,并且通常只将处理器的寄存器r0-r3用作临时变量。也许最疯狂的是,它似乎正在将正常的32位整数作为四个1字节的加载操作进行加载。如何使Delphi产生更好的ARM代码,而又没有它为Android带来的逐字节麻烦呢? 起初,我认为逐字节加载是为了交换big-endian的字节顺序,但事实并非如此,它实际上只是加载具有4个单字节加载的32位数字。*可能是加载完整的32位,而不会产生未对齐的字大小的存储器负载。(是否应该避免那是另一回事,这暗示整个事情都是编译器错误)* 让我们看一下这个简单的函数: function ReadInteger(APInteger : PInteger) : Integer; begin Result := APInteger^; end; 即使启用了优化,带有更新包1的Delphi XE7以及XE6也会为该功能生成以下ARM汇编代码: Disassembly of section .text._ZN16Uarmcodetestform11ReadIntegerEPi: 00000000 <_ZN16Uarmcodetestform11ReadIntegerEPi>: 0: b580 push {r7, lr} 2: 466f mov r7, sp 4: b083 sub sp, #12 6: 9002 str …

5
ARM体系结构与x86有何不同?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使它成为Stack Overflow 的主题。 4年前关闭。 改善这个问题 x86体系结构是否专门设计为与键盘一起使用,而ARM希望可以移动?两者之间的主要区别是什么?
189 x86  arm 

1
为什么ARM芯片在名称(FJCVTZS)中使用带有Javascript的指令?
FJCVTZS是“将浮点Javascript转换为带符号的定点,四舍五入为零”。Arm v8.3-A芯片和更高版本支持该功能。这很奇怪,因为您不希望看到JavaScript如此接近裸机。 我可以找到有关指令作用的说明,但找不到其存在的原因。 该线程说:“它作为一条指令存在是因为JS缺少整数类型,这意味着某些用例在没有很好的算法原因的情况下,经常会令人讨厌地需要此操作。” 这是合理的,但我想更详细地了解。
148 javascript  assembly  arm 

3
为什么要在armeabi代码上使用armeabi-v7a代码?
在我当前的项目中,我使用了多个.so文件。它们位于armeabi和armeabi-v7a文件夹中。不幸的是.so文件之一是6MB,我需要减小文件大小。我不想使用胖的APK文件,而是只使用armeabi文件并删除armeabi-v7a文件夹。 根据NDK文档,armeabi-v7a代码是扩展的armeabi代码,其中可以包含额外的CPU指令。所有这些都超出了我的专业知识,但是我质疑为什么要同时拥有armeabi-v7a和armeabi代码。一定要有一个很好的理由,对吗? 在我的测试设备上,这一切似乎都可以正常工作。这些具有ARM v7 CPU。可以安全地假设现在一切正常吗?

15
快速查找C数组中是否存在值?
我有一个具有时间关键ISR的嵌入式应用程序,该应用程序需要循环访问大小为256(最好是1024,但最小为256)的数组,并检查值是否与数组内容匹配。在bool这种情况下,将A 设置为true。 该微控制器是NXP LPC4357,ARM Cortex M4内核,而编译器是GCC。我已经组合了优化级别2(速度慢3),并将函数放在RAM中而不是闪存中。我还使用了指针算术和一个for循环,该循环进行递减计数而不是递增计数(检查if i!=0的速度比检查if的速度快i<256)。总而言之,我最终需要花费12.5 µs的持续时间,因此必须将其大幅缩短以确保可行。这是我现在使用的(伪)代码: uint32_t i; uint32_t *array_ptr = &theArray[0]; uint32_t compareVal = 0x1234ABCD; bool validFlag = false; for (i=256; i!=0; i--) { if (compareVal == *array_ptr++) { validFlag = true; break; } } 绝对最快的方法是什么?允许使用内联汇编。也可以使用其他“不太优雅”的技巧。


8
如何在我的Linux主机上安装Raspberry Pi交叉编译器?
我正在尝试为在我的Ubuntu计算机上工作的Raspberry Pi进行交叉编译。 在最初的尝试中,我使用的是arm-linux-gnueabi编译器,该编译器可在Ubuntu存储库中找到。我得到了这个工作。我能够建立所有依赖关系,并在cmake项目中使用交叉编译器。 但是,我相信我应该使用hf版本,因此我切换到了arm-linux-gnueabihf。然后我意识到这对Raspberry Pi不起作用,因为它是armv6。 谷歌搜索后,我从GitHub找到了预构建的工具链。 我下载了工具链,但是我不太了解如何“安装”它。我将文件提取到我的主目录。目录结构如下所示: /gcc-linearo-arm-linux-gnueabihf-raspbian /arm-linux-gnueabihf /bin (contains g++, gcc, etc) /lib (contains libstdc++ library) /bin (contains arm-linux-gnueabihf-g++, arm-linux-gnueabihf-...) /lib (gcc lib stuff) 如果将目录更改为INNER bin文件夹,则可以从终端编译测试程序而不会出现任何问题。 ~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/ arm-linux-gnueabihf/bin$ g++ test.cpp -o test 然后,我尝试在OUTER bin文件夹中编译一个测试程序,其中包含工具的前缀版本。 ~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin$ arm-linux-gnueabihf-g++ test.cpp -o test 但是,当我尝试现在(从内部bin目录外部)使用编译器时,它找不到工具链随附的libstdc ++共享库: arm-linux-gnueabihf-gcc: error while loading shared libraries: libstdc++.so.6: …



2
arm64和aarch64之间的区别
我有两个“解锁”设备,一个iPad mini 3和一个Galaxy Edge 6,都配备了一个终端和一组简约的unix命令。我以为两个设备都具有arm64处理器,但是当我运行时 uname -a 在这两种设备上,我得到以下信息: 对于iPad mini 3: xxxxs-iPad:/var/mobile root# uname -a Darwin xxxx-iPad 14.0.0 Darwin Kernel Version 14.0.0: Wed Jun 24 00:50:15 PDT 2015; root:xnu-2784.30.7-30/RELEASE_ARM64_S5L8960X iPad4, **arm64**, J85mAP 适用于Samsung Galaxy s6 Edge: u0_a203@zerolte:/ $ uname -a Linux localhost 3.10.61-4497415 #1 SMP PREEMPT Thu Apr 9 15:06:40 …
86 android  ios  gcc  arm  arm64 

1
什么会导致P / Invoke参数传递时混乱?
这是专门在ARM而不是x86或x64上发生的问题。我有一个用户报告此问题,并能够通过Windows IoT在Raspberry Pi 2上使用UWP再现它。我以前用不匹配的调用约定已经看到过这种问题,但是我在P / Invoke声明中指定了Cdecl,我尝试在本机端显式添加__cdecl并获得相同的结果。这里是一些信息: P /调用声明(参考): [DllImport(Constants.DllName, CallingConvention = CallingConvention.Cdecl)] public static extern FLSliceResult FLEncoder_Finish(FLEncoder* encoder, FLError* outError); C#结构(参考): internal unsafe partial struct FLSliceResult { public void* buf; private UIntPtr _size; public ulong size { get { return _size.ToUInt64(); } set { _size = (UIntPtr)value; } } } …
79 c#  windows  uwp  arm  pinvoke 

8
Raspberry Pi上的Mono
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 去年关闭。 改善这个问题 我已经看到很多关于在Raspberry Pi上运行Mono / .NET代码的讨论。在Raspberry Pi上实际运行任何Mono代码是否成功? 他们在其站点上列出了可在该设备上运行的几个Linux发行版,其中一些发行版包括Mono。但是,没有一个细节说明Mono是否适用于此。 有可行的实施方案吗?
78 .net  linux  mono  arm  raspberry-pi 

2
什么是ARM中的SP(堆栈)和LR?
我一遍又一遍地阅读定义,但仍然没有得到ARM中的SP和LR?我了解PC(它显示下一条指令的地址),SP和LR可能相似,但我不了解它是什么。请你帮助我好吗? 编辑:如果您可以通过示例进行说明,那就太好了。 编辑:终于弄清楚了LR是什么,仍然没有得到SP是什么。
76 assembly  stack  arm 



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.