经过测试我发现在单片机启动时,在汇编阶段使用不同的编译器生成的代码是不同的,在生成CODEIDE平台的代码时汇编阶段启动系统时本应跳转到$sub$$main()
这个函数,在这个函数初始化rtthread的内核,但是我生成的代码没有在汇编阶段跳转到$sub$$main()
这个函数而是直接跳转到main()函数中开始执行,导致我无法使用有关`rt`的函数。
//这是CODEmx生成的CODEIDE平台的代码
Reset_Handler:
/* Call the clock system initialization function.*/
bl SystemInit
/* Copy the data segment initializers from flash to SRAM */
ldr r0, =_sdata
ldr r1, =_edata
ldr r2, =_sidata
movs r3, #0
b LoopCopyDataInit
CopyDataInit:
ldr r4, [r2, r3]
str r4, [r0, r3]
adds r3, r3, #4
LoopCopyDataInit:
adds r4, r0, r3
cmp r4, r1
bcc CopyDataInit
/* Zero fill the bss segment. */
ldr r2, =_sbss
ldr r4, =_ebss
movs r3, #0
b LoopFillZerobss
FillZerobss:
str r3, [r2]
adds r2, r2, #4
LoopFillZerobss:
cmp r2, r4
bcc FillZerobss
/* Call static constructors */
bl __libc_init_array
/* Call the application's entry point.*/
bl main
bx lr
.size Reset_Handler, .-Reset_Handler
解决了,感谢大佬