"самомодифицирующуюся программу" - это как понимать? Как программа, которая модифицирует какие то куски на лету и продолжает работать, или перезаписывает себя полностью (bootloader)? Но тогда после сброса никаких устаревших копий быть не может, да и кэш изначально выключена.dtolstov писал(а): ↑06 мар 2023, 12:06
2. После разблокировки перезаписанной MFLASH в I-cache могла остаться устаревшая копия недавно прочитанных инструкций, если вы разрабатывали самомодифицирующуюся программу, а в D-cache устаревшая копия .rodata и .data, что в общем-то уже не проблема микроконтроллера, а проблема разработчика.
самомодифицирующуюся программу не пишу и кэш не включаю, значит не бепокоюсь?
Предположим мы изменили данные и они лежат в кэш. DMA-контроллер лезет и забирает эти новые данные. Или он не работает через кэш, а лезет прямо в память?
"прыжок в SRAM? отключение/блокировка MFLASH," - То есть если я вызову функцию из SRAM, то почему флэш то заблокируется, когда видимо есть явные механизмы блокировки. Ну не читается из нее в этот момент ничего. Сам термин какой то страшный. И что будет после возврата из функции, то есть получается я должен чего то явно деблокировать. Не понятно.dtolstov писал(а): ↑06 мар 2023, 12:06 В смысле случай а) прыжок в SRAM, отключение/блокировка MFLASH, запись MFLASH порегистрово, включение MFLASH обратно
И случай б) прыжок в SRAM, переключение MFLASH с банка основной мегабайтной памяти на EEPROM банк, отключение/блокировка (исполняться оттуда сейчас не будем), запись порегистрово, разблокировка, переключение на основной банк.
"переключение MFLASH с банка основной мегабайтной памяти на EEPROM банк" - но ведь это делается специально, и далее сброс. И какое нам дело, что она там где то блокируется, деблокируется?
"запись порегистрово" - вся работа с MFLASH - это работа с регистрами , пишем, читаем, а как можно иначе? Почему надо задумываться о какой то блокировке?