2017-05-25 9 views
0

IARコンパイラを使用してSTM32F401RE_NUCLEOでscanf()関数を使用します。scanf()に最初の文字がありません

これは私のオーバーロードされたfgetc関数です。

int fgetc(FILE *f) { 
    char ch; 
    while (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE) == RESET); 
    HAL_UART_Receive(&UartHandle, (uint8_t*)&ch, 1, 0xFFFF); 
    return ch; 
} 

そして、以下のようなmain関数でscanfを使用します。

int n; 
printf("[DBG] Input: "); 
scanf("%d", &n); 
printf("[DBG] Output: %d\n", n); 

端末から「123」と入力した場合は「23」と表示されます。

%d、%u、%fは同じです。

ただし、%cのみ正しく動作します。

どうすればこの問題を解決できますか?

答えて

0

おそらくmikrocontroller.netフォーラムのユーザーと同じ問題があります。

は彼が機能 __writeと__read代わりの のfgetc FPUTCを実装する必要がありました。

プロトタイプ:

size_t __write(int Handle, const unsigned char * buf, size_t count); 
size_t __read(int Handle, unsigned char * buf, size_t count); 

はあなたのためにも興味深いかもしれ:How to override and redirect library modules

関連する問題