使用环境
- 操作系统版本:win10
- 操作系统平台(x86/x64):x64
- VsCode 版本:1.78.2
- EIDE 插件版本:3.13.0
- C/C++ 插件版本:1.15.4
- 何种编译器(keil_c51/sdcc/armcc5/armgcc/...):armcc6
- 编译器版本(非编译问题可忽略):13.0.0还是v6.16(该项不确定)
描述问题
在开发中使用了如下内联汇编代码。
注:其中global_current_stack_top变量已在调用该内联汇编的函数前进行了extern声明。
__asm volatile(
//"EXTERN global_current_stack_top;"
"CPSID I;"
"ldr r0, = global_current_stack_top;"
"ldr r1, [r0];"
"ldr r2, [r1];"
"ldmia r2!, {r4-r11};"
"msr psp, r2;"
"mov r14, #0XFFFFFFFD;"
"CPSIE I;"
);
均采用armcc6编译器,在eide中编译无问题,会报链接错,log如下,需要取消注释EXTERN global_current_stack_top,才能消除;
[ INFO ] start linking ...
Error: L6137E: Symbol global_current_stack_top was not preserved by the LTO codegen but is needed by the image.
Not enough information to list image symbols.
Not enough information to list the image map.
Finished: 2 information, 0 warning and 1 error messages.
ERROR link failed !, exit code: 1
ERROR build failed !, elapsed time 0:0:1
在keil中,则是注释该行可以正常编译,如果保留EXTERN 会报错如下log。
<inline asm>(1): note: instantiated into assembly here
EXTERN global_current_stack_top;CPSID I;ldr r0, = global_current_stack_top;ldr r1, [r0];ldr r2, [r1];ldmia r2!, {r4-r11};msr psp, r2;mov r14, #0XFFFFFFFD;CPSIE I;
~~
1 error generated.
怀疑是与eide与keil采用了不一样的链接方式引起的问题?
主要使用keil进行调试,还未尝试cortex-debug,不太确定注释与否是否影响程序的运行。希望有能大佬能解释一下问题的原因,感谢
@admin