I2C: rewrite demo to use program memory.
Advantages are apparent: much less RAM usage. $ avr-size -C --mcu=atmega1284p build/teacup.elf AVR Memory Usage ---------------- Device: atmega1284p Program: 23750 bytes (18.1% Full) (.text + .data + .bootloader) Data: 2053 bytes (12.5% Full) (.data + .bss + .noinit) EEPROM: 32 bytes (0.8% Full) (.eeprom) $ avr-size -C --mcu=atmega1284p build/teacup.elf AVR Memory Usage ---------------- Device: atmega1284p Program: 23720 bytes (18.1% Full) (.text + .data + .bootloader) Data: 1543 bytes (9.4% Full) (.data + .bss + .noinit) EEPROM: 32 bytes (0.8% Full) (.eeprom) A note about size reports: what 'make size' currently reports is a bit misleading, because it doesn't count the .data section as Flash usage. However, this section is actually written there as it's the section which initialises RAM.
This commit is contained in:
parent
2298973343
commit
aab447567c
13
i2c_test.c
13
i2c_test.c
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
#define DISPLAY_I2C_ADDRESS (0x3C << 1)
|
||||
|
||||
static uint8_t display_init[] = {
|
||||
const uint8_t PROGMEM display_init[] = {
|
||||
0x00, // Command marker.
|
||||
0xAE, // Display off.
|
||||
0xD5, 0x80, // Display clock divider (reset).
|
||||
|
|
@ -50,7 +50,7 @@ typedef struct {
|
|||
uint8_t data[4];
|
||||
} SYMBOL;
|
||||
|
||||
SYMBOL font_8x4[] = {
|
||||
const SYMBOL PROGMEM font_8x4[] = {
|
||||
{2, {0x00, 0x00, 0x00, 0x00}}, /* space */
|
||||
{3, {0x0C, 0x5E, 0x0C, 0x00}}, /* excl_mark */
|
||||
{3, {0x03, 0x00, 0x03, 0x00}}, /* quot_mark */
|
||||
|
|
@ -162,7 +162,7 @@ static void i2c_test(void) {
|
|||
|
||||
for (i = 0; i < sizeof(display_init); i++) {
|
||||
// Send last byte with 'last_byte' set.
|
||||
i2c_write(DISPLAY_I2C_ADDRESS, display_init[i],
|
||||
i2c_write(DISPLAY_I2C_ADDRESS, pgm_read_byte(&display_init[i]),
|
||||
(i == sizeof(display_init) - 1));
|
||||
}
|
||||
|
||||
|
|
@ -203,11 +203,12 @@ static void i2c_test(void) {
|
|||
// Render text to bitmap to display.
|
||||
i2c_write(DISPLAY_I2C_ADDRESS, 0x40, 0);
|
||||
while (*message) {
|
||||
SYMBOL symbol = font_8x4[(uint8_t)*message - 0x20];
|
||||
uint8_t index = (uint8_t)*message - 0x20;
|
||||
|
||||
// Send the character bitmap.
|
||||
for (i = 0; i < symbol.columns; i++) {
|
||||
i2c_write(DISPLAY_I2C_ADDRESS, symbol.data[i], 0);
|
||||
for (i = 0; i < pgm_read_byte(&font_8x4[index].columns); i++) {
|
||||
i2c_write(DISPLAY_I2C_ADDRESS,
|
||||
pgm_read_byte(&font_8x4[index].data[i]), 0);
|
||||
}
|
||||
// Send space between characters.
|
||||
for (i = 0; i < FONT_SYMBOLS_SPACE; i++) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue