标签: arm

ARM ABI和EABI的目的是什么?

我越看这篇PDF,我就越不明白这意味着什么.另外,我想对其他人12发表一些评论.

arm abi eabi

33
推荐指数
2
解决办法
4万
查看次数

Android是否阉割了ARM的Jazelle技术?

我所看到的理由是,我们说Android中的"Bastardizing"Java字节码就是性能.(我怀疑还有另一个原因.)然而,通过更改字节码,他们没有像Jazelle那样制造硬件加速技术,从而降低了移动Java平台的可用性能?

我知道目标平台是基于ARM的移动平台,这似乎与我相反.虽然它可能会让你在其他CPU架构上获得更好的性能,但它似乎在ARM和Jazelle的面前唾弃.

它对Java性能有什么样的定量影响?

它实际上是否提高了性能,如果是这样的话?

对其他平台有什么影响?(即x86,mips,yadda,yadda,yadda ...)

java architecture android arm jazelle

32
推荐指数
2
解决办法
8410
查看次数

C++异常开销

为什么嵌入式平台开发人员不断尝试C++ exceptions从他们的用户中删除使用SDKs

例如,Bada SDK为异常使用建议以下解决方法,它看起来格外难看:

 result
 MyApp::InitTimer()
 {
    result r = E_SUCCESS;

    _pTimer = new Timer;

    r = _pTimer->Construct(*this);
    if (IsFailed(r))
    {
        goto CATCH;
    }

    _pTimer->Start(1000);
    if (IsFailed(r))
    {
        goto CATCH;
    }

    return r;
 CATCH:
     return r;
 }
Run Code Online (Sandbox Code Playgroud)

这种行为的原因是什么?

据我所知,ARM编译器完全支持C++ exceptions,实际上这不是问题.还有什么?是例外的使用和unwindings上的开销ARM平台真的有那么花很多时间做这样的解决方法?

也许其他我不知道的东西?

谢谢.

c++ embedded arm exception overhead

32
推荐指数
5
解决办法
7633
查看次数

想要编译本机Android二进制文件我可以在手机终端上运行

我已经尝试了几天来编译一个本机ARM Android二进制文件,它将使用终端应用程序在我的手机上执行.我想生成与手机上安装的标准Posix二进制文件相同类型的二进制文件,如ls,mkdir等.我已经在Mac OS X下载了Android NDK,并且能够无错误地编译简单的ELF二进制文件.但是,当我将它们转移到手机时,它们总是会出现段错误.也就是说,在GCC中使用-static编译时会出现段错误.如果我不使用-static,他们会抱怨没有链接等等.简单来说,它们不起作用.

我的假设是它们没有正确链接到Android标准C库.即使我将我的二进制文件与NDK提供的libc链接,它们仍然无法正常工作.我读到Android使用Bionic C库,并尝试下载它的源代码,但我不知道如何从它构建一个库(它似乎是所有ARM程序集).

手机上的Android C库是否与Android NDK提供的库不同?包含在NDK中的那个不允许我编译我可以通过终端执行的本机二进制文件吗?非常感谢任何指导!

更新:

我终于在Mac OS X上使用GCC 4.7.0了解它.我下载了Bionic标头,然后使用Android NDK附带的C库编译了一个动态链接的二进制文件.我能够使用手机的C lib(二进制为33K)获得一个测试应用程序在手机上工作.我还尝试静态链接NDK的C库,这也很有用.

为了使这一切正常工作,我必须将-nostdlib传递给GCC,然后手动将crtbegin_dynamic.o和crtend_android.o添加到GCC的命令行.它的工作原理如下:

$CC \
$NDK_PATH/usr/lib/crtbegin_dynamic.o \
hello.c -o hello \
$CFLAGS \
$NDK_PATH/usr/lib/crtend_android.o
Run Code Online (Sandbox Code Playgroud)

对于静态二进制文件,请使用"crtbegin_static.o".这在crtbegin_dynamic.S/crtbegin_static.S源中进行了解释.

对于这个实验,我只使用普通的'ol GCC 4.7.0和Binutils 2.22.我还使用newlib编译了GCC,但我实际上并没有将我的ARM二进制文件与newlib链接起来.我强迫GCC/ld直接链接到随Android NDK提供的libc,或者在动态二进制文件的情况下,链接到手机上的libc.

c android gcc arm android-ndk

32
推荐指数
2
解决办法
3万
查看次数

使用newlib为ARM交叉编译GCC:如何指定像-march这样的GCC选项?

我在Mac OS X上为ARM目标编译了GCC和newlib.但是,libc.a是用-fshort-enums编译的,我不希望这样,因为当我为ARM编译东西时,我使用-fno-short-enums.这当然是冲突:

ld: warning: /var/folders/9m/2wnjp9zd71x13cpdpf16y_4r0000gn/T//ccQuEnp6.o uses 32-bit enums yet the output is to use variable-size enums; use of enum values across objects may fail
Run Code Online (Sandbox Code Playgroud)

每当我尝试运行"你好,世界!" 可执行文件,它是段错误的.这可能是原因吗?

这是我用来编译hello.c的命令:

arm-eabi-gcc \
hello.c -o hello \
/Users/user/gcc-arm-install/arm-eabi/lib/crt0.o \
/Users/user/gcc-arm-install/lib/gcc/arm-eabi/4.7.0/crtbegin.o \
/Users/user/gcc-arm-install/lib/gcc/arm-eabi/4.7.0/crti.o \
/Users/user/gcc-arm-install/lib/gcc/arm-eabi/4.7.0/crtn.o \
/Users/user/gcc-arm-install/lib/gcc/arm-eabi/4.7.0/crtend.o \
-v -nostdinc -nostdlib -static \
-march=armv7-a -mno-thumb-interwork -marm -mfpu=neon -mfloat-abi=softfp -fpic \
-ffunction-sections -fno-short-enums -fno-rtti -fno-exceptions \
-I/Users/user/gcc-arm-install/lib/gcc/arm-eabi/4.7.0/include \
-I/Users/user/gcc-arm-install/lib/gcc/arm-eabi/4.7.0/include-fixed \
-I/Users/user/gcc-arm-install/arm-eabi/include \
-I/Users/user/gcc-arm-install/arm-eabi/sys-include \
-L/Users/user/gcc-arm-install/arm-eabi/lib \
-L/Users/user/gcc-arm-install/lib/gcc/arm-eabi/4.7.0 \
-lm -lc -lgcc
Run Code Online (Sandbox Code Playgroud)

更新:

好吧,我想我已经将问题缩小到newlib的libc和启动文件(crt0.o)的组合.我尝试使用libc.a和来自Android NDK的启动文件使用GCC 4.7.0编译测试应用程序,并且在编译静态时在手机上工作.事实上,即使ld再次抱怨使用"可变大小的枚举"(即,不使用-fno-short-enums编译其他所有内容),它仍然有效.所以,我关于-fno-short-enums是我之前崩溃的二进制文件的罪魁祸首的假设是不正确的. …

c macos android gcc arm

31
推荐指数
1
解决办法
8500
查看次数

ARM桌面程序可以使用visual studio 2012构建吗?

我正在使用visual studio 2012 beta和我的桌面(win32)程序在ARM架构中编译得很好.

升级到visual studio 2012 RC后,编译器无法正常工作并发出以下错误:

"不支持为ARM平台编译桌面应用程序"

我在这个http://connect.microsoft.com/VisualStudio/feedback/details/745580/arm-configuration-doesnt-work上发现了一个论坛帖子

微软是否真的切断了ARM上的win32开发是否正确?在VS2012测试版中编译只是一个侥幸?

arm visual-studio-2012

31
推荐指数
2
解决办法
3万
查看次数

如何在ARM Cortex-A8处理器中测量程序执行时间?

我正在使用一个名为i.MX515的基于ARM Cortex-A8的处理器.有Linux Ubuntu 9.10发行版.我正在运行一个用C编写的非常大的应用程序,我正在利用gettimeofday();函数来衡量我的应用程序所需的时间.

main()

{

gettimeofday(start);
....
....
....
gettimeofday(end);

}
Run Code Online (Sandbox Code Playgroud)

这个方法足以让我看看我的应用程序块占用了多少时间.但是,现在,我正在尝试使用gettimeofday()计算时间的方法彻底优化我的代码,我看到连续运行之间有很多波动(在我的优化之前和之后运行),所以我不能确定实际执行时间,从而影响我的改进.

谁能告诉我应该怎么做?

如果通过访问循环计数器(在ARM网站上为Cortex-M3建议的想法),任何人都可以向我指出一些代码,它给出了我在Cortex-A8上访问定时器寄存器时必须遵循的步骤吗?

如果这种方法不是很准确,那么请提出一些替代方案.

谢谢


跟进

跟进1:在Code Sorcery上编写了以下程序,生成了可执行文件,当我尝试在主板上运行时,我得到了 - 非法指令消息:(

static inline unsigned int get_cyclecount (void)
{
    unsigned int value;
    // Read CCNT Register
    asm volatile ("MRC p15, 0, %0, c9, c13, 0\t\n": "=r"(value));
    return value;
}

static inline void init_perfcounters (int32_t do_reset, int32_t enable_divider)
{
    // in general enable all counters (including cycle counter)
    int32_t value = 1;

    // …
Run Code Online (Sandbox Code Playgroud)

c arm performancecounter time-measurement cortex-a8

30
推荐指数
1
解决办法
4万
查看次数

从C程序员的角度来看,ARM架构之间的差异是什么?

我对ARM编程很新.我注意到有几种架构,如ARMv4,ARMv5,ARMv6等.这些架构有什么区别?他们有不同的指令集或行为吗?

最重要的是,如果我为ARMv6编译一些C代码,它会在ARMv5上运行吗?在ARMv6上运行的ARMv5代码怎么样?或者,如果我编写内核汇编代码,我只需要担心区别吗?

c architecture arm isa

30
推荐指数
2
解决办法
1万
查看次数

寄存器的"银行"是什么意思?

在维基百科上阅读"ARM架构"并发现以下声明:

寄存器R0-R7在所有CPU模式下都是相同的; 他们永远不会存钱.

除系统模式外,R13和R14在所有特权CPU模式下进行存储.

寄存器是什么意思?

cpu arm

30
推荐指数
2
解决办法
2万
查看次数

交叉编译时如何使用外部库?

我在x86 ubuntu机器上为raspberry pi ARM目标编写了一些代码.我正在使用gcc-linaro-armhf工具链.我能够在pi上交叉编译并运行一些独立的程序.现在,我想将我的代码链接到外部库,如ncurses.我怎样才能做到这一点.

我应该将我的程序与主机上现有的ncurses lib链接,然后在ARM上运行吗?(我认为这不会起作用)我是否需要为arm获取lib的源代码或预构建版本,将其放入我的lib路径然后编译?

在这种情况下,最佳做法是什么?

我也想知道它如何用于c stdlib.在我的程序中,我使用了stdio函数,它在交叉编译后工作,没有做任何特殊的事情.我刚刚在makefile中为我的arm gcc提供了路径.所以,我想知道,它是如何得到正确的标准头文件和库?

c linux gcc arm cross-compiling

30
推荐指数
2
解决办法
4万
查看次数