Этот ответ сфокусирован только на устройствах PIC Microchip в семействах PIC24, dsPIC30 и dsPIC33.
Контроллеры этого типа имеют отдельные адресные шины для команд и памяти данных.
память данных организована в виде 16-битных слов и адресуется в виде байтов.
память команд организована в виде 24-битных слов.
Когда код операции выбирается из памяти команд, все 24-биты читаются сразу.Но существуют дополнительные режимы адресации, которые позволяют считывать часть памяти команд с использованием режимов адресации, доступных в памяти данных.
Существуют и другие способы доступа к памяти команд, но они предназначены для стирания и записи памяти командпоэтому не имеют отношения к этому ответу.
Когда контроллер выбирает инструкции, используя только программный счетчик, возможен только четный адрес, однако возможно получить инструкцию, используя косвенную адресацию.Разработчики должны быть осторожны, используя этот метод для передачи управления, такой как CALL и GOTO, поскольку прерывания из-за ошибок адреса могут возникать, когда целевой адрес нечетен.
По причинам, которые я не полностью понимаю, части памяти команд, видимые с использованием доступных режимовс памятью данных можно получить доступ только к младшим 16-битам командного слова, к старшему 8-битному нельзя получить доступ таким образом.
Итак, я описал форму шин памяти в 24-битных PIC, ноЯ не ответил на ваш вопрос.
Документация по микрочипам не помогает описать это.Он много размахивает руками и затеняет полезные детали.
По сути, для каждого слова адресуемой памяти есть 2 адресных блока.В памяти данных это представляет 2 байта оперативной памяти, для памяти инструкций - 3 байта FLASH, но один из этих 3 байтов является видимым.
Эта обработка памяти инструкций "должна" сделать доступ к этомупространство памяти для чтения постоянных данных быстрее и проще для создания генератора кода компилятора Си.Трудно сказать, что это правда.
Таким образом, для суммирования есть 3 байта FLASH для каждого командного слова.Каждое командное слово представлено 2 адресными единицами.
Чтобы преобразовать единицы адреса в байты FLASH:
- Подсчитать диапазон единиц адреса FLASH (должен быть четным).
- Разделить диапазон на 2, чтобы получитьколичество командных слов.
- Умножьте количество командных слов на 3 для количества байтов флэш-памяти.
Для большинства практических целей количество байтов, использованных во флэш-памятибесполезен, хотя номер назначенного или свободного командного слова более полезен.