歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 詳解U-Boot中printf函數的實現

詳解U-Boot中printf函數的實現

日期:2017/3/1 10:23:56   编辑:Linux編程

一、printf函數調用關系

U-Boot源代碼下載地址 http://www.linuxidc.com/Linux/2011-07/38897.htm


1.1fputc和srial_putc的關系

  1. /*
  2. * Output a single byte to the serial port.
  3. */
  4. void serial_putc (const char c)//發送數據
  5. {
  6. S3C24X0_UART * const uart = S3C24X0_GetBase_UART(UART_NR);
  7. #ifdef CONFIG_MODEM_SUPPORT
  8. if (be_quiet)
  9. return;
  10. #endif
  11. /* wait for room in the tx FIFO */
  12. while (!(uart->UTRSTAT & 0x2));
  13. #ifdef CONFIG_HWFLOW
  14. /* Wait for CTS up */
  15. while(hwflow && !(uart->UMSTAT & 0x1))
  16. ;
  17. #endif
  18. uart->UTXH = c;
  19. /* If \n, also do \r */
  20. if (c == '\n')
  21. serial_putc ('\r');
  22. }
serial_putc函數是直接和控制相關的,通過UTXH寄存器發送數據。
  1. void fputc (int file, const char c)
  2. {
  3. if (file < MAX_FILES)
  4. stdio_devices[file]->putc (c);
  5. }

這是在console_init_r中設置stdio_devices[]後才有的,其他的是類似的。

1.2putc和fputc的關系

  1. void putc (const char c)
  2. {
  3. #ifdef CONFIG_SILENT_CONSOLE
  4. if (gd->flags & GD_FLG_SILENT)
  5. return;
  6. #endif
  7. if (gd->flags & GD_FLG_DEVINIT) {
  8. /* Send to the standard output */
  9. fputc (stdout, c);
  10. } else {
  11. /* Send directly to the handler */
  12. serial_putc (c);
  13. }
  14. }

這是console_init_r中設置gd->flags & GD_FLG_DEVINIT,也就是串口設備完全初始化之後才有這種關系,其他的函數是類似的。

Copyright © Linux教程網 All Rights Reserved