英语不是我的母语,对此我深表歉意。
最近,我想了解有关 C lib 初始化的详细信息。开发/调试环境如下:
硬件: QEMU 模拟器GNU MCU Eclipse QEMU
软件: GNU Arm 嵌入式工具链示例
IO: 半主机
CrossToolchian: GNU Arm 嵌入式工具链(gcc-arm-none-eabi-7-2017-q4-majo)
了解Semihosting、Crosstoolchain、QEMU的原理和用法。我已经写了Cortex-M3的启动源代码,没有初始化newlib,所以我了解cpu启动步骤和链接脚本的关键点。此外,我还编写了在 QEMU 中运行的半主机源代码。我找到了GNU MCU Eclipse,一个关于开发 Coortex-M 系列程序的项目。我可以使用这个项目来实现我的目标。但我想知道用 newlib 启动的细节。所以,我打算从头开始编写程序。我从 GNU Arm Embedded Toolchain 的自述文件中获得了一些有用的信息。当使用 Semihosting 在 QEMU 上运行时,它为 Cortex-M3 提供 newlib。我想我应该使用 qemu 的样本。以下是设计师对示例的描述:
** qemu - 展示如何构建在 qemu 上运行的 Cortex-M 裸机程序。本案例构建了一个可以在 qemu for ARM 上运行的简单应用程序。它使用 qemu 支持的半主机处理文件 IO。
我编译了这个例子并在 qemu 上运行它,它打印任何东西。我不知道为什么。谁能给我帮助?
编译:
make CORTEX_M=3
跑:
qemu-system-gnuarmeclipse --verbose --verbose --nographic --board STM32-P103 --image hello-CM3.axf --gdb tcp::1234
当看到编译的细节时,我发现程序没有链接startup_ARMCM3.S。
编译细节:
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