объединение упакованных данных с выровненным доступом к памяти

Я пытаюсь провести оптимизацию памяти, которая теоретически возможна, но я начинаю сомневаться, что она находится в пределах возможностей arm-elf-gcc. Пожалуйста, покажите мне, что я ошибаюсь.

У меня встроенная система с очень маленьким объемом оперативной памяти, и еще меньшее количество nvram с батарейным питанием. Я храню данные конфигурации с контрольной суммой в nvram, чтобы при загрузке я мог проверить контрольную сумму и продолжить предыдущий запуск или начать новый запуск, если контрольная сумма недействительна. Во время выполнения я обновляю различные поля разного размера в этих данных конфигурации (и нормально, что это делает контрольную сумму недействительной до тех пор, пока она не будет пересчитана позже).

Все это выполняется в физическом адресном пространстве - нормальный sram отображается в одном location, а NVRAM отображается в другом месте. Вот в чем загвоздка - весь доступ к NVRAM должен осуществляться 32-битными словами; доступ к байтам или полусловам запрещен (хотя, очевидно, это нормально в основной памяти).

Таким образом, я могу: а) сохранить рабочую копию всех моих данных конфигурации в основной памяти, и Baz) обновляют свои собственные структуры по мере необходимости и синхронизируют в какой-то момент, чтобы объявить, что пора пересчитать контрольную сумму и перейти в режим сна.

6
задан Eric Angell 1 November 2010 в 23:51
поделиться