Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: bootloader в IARe 3,10
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Страницы: 1, 2, 3
МП41
Имеется основная программа в ATmega16, которая по команде с UARTа стирает одну страницу, вызывая следующую подпрограмму:
Код
void erase_test(void) @ "BOOTSECTION"
{
_WAIT_FOR_SPM();        
_ENABLE_RWW_SECTION();
_PAGE_ERASE(0x2800);
}

Непосредственно перед вызовом прерывания запрещаю. Сама подпрограмма лежит в области загрузчика (в линкере секция BOOTSECTION прописана "куда надо"), страницу действительно стирает, но назад в основную программу не возвращается. Контроллер, кстати, продолжает генерировать ШИМ по одному из таймеров.
В чём может быть проблема?

Добавлю, что по адресу 0x2800..0x2880 (1 страница = 128 байт) нет кода программы, там лежат данные, так что сама себя программа стиранием этой области не портит.
Сергей Борщ
QUOTE (МП41 @ Feb 17 2011, 15:30) *
но назад в основную программу не возвращается.
Там нужно еще что-то типа unlock делать, насколько помню - чтобы область приложения стала доступной на чтение. В avr-gcc это boot_rww_enable();

МП41
Сергей Борщ, спасибо.
Похоже, надо делать так:
Код
void erase_test(void) @ "BOOTSECTION"
{
_PAGE_ERASE(0x2800);//стираем страницу
_WAIT_FOR_SPM();//ждём выполнения команды SPM
_ENABLE_RWW_SECTION();//активируем RWW-секцию
_WAIT_FOR_SPM();//опять ждём выполнения команды SPM        
}
МП41
Добавлено: теперь работает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.