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

 
 
> Проблема с Bootloader, не меняется flash память
stapleman
сообщение Nov 9 2008, 08:11
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 9-11-08
Пользователь №: 41 482



Написал в WINAVR bootloader для меги8. По усарту принимаю данные и пишу их в flash (это как должно быть).
А в реальность flash не меняется как я не пытался ее изменить.
Подскажите, пожалуйста, что я забыл сделать.

// flash заполняю так
void BootFlashPage(uint32_t page, uint8_t *buf){
boot_page_erase(page); // стирание страницы
boot_spm_busy_wait(); // ждать окончание стирания

for(uint8_t i = 0; i < BootPageSize; i += 2){
uint16_t Data =0;// *buf++; // формирование слова данных
Data |=0;// (*buf++) << 8; // формирование слова данных
boot_page_fill(page + i, Data); // записать в буфер bootloader-а
}

boot_page_write(page); // запись страницы во FLASH
boot_spm_busy_wait(); // ждать окончания записи
}

после этого пишу
boot_rww_enable();

считываю flash программатором и своими глазами вижу, что состояние памяти не изменилось
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
stapleman
сообщение Nov 10 2008, 14:39
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 9-11-08
Пользователь №: 41 482



В общем, вопрос указан в теме. Как корректно перейти в секциию загрузки из основной программы (для winavr). Я пробовал 2 варианта:
1. void (*jump_to_boot)(void) = 0x1c00;
jump_to_boot();
2. ( *( void( ** )()) 0x1c00 )();
В первом случае компилятор пишет warning, и в обоих случаях в секцию загрузчика не переходит.

Сообщение отредактировал stapleman - Nov 10 2008, 14:41
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 10 2008, 16:54
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Код
extern void Loader();
        case CMD_UPDATE_FIRMWARE:
            if(packet_size == 0)    // if no parameters passed
            {
                cli();                
                Loader();
            }
            break;

LDFLAGS += -Wl,--defsym,Loader=0x1С00


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
stapleman
сообщение Nov 10 2008, 17:28
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 9-11-08
Пользователь №: 41 482



Цитата(Сергей Борщ @ Nov 10 2008, 19:54) *
LDFLAGS += -Wl,--defsym,Loader=0x1С00


Что-то не заработало sad.gif.
В файле .lst Loader расположен в области UNDEFINED SYMBOLS.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 10 2008, 18:34
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(stapleman @ Nov 10 2008, 20:28) *
В файле .lst Loader расположен в области UNDEFINED SYMBOLS.
А куда указывает call в точке вызова Loader?

Выкусывайте все лишнее, выкладывайте проект из void main() { Loader(); } с листингами, будем смотреть.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



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

 


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


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