реклама на сайте
подробности

 
 
> Вызов функций из bootloader, IAR AVR
sevstels
сообщение Feb 16 2017, 05:20
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 626
Регистрация: 3-12-07
Пользователь №: 32 910



В приложении необходимо переписывать таблицы констант расположенные в 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


--------------------
Herz - дятел.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Непомнящий Евген...
сообщение Feb 16 2017, 06:03
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(sevstels @ Feb 16 2017, 08:20) *
Вопрос такой. Если boot-сектор залочен от чтения и записи, выполняются ли из него вызовы из приложения?
Что делаю не так?


Memory programming / Lock bits
Код
1 1 1 No restrictions for SPM or (E)LPM accessing the Boot
Loader section.
2 1 0 SPM is not allowed to write to the Boot Loader section.
3 0 0
SPM is not allowed to write to the Boot Loader section,
and (E)LPM executing from the Application section is not
allowed to read from the Boot Loader section. If interrupt
vectors are placed in the Application section, interrupts
are disabled while executing from the Boot Loader section.
4 0 1
(E)LPM executing from the Application section is not
allowed to read from the Boot Loader section. If interrupt
vectors are placed in the Application section, interrupts
are disabled while executing from the Boot Loader section.
Memory Lock Bits Protection Type


Можно предложить обходной путь - выделяется область памяти в ОЗУ под команду загрузчику. Туда пишется команда, ее аргументы и crc, затем процессор перезагружается (скажем по вотчдогу). Загрузчик при старте проверяет, есть ли в этой области команда и выполняет ее
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 17:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.02172 секунд с 7
ELECTRONIX ©2004-2016