SDCC printf 函數介紹

Posted by: 邱小新 at 上午10:41 in
  1. printf 會使用到 putchar 函數,而 SDCC 沒有實作 putchar,需要使用者自己定義。
  2. 預設的 printf 是使用 printf_large.c 的函數,不支援 float 輸出。
  3. 如果要讓 printf 支援 float 輸出,需加上 -DUSE_FLOATS=1 才可以,另外最好使用 --model-large,因為會使用到很多 memory。
  4. printf_fast 函數可以設定 #define 去除 long 及 field widths 的支援,並縮小 code size 並加快速度。
  5. printf_fast_f float 只支援到 +/- 4294967040,小數點後 8 位。
  6. %e 及 %g 二種 float 都不支援。
  7. %d 顯示有符號十進位整數(signed),%u 顯示無符號十進位整數(unsigned)。

mcs51printfprintf
USE_FLOATS=1
printf_smallprintf_fastprintf_fast_fprintf_tiny
filenameprintf_large.cprintf_large.cprintfl.cprintf_fast.cprintf_fast_f.cprintf_tiny.c
"HelloWorld" size small/large1.7k/2.4k4.3k/5.6k1.2k/1.8k1.3k/1.3k1.9k/1.9k0.44k / 0.44k
code size
small / large
1.4k / 2.0k2.8k / 3.7k0.45k / 0.47k (+_ltoa)1.2k / 1.2k1.6k / 1.6k0.26k / 0.26k
byte arguments on stackyesyesnononono
formatscdiopsuxcdfiopsuxcdosxcdsuxcdfsuxcdsux
long (32 bit) supportyesyesyesyesyesno
float format--%f----%f--
field widthyesyesnoyesyesno
string speed
small/large
1.52 / 2.59 ms1.53 / 2.62 ms0.92 / 0.93 ms0.45 / 0.45 ms0.46 / 0.46 ms0.45 / 0.45 ms
int speed
small / large
3.01 / 3.61 ms3.01 / 3.61 ms3.51 / 18.13 ms0.22 / 0.22 ms0.23 / 0.23 ms0.25 / 0.25 ms
long speed
small / large
5.37 / 6.31 ms5.37 / 6.31 ms8.71 / 40.65 ms0.40 / 0.40 ms0.40 / 0.40 ms--
float speed
small / large
--7.49 / 22.47 ms----1.04 / 1.04 ms--

  1. Execution time of printf("%s%c%s%c%c%c", "Hello", ’ ’, "World", ’!’, ’\r’, ’\n’); standard 8051 @ 22.1184 MHz, empty putchar()
  2. Execution time of printf("%d", -12345); standard 8051 @ 22.1184 MHz, empty putchar()
  3. Execution time of printf("%ld", -123456789); standard 8051 @ 22.1184 MHz, empty putchar()
  4. Execution time of printf("%.3f", -12345.678); standard 8051 @ 22.1184 MHz, empty putchar()

0 意見

張貼留言