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

 
 
> Вызов функций из 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
Ответов
sevstels
сообщение Feb 16 2017, 06:21
Сообщение #2


Знающий
****

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



>> выделяется область памяти в ОЗУ под команду загрузчику
Перезагружаться нельзя, тк будет разорвана связь с PC и процесс обновления "упадёт". А сам же фирменный Atmel CAN bootloader к сожалению крив до безобразия, тк писать страницы выше 64к он не способен ввиду того, что ему забыли прикрутить long адресацию. Через CAN протокол поддерживается передача только 2х байтного адреса и попытка это исправить вызывает переполнение boot section и загручик не влазит в память. Как ни крути - а переписать FLASH константы самим бутом - не получится. Только из приложения.

Сообщение отредактировал sevstels - Feb 16 2017, 09:29


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


Знающий
****

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



Цитата(sevstels @ Feb 16 2017, 09:21) *
>> выделяется область памяти в ОЗУ под команду загрузчику
Перезагружаться нельзя, тк будет разорвана связь с PC и процесс обновления "упадёт". А сам же фирменный Atmel CAN bootloader к сожалению крив до безобразия, тк писать страницы выше 64к он не способен ввиду того, что ему забыли прикрутить long адресацию. Как ни крути - а переписать FLASH константы самим бутом - не получится. Только из приложения.


тогда выберите другой режим защиты, который разрешает обращаться к загрузчику из приложения
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 28th June 2025 - 04:06
Рейтинг@Mail.ru


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