dmitrykhom 0 31 мая Опубликовано 31 мая (изменено) · Жалоба Здравствуйте, уважаемые любители и специалисты! Я использую ArteryTek AT32F437. Описание м/к позволяет понять, что процессор исполняет команды с 0WS. Если почитать reference manual, то можно понять, почему: Здесь указано, что размер области flash-памяти, исполняемой с 0WS, ограничен тем, сколько будет предоставлено места для памяти SRAM. Например, если хотим память SRAM 512 кБ, то получим FLASH 0WS 128 кБ; хотим SRAM 128 кБ - получим FLASH 0WS 128 кБ... Отсюда напрашивается вывод, что та FLASH 0WS - это просто ее имитация на SRAM общим объемом на 640 кБ, которая разделяется на SRAM и FLASH 0WS, а до начала исполнения данные переносятся из FLASH в SRAM. Действительно, все работает очень быстро. Но... Напрашивается желание получить стирание/запись в FLASH-память, чтобы мк не останавливался. Ведь шина FLASH не используется. Но нет! Процессор встаёт. Как будто здесь имеется какая-то синхронизация между SRAM и FLASH. Вопросы: 1. Имел ли кто опыт, можно ли как-нибудь сделать так, чтобы программа не останавливалась? Возможно, есть какая-то зависимость, которую можно отключить? Может быть, кто-то более детально понимает суть проблемы и знает, как ее решить. Зачем мне такая память, если мне тогда проще загрузить программу в SRAM и оттуда пустить ее и не париться. 2. Можно ли каким-то образом получить все 640 кБ SRAM, а вся FLASH пусть не 0WS? Изменено 31 мая пользователем dmitrykhom орфография Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dron_Gus 2 6 июня Опубликовано 6 июня · Жалоба 1. Исполнять код из одного банка, писать в другой. Все как на STM32 с двумя банками памяти. 2. Можно. Надо поправить битики в "User system data". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dron_Gus 2 6 июня Опубликовано 6 июня · Жалоба On 5/31/2024 at 7:32 PM, dmitrykhom said: 2. Можно ли каким-то образом получить все 640 кБ SRAM, а вся FLASH пусть не 0WS? Поправочка к предыдущему ответу, можно максимально 512Кб ОЗУ и 128 на 0WS. Полностью на ОЗУ не перераспределить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dmitrykhom 0 7 июня Опубликовано 7 июня · Жалоба 12 часов назад, Dron_Gus сказал: 1. Исполнять код из одного банка, писать в другой. Все как на STM32 с двумя банками памяти. Вы имеете ввиду другой банк, где банк - это 2 МБ для м/к с 4 МБ FLASH и 512 кБ для м/к с 1 МБ FLASH? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dron_Gus 2 7 июня Опубликовано 7 июня · Жалоба 2 hours ago, dmitrykhom said: Вы имеете ввиду другой банк, где банк - это 2 МБ для м/к с 4 МБ FLASH и 512 кБ для м/к с 1 МБ FLASH? Да. Насколько я помню, запись/стирание одного банка не блокирует доступ ко второму. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dmitrykhom 0 7 июня Опубликовано 7 июня (изменено) · Жалоба 5 часов назад, Dron_Gus сказал: Да. Насколько я помню, запись/стирание одного банка не блокирует доступ ко второму. Нет, финт с ушами не прошел! Не пробовал, как там у STM... У меня AT32F437ZMT7, т.е. 4032 кБ flash. Пишу по адресу 0x08202160 слово 32х (предварительно стерто), программа вся находится в пределах нескольких десятков кБ, начиная с адреса 0x08000000... прерывание, которое запускается приблизительно один раз в 10 мкс, задержалось значительно, а так всегда работает без проблем. Так что рано обрадовался, придется либо ставить внешнюю память, либо, что скорее всего, кэшировать всё и вся в SRAM. Изменено 7 июня пользователем dmitrykhom Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться