- printf 會使用到 putchar 函數,而 SDCC 沒有實作 putchar,需要使用者自己定義。
- 預設的 printf 是使用 printf_large.c 的函數,不支援 float 輸出。
- 如果要讓 printf 支援 float 輸出,需加上 -DUSE_FLOATS=1 才可以,另外最好使用 --model-large,因為會使用到很多 memory。
- printf_fast 函數可以設定 #define 去除 long 及 field widths 的支援,並縮小 code size 並加快速度。
- printf_fast_f float 只支援到 +/- 4294967040,小數點後 8 位。
- %e 及 %g 二種 float 都不支援。
- %d 顯示有符號十進位整數(signed),%u 顯示無符號十進位整數(unsigned)。
mcs51 | printf | printf USE_FLOATS=1 | printf_small | printf_fast | printf_fast_f | printf_tiny |
filename | printf_large.c | printf_large.c | printfl.c | printf_fast.c | printf_fast_f.c | printf_tiny.c |
1.7k/2.4k | 4.3k/5.6k | 1.2k/1.8k | 1.3k/1.3k | 1.9k/1.9k | 0.44k / 0.44k | |
code size small / large | 1.4k / 2.0k | 2.8k / 3.7k | 0.45k / 0.47k (+_ltoa) | 1.2k / 1.2k | 1.6k / 1.6k | 0.26k / 0.26k |
byte arguments on stack | yes | yes | no | no | no | no |
formats | cdiopsux | cdfiopsux | cdosx | cdsux | cdfsux | cdsux |
long (32 bit) support | yes | yes | yes | yes | yes | no |
float format | -- | %f | -- | -- | %f | -- |
field width | yes | yes | no | yes | yes | no |
string speed small/large | ||||||
int speed small / large | 3.01 / 3.61 ms | 3.01 / 3.61 ms | 3.51 / 18.13 ms | 0.22 / 0.22 ms | 0.23 / 0.23 ms | 0.25 / 0.25 ms |
long speed small / large | 5.37 / 6.31 ms | 5.37 / 6.31 ms | 0.40 / 0.40 ms | 0.40 / 0.40 ms | -- | |
float speed small / large | -- | -- | -- | 1.04 / 1.04 ms | -- |
- Execution time of printf("%s%c%s%c%c%c", "Hello", ’ ’, "World", ’!’, ’\r’, ’\n’); standard 8051 @ 22.1184 MHz, empty putchar()
- Execution time of printf("%d", -12345); standard 8051 @ 22.1184 MHz, empty putchar()
- Execution time of printf("%ld", -123456789); standard 8051 @ 22.1184 MHz, empty putchar()
- Execution time of printf("%.3f", -12345.678); standard 8051 @ 22.1184 MHz, empty putchar()
張貼留言