ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
3 июля
1026682
Sl (13.08.2020 17:34, просмотров: 719)
Процессор STM32F746IET6. Отлаживаю IAR + STLink(в режиме SWD). 

Пишу – читаю из FLASH сектор 7. Вроде все работает.
И после стирания и после записи строки в памяти FLASH->CR |= FLASH_CR_LOCK; делаю.
Напоминаю. AXIM(0x08000000-0x080FFFFF) и ICTM(0x00200000-0x002FFFFF). Это одна и та же физическая память, но доступная по разным адресам, по разным шинам. Из программы пользователя AXIM доступна по записи и чтению. ICTM доступна только для чтения.

Есть две непонятные вещи.
1. Записываю строку в SECTOR7 в область AXIM(0x080C0000-0x080FFFFF). В окне памяти вижу - вся строка записалась. Программа данные с этих адресов читает. Замечательно.

НО! в SECTOR7 в область ICTM(0x002C0000-0x002FFFFF) эта строка не отображается и при чтении из программы читается как 0xFF.

Однако после RESET строка, записанная в область AXIM появляется в ICTM области там, где и должна быть!!!


2. - Записываю несколько строк, затем стираю SECTOR7. В окне памяти изменений не вижу(т.е. данные не стерлись). Программа, также читает данные с этих адресов как будто они не стерты.
- Записываю новую строку(с другими данными) поверх старой, и она записывается. Битики которые были 0 становятся 1.!!!!!!!!!!
- делаю RESET. И окне памяти вижу чистый SECTOR7 + новая строка. Т.е. то что и должно было быть в результате моих действий.


Резюме и вопрос одновременно.

Похоже, что IAR в режиме отладки вместо FLASH процессора пишет в какую то ОЗУ, то ли процессора то ли компьютера. А по завершению отладки уже записывает в FLASH конечный результат. Типа экономит ресурс FLASH.