1

我正在为 Cortex-M3(在 SmartFusion2 中)构建一个小型裸机测试程序。我正在使用 GCC ARM Embedded 工具链(5-20​​16-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);
}

任何有关从何处开始调试的线索将不胜感激。

4

0 回答 0