smispp писал(а): ↑22 фев 2023, 17:04
Можете пояснить, в чем разница. Пример пока не смотрел.
Я правильно понимаю? Или чего то не понимаю?
Через шину I-code выбирается программный код.
Через шину D-code выбирается константные данные, которые там можно поместить, и читать через указатель,
как и память, разницы никакой.
1.Если я работаю через интерфейс MFLASH , через какую шину я работаю, может через D-code ?
Опять же в РП описан механизм выборки 2-х слов и помещение их в буфер, затем еще 2-х слов в буфер,
имеется в виду что КЭШ (1к !!! целая страница) выключена? Ведь если КЭШ вклюена, то тогда зачем это описание?
2.влияет ли это на данные КЭШ и в какой КЭШ?
При выборке инструкций из области программ, а это 0x00000000-0x1FFFFFFF, доступ происходит по I-bus через I-cache. Прочитанные инструкции оседают в кэше инструкций.
При выборке данных (.rodata, .data, .bss) из области данных, а это 0x20000000-0x3FFFFFFF, доступ происходит по D-bus через D-cache. Прочитанные данные оседают в кэше данных, записанные данные модифицируют кэш данных и чуть позже модифицируют SRAM (настраивается политикой кэширования (write-back, write-through и проч).
Все остальные адреса сплошного адресного пространства рассматриваемых мк выбираются через S-bus, в том числе периферия и служебные регистры.
1. При записи через регистры MFLASH работа идёт по S-bus безо всяких кэшей. Естественно, при этом возможен доступ к SRAM по I-bus -- откуда-то же исполняться надо.
2. После разблокировки перезаписанной MFLASH в I-cache могла остаться устаревшая копия недавно прочитанных инструкций, если вы разрабатывали самомодифицирующуюся программу, а в D-cache устаревшая копия .rodata и .data, что в общем-то уже не проблема микроконтроллера, а проблема разработчика.
smispp писал(а): ↑22 фев 2023, 17:04
3.что надо делать?
"при последующем его включении заново через ICEN/DCEN, если вы им пользуетесь" - не пользуюсь.
4.в каких случаях надо пользоваться "IFLUSH/DFLUSH "?
3. Ну так если вы не включаете I-Cache Enable и D-Cache Enable, то о чём вы вообще беспокоитесь?
4. IFLUSH надо пользоваться при стороннем изменении бинарного кода программы. DFLUSH надо пользоваться, если эту SRAM наблюдает кто-то ещё, будь то второй процессор или хотя бы DMA-контроллер.
smispp писал(а): ↑22 фев 2023, 17:04
5.Что значит "MFLASH заблокируется в любом случае"?
В смысле случай а) прыжок в SRAM, отключение/блокировка MFLASH, запись MFLASH порегистрово, включение MFLASH обратно
И случай б) прыжок в SRAM, переключение MFLASH с банка основной мегабайтной памяти на EEPROM банк, отключение/блокировка (исполняться оттуда сейчас не будем), запись порегистрово, разблокировка, переключение на основной банк.