qmk/qmk_firmware

[Bug] Large external EEPROM fails on AVR

Open

#8,742 创建于 2020年4月9日

在 GitHub 查看
 (1 评论) (0 反应) (1 负责人)C (43,867 fork)batch import
bughelp wanted

仓库指标

Star
 (20,368 star)
PR 合并指标
 (平均合并 20天 9小时) (30 天内合并 27 个 PR)

描述

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.

贡献者指南