George Spelvin
2016-12-14 23:16:51 UTC
This is an idea that I don't want distracting me until I'm done with my
current work on printf, so I'm spilling it to the mailing list.
A big limitation on printf right now is the size of the stack buffer to
hold a formatted number. Adding 64-bit support means doubling that size.
And if ROM space is to be hoarded like silver on a microcontroller,
RAM space is gold.
Would it be worth enlarging the code to store converted numbers in BCD?
When printing hex, phase 1 would consist of counting significant
digits, and phase 2 would do everything.
Typical ATmega flash/SRAM size are
4K 0.25K/0.5K (48A/48PB)
8K 0.5K/1K (88A/88PB)
16K 1K (16A,164A,168A)
32K 2K (32,32[459],AT90CAN32)
64K 4K (64,64[045679],AT90CAN64)
128K 4K/8K/16K (128A,AT90CAN128/128[01]/1284)
256K 8K (256[01])
It seems like SRAM 1/16 the size of program ROM is the most common
configuration. So 11 bytes of stack could be considered "worth"
88 instructions.
current work on printf, so I'm spilling it to the mailing list.
A big limitation on printf right now is the size of the stack buffer to
hold a formatted number. Adding 64-bit support means doubling that size.
And if ROM space is to be hoarded like silver on a microcontroller,
RAM space is gold.
Would it be worth enlarging the code to store converted numbers in BCD?
When printing hex, phase 1 would consist of counting significant
digits, and phase 2 would do everything.
Typical ATmega flash/SRAM size are
4K 0.25K/0.5K (48A/48PB)
8K 0.5K/1K (88A/88PB)
16K 1K (16A,164A,168A)
32K 2K (32,32[459],AT90CAN32)
64K 4K (64,64[045679],AT90CAN64)
128K 4K/8K/16K (128A,AT90CAN128/128[01]/1284)
256K 8K (256[01])
It seems like SRAM 1/16 the size of program ROM is the most common
configuration. So 11 bytes of stack could be considered "worth"
88 instructions.