Проблема
У нас есть проблема во встроенном коде.Варианты хранения: энергонезависимое, но неизменяемое (флэш-память, ПЗУ и т. Д.) Или энергозависимое хранилище«data» - это инициализированные ненулевые произвольные значения, которые могут быть изменены (по сравнению с const
или rodata
).Как это можно организовать?
Копия данных помещается во флэш-память или в ПЗУ.Эти данные затем копируются в ОЗУ, где они читаются и записываются.
Мой вопрос заключается в функции copy_data (), почему нам нужно присвоить адрес __data_load указателю *ЦСИ?Is __data_load = LOADADDR (.data);такой же, как __data_start.Что делает функция copy_data () в программе?
copy_data()
является решением вышеуказанной проблемы.Он забирает память из флэш-памяти (место загрузки) и копирует ее в оперативную память.Подобная дихотомия может существовать с виртуальной адресацией.Где вы должны расположить физический адрес и содержимое виртуального адреса, чтобы они были одинаковыми перед включением MMU.Документация компоновщика часто называет расположение запуска / ОЗУ «VADDR».
С помощью загрузчиков ОС или некоторых ПЗУ вы можете загрузить диск / MMC (флэш-память NAND) в ОЗУ и иметь возможность обойти copy_data()
.Это необходимо только в том случае, если ваш код будет работать напрямую с энергонезависимого устройства.Часто бывает проще и быстрее просто скопировать все изображение из флэш-памяти в оперативную память.Это зависит от ресурсов, конечно.Доступ для чтения из оперативной памяти часто быстрее, чем флэш.Опять же, это будет зависеть от вашей системы.