qmk/qmk_firmware

[Bug] Large external EEPROM fails on AVR

Open

#8.742 aberto em 9 de abr. de 2020

Ver no GitHub
 (1 comment) (0 reactions) (1 assignee)C (43.867 forks)batch import
bughelp wanted

Métricas do repositório

Stars
 (20.368 stars)
Métricas de merge de PR
 (Mesclagem média 20d 9h) (27 fundiu PRs em 30d)

Description

Describe the Bug

All the eeprom function signatures provided by avr-libc accept a void* address parameter for the EEPROM offset. This causes problems with AVR when attempting to address 32kB (using signed offsets) or 64kB (when using unsigned).

ChibiOS/ARM reuse the same function signatures to ensure compatibility across the rest of QMK -- these have no issue with addressing as the pointer size is 32-bit.

Suggested fix

  • Rework the persistent storage as a separate subsystem, perhaps called nvram_read_byte() and similar, which provides the same set of functions, but with uint32_t offsets.
  • Relocate things like the Teensy SmartEEPROM to match the current drivers/eeprom/ structure.
  • Relocate the emulated flash to the same location.

Guia do colaborador