Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Bootloader на IAR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Alex ma
В среде программирования ICCV7 for AVR и CodeVisionAVR можно выбрать тип создаваемого приложения загрузчик или основная программа, можно ли cделать тоже самое в IAR, что то я там нечего подобного не нашел.
Сергей Борщ
Цитата(Alex ma @ Jul 23 2007, 16:59) *
я там нечего подобного не нашел.
Нет там такого. С его точки зрения любой проект - программа, а что она делает - зависит от программиста. Все "магические действия" для размещения программы в соответствующей области памяти записываются в файл управления линкером с расширением .xcl
arttab
на форуме были примеры для IAR. поищите, посмотрите...
Alex ma
Цитата(Сергей Борщ @ Jul 23 2007, 20:45) *
Нет там такого. С его точки зрения любой проект - программа, а что она делает - зависит от программиста. Все "магические действия" для размещения программы в соответствующей области памяти записываются в файл управления линкером с расширением .xcl


Как гнусно, а могло быть все проще будем искать инфу по линкеру… 05.gif
haker_fox
Цитата(Alex ma @ Jul 24 2007, 02:13) *
Как гнусно, а могло быть все проще будем искать инфу по линкеру… 05.gif

Просто CodeVision (на счет ICC не знаю) создан для новичков. Допустим Вам нужно разместить программу с адреса 0x1234, что будете делать? Не искать же соответсвующую галочку))) Просто придется подправить скрипт линкера и указать, что код и данные нужно разместить во флеш с заданного адреса. В случае с бутлоадером тоже самое: указываете нужный адрес и вперед!) Соответственно это не гнусно , а мощно!
Успехов!
Сергей Борщ
Цитата(Alex ma @ Jul 23 2007, 21:13) *
будем искать инфу по линкеру… 05.gif
Про "гнусно" уже haker_fox написал, а искать просто: Help->Linker and library tools reference guide. И еще можно глянуть www.atmel.com ->App Notes->avr231. Там есть готовые скрипты.
Alex ma
Взял вот этот файл, lnkm8s.xcl, поправил, откомпилировал и во чудо при просмотре hex файла, адрес по которому должна леч программа тот который нужен! В общем получилось, на DELPHI накидал программу для PC, только еще протокол обмена не написал, буду думать над протоколом.
:020000020000FC
:1018000018C0189518951895189518951895189545
:101810001895189518951895189518951895189560
:1018200018951895189500E010E008950000889527
:10183000FECF0FE90DBF00E00EBFC0EAD1E003D03C
:0A184000F2DFF4DFF3CF01E00895BA
:0400000300001800E1
:00000001FF
Файлик avr231 скачал.
Спасибо что показали в какую сторону смотреть
Сергей Борщ
Цитата(Alex ma @ Jul 24 2007, 19:42) *
Взял вот этот файл, lnkm8s.xcl, поправил
На всякий случай - этот файл очень желательно скопировать в папку вашего проекта, чтобы ваши изменения не отразились на других проектах. А в настройках Project->Options->Linker в позиции Linker command file поставить галочку override default и вписать имя вашего .xcl в виде $PROJ_DIR$\имя файла.xcl
Цитата(Alex ma @ Jul 24 2007, 19:42) *
адрес по которому должна леч программа тот который нужен!
"Если что-то заработало сразу - выключай и ищи ошибку" 08.gif
haker_fox
Цитата(Alex ma @ Jul 25 2007, 00:42) *
только еще протокол обмена не написал, буду думать над протоколом.

Если Вам не нужно защищать данные, передаваемы бутлоадеру, то рекомендую воспользоваться этим проектом . Тогда для прошивки МК можно будет пользоваться любым эмулятором терминала (Напрмер Hyper Terminal под windows, или minicom под *nix) и, соответственно, не придется писать свой софт.
Для конвертации hex в srec можно скачать пакет srecord, он имеется под win и под *nix.
IgorKossak
Цитата(Сергей Борщ @ Jul 24 2007, 21:21) *
"Если что-то заработало сразу - выключай и ищи ошибку" 08.gif

И никогда не повторяй удачный эксперимент. cool.gif
Сергей Борщ
Цитата(haker_fox @ Jul 25 2007, 04:44) *
Для конвертации hex в srec можно скачать пакет srecord, он имеется под win и под *nix.
Может логичнее "конвертнуть" саму контроллерную часть, чтобы она понимала сразу hex? Насколько я плохо помню формат srec, он был очень похож на hex.
IgorKossak
Цитата(haker_fox @ Jul 25 2007, 04:44) *
Для конвертации hex в srec можно скачать пакет srecord, он имеется под win и под *nix.

