Cortex-M3 (SmartFusion2 内) 用の小さなベア メタル テスト プログラムを作成しています。GCC ARM Embedded ツールチェーン (5-2016-q1-update) を使用しています。関数で最初に行うことは、main
デバッグ出力用に UART を初期化することです。次に、いくつかの文字を UART に直接出力して、起動を示します。この UART は、 の newlib syscalls 内でも使用されます_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
たことを教えてくれます。期待どおりに 2 行の出力が表示されます。printf
puts
ただし、次のコードでは出力がまったく表示されません。
void main(void)
{
UART_init();
UART_printBuffer("Starting...\r\n");
iprintf("Working\r\n");
while(1);
}
これのデバッグを開始する場所についての手がかりをいただければ幸いです。