Eclipse Photon中GNU ARM工具链的汇编文件(.S)抛出错误

rxztt3cl  于 2023-05-06  发布在  Eclipse
关注(0)|答案(1)|浏览(276)

我将一个汇编文件从ARMCC语法移植到GNU语法,但是它在编译期间抛出了一个错误。
环境:Eclipse 4.8(Photon)中用于ARM7的GNU ARM工具链。
要求:在Eclipse中从Keil ARMCC移植到GNU ARM工具链。
它正确地编译和构建。当我添加一个程序集文件iap_blue.S(附件)时,我遇到了编译错误(粘贴在下面)。

//iap_blue.S
            .section .text,"x"
            .balign 4

.globl blue_execute
blue_execute:
        STMFD   SP!,{LR}               // Save Return Address
                ADD     R1,R0,#0x14            // R0 = &IAP.cmd, R1 = &IAP.stat
                ADR     LR,blue_exit           // Return Address
                LDR     R2,=0x7FFFFFF1         // IAP Entry (Thumb Mode)
                BX      R2                     // Execute IAP Command

blue_exit:
                LDMFD   SP!,{LR}               // Restore Return Address
                BX        LR                     // Return
                .end
12:18:38 **** Build of configuration Debug for project LEDblink ****
make all
Building file: ../LPC2468_startup.c
Invoking: GNU ARM Cross C Compiler
arm-none-eabi-gcc -mcpu=arm7tdmi-s -march=armv4t -marm -mthumb-interwork -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -g3 -include"E:\EclipseARM\workspace\LEDblink\iap_blue.S" -std=gnu11 -MMD -MP -MF"LPC2468_startup.d" -MT"LPC2468_startup.o" -c -o "LPC2468_startup.o" "../LPC2468_startup.c"
In file included from <command-line>:
E:\EclipseARM\workspace\LEDblink\iap_blue.S:1:13: error: expected identifier or '(' before '.' token
1 | .section .text,"x"
| ^
E:\EclipseARM\workspace\LEDblink\iap_blue.S:7:17: error: unknown type name 'ADD'
7 | ADD R1,R0,#0x14 // R0 = &IAP.cmd, R1 = &IAP.stat
| ^~~
E:\EclipseARM\workspace\LEDblink\iap_blue.S:7:31: error: stray '#' in program
7 | ADD R1,R0,#0x14 // R0 = &IAP.cmd, R1 = &IAP.stat
| ^
E:\EclipseARM\workspace\LEDblink\iap_blue.S:7:32: error: expected identifier or '(' before numeric constant
7 | ADD R1,R0,#0x14 // R0 = &IAP.cmd, R1 = &IAP.stat
| ^~~~
E:\EclipseARM\workspace\LEDblink\iap_blue.S:14:17: error: unknown type name 'BX'
14 | BX LR // Return
| ^~
E:\EclipseARM\workspace\LEDblink\iap_blue.S:15:5: error: expected '=', ',', ';', 'asm' or '__attribute__' before '.' token
15 | .end
| ^
In file included from c:\program files (x86)\gnu tools arm embedded\9 2019-q4-major\arm-none-eabi\include\stdint.h:14,
from c:\program files (x86)\gnu tools arm embedded\9 2019-q4-major\lib\gcc\arm-none-eabi\9.2.1\include\stdint.h:9,
from ../LPC2468_startup.c:1:
c:\program files (x86)\gnu tools arm embedded\9 2019-q4-major\arm-none-eabi\include\sys\_stdint.h:20:9: error: unknown type name '__int8_t'
20 | typedef __int8_t int8_t ;
| ^~~~~~~~
subdir.mk:31: recipe for target 'LPC2468_startup.o' failed
make: *** [LPC2468_startup.o] Error 1
ewm0tg9j

ewm0tg9j1#

问题解决了。
我想详细说明我所犯的错误是什么以及如何解决它。这可能对其他人有帮助。
错误一:
我使用.s而不是.S作为程序集文件。
错误二:
eclipse编译器中包含的.S文件将文件包含为项目设置的一部分。
解决方案:
我检查了 C/C++ General → File types,其中将.S列为汇编文件。我把.s改为.S,错误1得到纠正。
尽管我在这里发布了我面临的编译错误,但我不确定是否有一些与Eclipse相关的问题或我的汇编文件的问题,因为我将它从ARMCC语法移植到GNU语法。
我创建了自己的make文件并使用命令行构建代码。它成功构建,没有任何错误。这意味着Eclipse项目配置有一些问题。
然后,我意识到,如果你已经在项目中包含了汇编文件,你就不必在编译器设置中包含它。仅这一点就可以正确识别和组装文件。这就解决了错误2。

相关问题