В приложении необходимо переписывать таблицы констант расположенные в FLASH. Для этого требуется вызывать подпрограмму расположенную в boot-секторе. Но не всё так просто как кажется! Boot-sector полностью занял bootloader и при загрузке или обновлении приложения через бут, этот кусочек кода bootloader ом отбрасывается, тк секция защищена от записи сама в себя. И получается невозможным реализовать запись приложения во FLASH тк отсутствует нужная подпрограмма.
Остаётся попробовать пользоваться функциями записи самого bootloader. Попробовал, не работает. Как делал:
1. Смотрю адрес нужной функции в IAR map файле: flash_page_write CODE 0001F72E
2. Создаю в основной программе указатель: void (*flash_page_write)(unsigned short) = (void (*)(unsigned short))0x1F72E; При этом IAR выдаёт предупреждение. Warning[Pe1053]: conversion from integer to smaller pointer
3. Записываю в кристалл boot, затем с его помощью загружаю и запускаю приложение. 4. Пытаюсь записать страницу памяти.
Затем всё зависает. Вероятно не происходит возврата из вызванной функции. Посмотреть отладчиком что происходит не получается.
Вопрос такой. Если boot-сектор залочен от чтения и записи, выполняются ли из него вызовы из приложения? Что делаю не так?
Сообщение отредактировал sevstels - Feb 16 2017, 05:30
--------------------
|