我正在尝试使用GCC为Cortex-M3处理器构建外部函数接口库。根据http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html:
-mthumb
为Thumb指令集生成代码。默认使用32位ARM指令集。此选项根据-mcpu=name和-march=name选项自动启用16位Thumb-1或混合16/32位Thumb-2指令。此选项不传递给汇编程序。如果你想强制汇编器文件被解释为Thumb代码,要么在源代码中添加一个.thumb'指令,要么直接将-mthumb选项传递给汇编器,方法是在它前面加上-Wa。 我试过传递各种各样的参数给汇编器,似乎不能弄清楚。典型输出如下: 建筑文件:../source/ffi/sysv.S 调用:GCC汇编程序 arm-bare_newlib_cortex_m3_nommu-eabi-gcc -Wa,-mthumb-interwork -I”/home/neil/m3projects/robovero/firmware/include”-o“source/ffi/sysv.o”“../source/ffi/sysv.S” ../source/ffi/sysv.S:汇编程序消息: ../source/ffi/sysv.S:145:错误:所选处理器不支持ARM操作码 ../source/ffi/sysv.S:147:错误:尝试在仅限Thumb-only的处理器上使用ARM指令--
stmfd sp!,{r0-r3,fp,lr}’
...
我可以在Cortex-M3上使用libffi而不成为组装Maven吗?
值得注意的是,当我直接调用arm-bare_newlib_cortex_m3_nommu-eabi-as时,我会得到不同的错误。
4条答案
按热度按时间cidc1ykv1#
我修改sysV.S如下,错误是由“.arm”指令引起的,当使用cortex-m3时,应该注解掉。
字符串
ijxebb2r2#
我不想这么说,但这是一个移植的努力。可行,不一定要成为汇编Maven,但需要学习一些。从拇指到手臂很容易,thumb2,我得查一下,thumb2的大部分只是拇指的指令。而thumb具有到arm指令的一对一Map,但不是相反。Thumb大多限制您在所有主力指令上使用较低的8个寄存器,有特殊版本或特殊指令使用较高的寄存器。所以你的许多手臂指令会变成不止一个拇指指令。
首先看看是否有一个构建选项可以在不使用汇编程序的情况下构建这个包,或者进入该目录,看看是否可以在makefile中使用C程序而不是汇编程序。我假设使用C有一个严重的性能问题,这就是为什么要从汇编程序开始。理论上Thumb2比arm更有效,但这并不一定意味着从arm到thumb2的直接端口。因此,有了一些经验,您可能可以将端口交给thumb2并保持一些性能。
编辑:
下载了相关文件。前面的define意味着它同时知道thumb和armv7m。这就是你把stm改成push的方法吗?
bybem2ql3#
汇编程序告诉你的是事实-- ARM汇编代码不能在像M3这样的只有Thumb-2的处理器上成功地汇编。汇编程序无法将ARM指令助记符Map到对Cortex-M3有意义的操作码。您需要将程序集文件移植到Thumb-2程序集代码才能使其正常工作。根据原始汇编代码的功能,您可能会幸运地移植到C,但这可能会使您的性能受到重大影响。
2uluyalo4#
在gcc CFLAGS中添加“-Wa,-mimplicit-it=thumb”,以避免“thumb条件指令应在IT块中”错误
字符串