英语不是我的母语,我为此道歉。
最近,我想了解有关C lib初始化的详细信息。开发/调试环境如下:
硬件:QEMU模拟器The GNU MCU Eclipse QEMU
软件:GNU Arm嵌入式工具链示例
IO:半主机
CrossToolchian: GNU Arm嵌入式工具链(gcc-arm-none-eabi-7-2017-q4-majo)
我了解半主机,Crosstoolchain和QEMU的原理和用法。我没有初始化newlib就编写了Cortex-M3的启动源代码,所以我理解了cpu启动步骤和链接脚本的关键点。另外,我还在QEMU中运行半主机的源代码。我找到了GNU MCU Eclipse这个关于开发Coortex-M系列程序的项目。我可以使用这个项目来实现目标。但我想知道newlib启动的细节。所以,我打算从头开始编写程序。我从GNU Arm Embedded Toolchain的自述文件中获得了一些有用的信息。它使用半主机在QEMU上运行时为Cortex-M3提供newlib。我想我应该使用qemu的样本。以下是设计师关于该示例的描述:
** qemu - 展示如何构建在qemu上运行的Cortex-M裸机程序。 这个案例构建了一个可以在qemu for ARM上运行的简单应用程序。它用 文件IO的半主机,qemu支持。
我编译示例并在qemu上运行它,它打印任何东西。我不知道为什么。有人可以帮我吗?
编译:
make CORTEX_M=3
执行命令
qemu-system-gnuarmeclipse --verbose --verbose --nographic --board STM32-P103 --image hello-CM3.axf --gdb tcp::1234
我发现程序在查看编译细节时没有链接startup_ARMCM3.S。
编译detial:
arm-none-eabi-gcc hello.c -mthumb -mcpu=cortex-m0 -Os -flto -ffunction-sections -fdata-sections -g -v --verbose --specs=nano.specs --specs=rdimon.specs -L../../ldscripts -T libs.ld -T mem.ld -T sections.ld -Wl,-Map=hello.map -g -o hello-CM0.axf