uart ポートにリダイレクトされる newlib の printf 関数に奇妙な問題があります。
この問題は、例を使ってうまく説明できます。
printf(" hi ");
...
...//some other simple code. like a++;
...
printf(" hello ");
プログラムを実行すると、次のprintfに到達/呼び出されるまで「hi」は表示されません。つまり、'hello' が出力されることになっている場合、'hi' が出力されます.. この 1 呼び出しの遅延は常に実行されます。最後のprintfはまったく印刷されません。
私のUARTコードはどこですか:
int write(int file, char *ptr, int len) {
unsigned int i;
int de =1;
//initialize_Uart(de);// NOT REQUIRED as UBOOT has already done the job.
/* Transmitting a char from UART */
for (i = 0; i < len; ++i, ++ptr)
{
while (!(IN_8(DUART1_ULSR1)&(0x20))); // wait for the CTS bit is cleared
OUT_8(DUART1_UTHR, *ptr);
}
return len;
}
これに対する解決策は何ですか?