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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Bootloader на IAR, В ICC или CodeVisionAVR, можно выбрать между приложением и загрузчиком
Alex ma
сообщение Jul 23 2007, 13:59
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 81
Регистрация: 9-08-06
Пользователь №: 19 445



В среде программирования ICCV7 for AVR и CodeVisionAVR можно выбрать тип создаваемого приложения загрузчик или основная программа, можно ли cделать тоже самое в IAR, что то я там нечего подобного не нашел.

Сообщение отредактировал Alex ma - Jul 23 2007, 14:01
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 23 2007, 14:45
Сообщение #2


Гуру
******

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



Цитата(Alex ma @ Jul 23 2007, 16:59) *
я там нечего подобного не нашел.
Нет там такого. С его точки зрения любой проект - программа, а что она делает - зависит от программиста. Все "магические действия" для размещения программы в соответствующей области памяти записываются в файл управления линкером с расширением .xcl


--------------------
На любой вопрос даю любой ответ
"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
arttab
сообщение Jul 23 2007, 15:12
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



на форуме были примеры для IAR. поищите, посмотрите...


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
Alex ma
сообщение Jul 23 2007, 18:13
Сообщение #4


Частый гость
**

Группа: Новичок
Сообщений: 81
Регистрация: 9-08-06
Пользователь №: 19 445



Цитата(Сергей Борщ @ Jul 23 2007, 20:45) *
Нет там такого. С его точки зрения любой проект - программа, а что она делает - зависит от программиста. Все "магические действия" для размещения программы в соответствующей области памяти записываются в файл управления линкером с расширением .xcl


Как гнусно, а могло быть все проще будем искать инфу по линкеру… 05.gif
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jul 24 2007, 00:25
Сообщение #5


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



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

Просто CodeVision (на счет ICC не знаю) создан для новичков. Допустим Вам нужно разместить программу с адреса 0x1234, что будете делать? Не искать же соответсвующую галочку))) Просто придется подправить скрипт линкера и указать, что код и данные нужно разместить во флеш с заданного адреса. В случае с бутлоадером тоже самое: указываете нужный адрес и вперед!) Соответственно это не гнусно , а мощно!
Успехов!


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 24 2007, 11:20
Сообщение #6


Гуру
******

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



Цитата(Alex ma @ Jul 23 2007, 21:13) *
будем искать инфу по линкеру… 05.gif
Про "гнусно" уже haker_fox написал, а искать просто: Help->Linker and library tools reference guide. И еще можно глянуть www.atmel.com ->App Notes->avr231. Там есть готовые скрипты.


--------------------
На любой вопрос даю любой ответ
"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
Alex ma
сообщение Jul 24 2007, 16:42
Сообщение #7


Частый гость
**

Группа: Новичок
Сообщений: 81
Регистрация: 9-08-06
Пользователь №: 19 445



Взял вот этот файл, lnkm8s.xcl, поправил, откомпилировал и во чудо при просмотре hex файла, адрес по которому должна леч программа тот который нужен! В общем получилось, на DELPHI накидал программу для PC, только еще протокол обмена не написал, буду думать над протоколом.
:020000020000FC
:1018000018C0189518951895189518951895189545
:101810001895189518951895189518951895189560
:1018200018951895189500E010E008950000889527
:10183000FECF0FE90DBF00E00EBFC0EAD1E003D03C
:0A184000F2DFF4DFF3CF01E00895BA
:0400000300001800E1
:00000001FF
Файлик avr231 скачал.
Спасибо что показали в какую сторону смотреть
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 24 2007, 18:21
Сообщение #8


Гуру
******

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



Цитата(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


--------------------
На любой вопрос даю любой ответ
"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
haker_fox
сообщение Jul 25 2007, 01:44
Сообщение #9


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(Alex ma @ Jul 25 2007, 00:42) *
только еще протокол обмена не написал, буду думать над протоколом.

Если Вам не нужно защищать данные, передаваемы бутлоадеру, то рекомендую воспользоваться этим проектом . Тогда для прошивки МК можно будет пользоваться любым эмулятором терминала (Напрмер Hyper Terminal под windows, или minicom под *nix) и, соответственно, не придется писать свой софт.
Для конвертации hex в srec можно скачать пакет srecord, он имеется под win и под *nix.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jul 25 2007, 06:39
Сообщение #10


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Сергей Борщ @ Jul 24 2007, 21:21) *
"Если что-то заработало сразу - выключай и ищи ошибку" 08.gif

И никогда не повторяй удачный эксперимент. cool.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 25 2007, 10:27
Сообщение #11


Гуру
******

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



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


--------------------
На любой вопрос даю любой ответ
"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
IgorKossak
сообщение Jul 25 2007, 13:35
Сообщение #12


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(haker_fox @ Jul 25 2007, 04:44) *
Для конвертации hex в srec можно скачать пакет srecord, он имеется под win и под *nix.

IAR и сам может сделать выходной файл в формате srec (motorola, motorola-s19, ...).
См. опции линкера.
Go to the top of the page
 
+Quote Post
Alex ma
сообщение Jul 26 2007, 10:22
Сообщение #13


Частый гость
**

Группа: Новичок
Сообщений: 81
Регистрация: 9-08-06
Пользователь №: 19 445



Пытаюсь подсчитать контрольную сумму 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++;
};
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 26 2007, 10:41
Сообщение #14


Гуру
******

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



Цитата(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?


--------------------
На любой вопрос даю любой ответ
"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
Alex ma
сообщение Jul 26 2007, 13:48
Сообщение #15


Частый гость
**

Группа: Новичок
Сообщений: 81
Регистрация: 9-08-06
Пользователь №: 19 445



Сергей Борщ
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, 13:44
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 22:14
Рейтинг@Mail.ru


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