我正在为 Cortex-M3(在 SmartFusion2 中)构建一个小型裸机测试程序。我正在使用 GCC ARM Embedded 工具链(5-2016-q1-update)。我在我的main
函数中做的第一件事是初始化一个用于调试输出的 UART。然后我将一些字符直接输出到 UART 以指示启动。此 UART 也用于_write_r
. main
我的函数调用的下一行printf
。如果我将其保留为对 的调用printf
,因为它没有参数,编译器会将其优化为对的调用puts
(即使我指定了 -O0)。这可以正常工作。如果我打电话给iprintf
编译器没有对其进行优化,现在我根本看不到任何输出,即使是之前直接调用 UART 也是如此。这表明在启动过程中出现了问题,但我不知道是什么。
总之:
void main(void)
{
UART_init();
UART_printBuffer("Starting...\r\n");
printf("Working\r\n");
while(1);
}
工作正常并nm
告诉我printf
呼叫已变为puts
. 我按预期看到了两行输出。
但是对于以下代码,我根本看不到任何输出:
void main(void)
{
UART_init();
UART_printBuffer("Starting...\r\n");
iprintf("Working\r\n");
while(1);
}
任何有关从何处开始调试的线索将不胜感激。