IAR и сам может сделать выходной файл в формате srec (motorola, motorola-s19, ...).
См. опции линкера.
Alex ma
Пытаюсь подсчитать контрольную сумму Flash из bootloadera
Но в функцию расчета CRC передается все время 0xFFFF. Не могу понять почему.
Указатель на Flash unsigned int const __flash * ptrFlash
CRC unsigned char crc8Flash = 0xFF;
ptrFlash = (__flash unsigned int const*)0x0BFE; // получаем адрес ячейки Flash
while(coutFlash --){ // количество слов для расчета
crc8Flash = CRC8Byte(Lo(*ptrFlash), crc8Flash); //рассчитываем для младшего
crc8Flash = CRC8Byte(Hi(*ptrFlash), crc8Flash);
*ptrFlash++;
};
Сергей Борщ
Цитата(Alex ma @ Jul 26 2007, 13:22) *
Пытаюсь подсчитать контрольную сумму Flash из bootloadera
Но в функцию расчета CRC передается все время 0xFFFF. Не могу понять почему.
Указатель на Flash unsigned int const __flash * ptrFlash
CRC unsigned char crc8Flash = 0xFF;
ptrFlash = (__flash unsigned int const*)0x0BFE; // получаем адрес ячейки Flash
while(coutFlash --){ // количество слов для расчета
crc8Flash = CRC8Byte(Lo(*ptrFlash), crc8Flash); //рассчитываем для младшего
crc8Flash = CRC8Byte(Hi(*ptrFlash), crc8Flash);
*ptrFlash++;
};
1)0x0BFE - если вы имели в виду конец пользовательской области флеш, то IAR считает адреса в байтах, т.е. 0x17FE
2)наверное все-таки *ptrFlash--;, иначе вы считаете сумму загрузчика.
3)а зачем вы используете указатель на int и делаете отдельный расчет для младшего и старшего? Может удобнее использовать указатель на char?
Alex ma
Сергей Борщ
1. Счет у меня с 0х0000, 0x0BFE это для отладки, так как если считать от 0х0000, там действительно все FFFF, удобней отлаживать, с адреса 0x0BFE, значения отличные от 0xFFFF.
2. "Наверное все-таки *ptrFlash--;, иначе вы считаете сумму загрузчика?" – временно для отладки.
3. Указателя на char не хватит, памяти больше чем 0xFF – char, максимум.



Все зароботало!
#define FLASH_BYTE 0x17FE
unsigned char const __flash * ptrFlash;
ptrFlash = (__flash unsigned char const*)0x0000;
while(coutFlashByte != FLASH_BYTE){
crc8Flash = CRC8Byte(*ptrFlash, crc8Flash);
*ptrFlash++;
coutFlashByte ++;
};
smile3046.gif

Какой умный IAR, везде заглушки в прерывании наставил, где не используются
@00000C00: __program_start
+00000C00: C13C RJMP PC+0x013D Relative jump
+00000C01: 9518 RETI Interrupt return
+00000C02: 9518 RETI Interrupt return
+00000C03: 9518 RETI Interrupt return
+00000C04: 9518 RETI Interrupt return
+00000C05: 9518 RETI Interrupt return
+00000C06: 9518 RETI Interrupt return
+00000C07: 9518 RETI Interrupt return
+00000C08: 9518 RETI Interrupt return
@00000C09: ??INTVEC 18
+00000C09: C118 RJMP PC+0x0119 Relative jump
+00000C0A: 9518 RETI Interrupt return
@00000C0B: ??INTVEC 22
+00000C0B: C06B RJMP PC+0x006C Relative jump
+00000C0C: 9518 RETI Interrupt return
@00000C0D: ??INTVEC 26
+00000C0D: C0C7 RJMP PC+0x00C8 Relative jump
+00000C0E: 9518 RETI Interrupt return
+00000C0F: 9518 RETI Interrupt return
+00000C10: 9518 RETI Interrupt return
+00000C11: 9518 RETI Interrupt return
+00000C12: 9518 RETI Interrupt return
Сергей Борщ
Цитата(Alex ma @ Jul 26 2007, 16:48) *
Какой умный IAR, везде заглушки в прерывании наставил, где не используются
Это не он умный, это у вас галочка стоит в настройках проекта, которая выливается в заполнение свободных мест в адресах векторов константой. Т.е. при желании можно его заставить и другую команду туда вставить, только это от лукавого.
haker_fox
Цитата(IgorKossak @ Jul 25 2007, 21:35) *
IAR и сам может сделать выходной файл в формате srec (motorola, motorola-s19, ...).
См. опции линкера.

К сожалению не использую IAR, поэтому даже как-то не задумался о такой возможности. Привык к avr gcc.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.