草庐IT

Android NDK - 它支持直接的 ARM 代码还是只支持 Thumb

我被要求评估我们产品的Android平台,我正在考虑各种选择,我现在只是触及表面,困扰我的一件事是我看不到如何编译代码纯ARM代码(没有Thumb),我知道Thumb运行速度较慢,我们需要代码关键部分的性能。我认为它应该只是在Android.mk的LOCAL_CFLAGS中设置-march标志文件,但我无法让它工作...有人能帮忙吗? 最佳答案 在Android.mk中为模块指定以下标志将直接编译ARM代码。LOCAL_ARM_MODE:=arm启用优化也可能有帮助:LOCAL_CFLAGS:=-O3

android - 为什么 gcc emmiting 代码与 ARM 指令集的 2 字节边界对齐?

我正在检查使用GCC(AndroidNDK中包含的版本)为ARMAndroid平台编译的C程序的汇编语言输出。我正在指定长度为4字节的ARM指令集而不是THUMB,但令人惊讶的是,emmited汇编语言代码将函数对齐到2字节边界!这是显示错误的.align指令的生成代码示例:.Ltext0:.global__aeabi_dmul.global__aeabi_d2iz.section.text.InitializeFIRFilter,"ax",%progbits.align2.globalInitializeFIRFilter.typeInitializeFIRFilter,%funct

嵌入式:ARM汇编语言程序设计基础教程

文章目录汇编语言程序设计的步骤顺序程序设计分支程序设计循环程序设计子程序设计寄存器传递参数方式存储区域传递参数方式堆栈传递参数方式汇编语言程序设计的步骤①合理地分配存储器资源,将前述的目标系统‘数据结构模型’表示到各存储器单元。②CPU寄存器数量有限,在程序中,大多数操作都要使用寄存器;并且有的操作使用特定的寄存器(如堆栈操作使用SP/R13等),程序中要合理分配各寄存器的用途。用计算机语言,对数据结构模型和流程图表示的算法进行准确地描述。①语法调试:排除程序中的语法错误。②功能调试:保证程序的逻辑功能正确性。用文档形式记录说明程序的功能、使用方法、程序结构、算法流程等每一个阶段的工作。把解题

android - arm-linux-androideabi-gcc 无法创建可执行文件 - 为 android armeabi 设备编译 ffmpeg

我正在尝试为androidarmeabi设备编译ffmpeg。我正在关注roman10.net的教程他给定的构建脚本为armv7-a设备构建ffmpeg。我想为armeabi构建它。我的最终目标是在androidarmeabi和armv7-a设备上运行ffmpeg命令。所以我将脚本的CPU部分从#armv7vfpv3CPU=armv7-aOPTIMIZE_CFLAGS="-mfloat-abi=softfp-mfpu=vfpv3-d16-marm-march=$CPU"PREFIX=./android/$CPUADDITIONAL_CONFIGURE_FLAG=build_one到#a

android - gcc 在 arm/android 上

我刚拿到一个EEE焊盘变压器。就像我拥有的​​任何硬件一样,我想在上面安装一个C编译器。我知道我可以交叉编译,但我想在设备本身上进行开发。我在谷歌上搜索过,我似乎只能找到有关如何为x86/64Linux构建arm工具链的页面。想法? 最佳答案 构建gcc(等)以在您的目标上运行的过程应该类似于构建交叉编译器,除了您将:需要有一个ARM交叉编译器,可以在您的x86机器上运行。所以你的谷歌搜索结果仍然有用。在为工具链的所有部分运行configure时,使用--host选项指定您的ARM平台。

android - 带有 Open_Gapps arm 7.0.0 的 Genymotion Google Nexus 6P 7.0.0

使用Genymotion2.8.0,我安装了API级别为24的GoogleNexus6P7.0.0设备。启动设备后,我刷入了ARM虚拟翻译器并重新启动设备。然后,我从http://opengapps.org/?download=true&arch=arm64&api=7.0&variant=pico下载了open_gapps用于Playstore和其他应用程序安装。通过将open_gappszip文件拖放到设备中,它会被复制到SD卡下载文件夹中,而不是安装谷歌应用程序。请任何人告诉我哪里出了问题。提前致谢。 最佳答案 更新的答案从G

c++ - arm cortex a9 交叉编译奇怪的浮点行为

我正在尝试将一个更大的应用程序从x86移植到armcortexa9,但是当交叉编译应用程序时,我遇到了像modf这样的浮点函数的奇怪段错误,其他libc++函数似乎只是错误地处理float,但是不要不会崩溃(见下文)。所以我尝试了这个小测试程序,它也可以触发错误。测试程序的输出(见下文)应该可以证明我的问题。#includeintmain(intargc,char*argv[]){doublex=80;doubley=0;std::cout在armcortexa9上编译:@tegra$g++-Walltest.cpp-otest_nativ@tegra$./test_nativ800交

c++ - 如何检查 arm-none-linux-gnueabi-g++ 对 C++11 的支持

我正在编写一个可移植应用程序,它使用C++11功能,如std::atomic、std::threads等。如何验证我的ARMGCC交叉编译器工具链是否支持C++11标准?我尝试使用arm-none-linux-gnueabi-g++-v和arm-none-linux-gnueabi-g++--version但在使用-std=c++11时返回错误编辑#arm-linux-gnueabi-g++-std=c++11dum.cppcc1plus:错误:无法识别的命令行选项'-std=c++11'目标:arm-linux-gnueabi海湾合作委员会版本4.6.2

c++ - GCC (ARM) 相当于 __declspec(dllexport)

为x86构建应用程序时,以下代码可以正常工作:#ifdefined_WIN32#defineLIB_PRE__declspec(dllexport)#elifdefined__unix__#defineLIB_PRE#else#defineLIB_PRE__declspec(dllexport)#endif但是对于GCC(ARM)给出了一个错误。我发现__declspec(dllexport)不会在GCC上工作。如果是这样,我应该为GCC(ARM)使用什么?编辑:它在许多类(class)中都有使用。例如:classCJsonValueString:publicCJsonValue{pr

c++ - 为什么 ARM 使用两条指令来屏蔽一个值?

对于下面的函数...uint16_tswap(constuint16_tvalue){returnvalue>8;}...为什么带有-O2的ARMgcc6.3.0会产生以下程序集?swap(unsignedshort):lsrr3,r0,#8orrr0,r3,r0,lsl#8lslr0,r0,#16#shiftleftlsrr0,r0,#16#shiftrightbxlr编译器似乎使用两次移位来屏蔽不需要的字节,而不是使用逻辑与。编译器能否改为使用andr0,r0,#4294901760? 最佳答案 较旧的ARM程序集无法轻松创建常