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

 
 
7 страниц V  « < 4 5 6 7 >  
Reply to this topicStart new topic
> bootloader в IARe 3,10, Помогите разобраться как сделать
alux
сообщение Jan 16 2008, 20:08
Сообщение #76


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Пытаюсь использовать функции записи во флеш из апнота avr106 для своего проекта (Mega324P). Хочу сохранять параметры в неиспользованной части бутлодера (от начала сектора NRWW до начала собственно бутлодера). В верхней NRWW области прошит бутлодер размером 1кб. Область NRWW для данного мк занимает 4кБ. Бутлодер создан отдельным проектом. Сделал так как указано в апноте:
Код
//Alternatively it is possible to place only selected functions into defined segments of
//the Flash memory. In fact it is only the functions for writing that need to be located
//inside the Boot section.
//1. Make a new define for Boot size.
-D_..X_BOOTSEC_SIZE=1000 /* 2048 words */
//2. Define a new segment for the entire Boot section based on the definition in step 1.
-Z(FARCODE)BOOT_SEGMENT=(_..X_FLASH_END-_..X_BOOTSEC_SIZE+1)-_..X_FLASH_END
//Placing a C function into the defined segment:
void ExampleFunction() @ BOOT_SEGMENT {
------
}

...т.е. в описании и объявлении функции записи во флеш добавил @"BOOT_SEGMENT"
unsigned char WriteFlashByte(MyAddressType flashAddr, unsigned char data)@"BOOT_SEGMENT";

При вызове этой функции возникает ошибка:
Код
Error[e133]: The output format intel-extended cannot handle multiple address spaces. Use format variants (-y -O) to specify which address space is  wanted

Что я сделал не так? Вообще-то, мне необходимо разместить функции так, чтобы не они не "попали" в самый верхний килобайт памяти (загрузчик).
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 16 2008, 21:15
Сообщение #77


Гуру
******

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



Я думаю, ему не понравилось FARCODE. Поаробуйте просто CODE, у вашего кристалла всего 32К флеша, там никакой FAR не нужен.


--------------------
На любой вопрос даю любой ответ
"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
alux
сообщение Jan 17 2008, 06:14
Сообщение #78


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(Сергей Борщ @ Jan 17 2008, 01:15) *
Я думаю, ему не понравилось FARCODE. Поаробуйте просто CODE, у вашего кристалла всего 32К флеша, там никакой FAR не нужен.

Прошу прощения. Ошибка вышла. Скопировал с апнота... У меня было -Z(CODE)... Так в чем же дело?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 17 2008, 09:27
Сообщение #79


Гуру
******

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



Цитата(alux @ Jan 17 2008, 08:14) *
Прошу прощения. Ошибка вышла. Скопировал с апнота... У меня было -Z(CODE)... Так в чем же дело?
EEPROM не используется? Точнее, не так: Если используется eeprom, то задаются ли ей в программе начальные значения? Если да, то оставьте на вкладке выбора формата отладочный формат для C-SPY, а на вкладке extra options допишите
Код
-Ointel-extended,(CODE)=.hex
-Ointel-extended,(XDATA)=.eep


--------------------
На любой вопрос даю любой ответ
"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
Baser
сообщение Jan 17 2008, 09:41
Сообщение #80


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Сразу возник вопрос: вы это пытаетесь добавлять в проект с бутлоадером или в проект с прикладной программой?
Я попробовал на проекте на мега128 с бутлоадером. При добавлении в прикладную программу след. строк все линкуется без ошибок.
Код
*.xcl файл:
-D_..X_APPFLASH_END=1DFFF    /* End of Applications flash memory */
-D_..X_BOOTLOADER_BASE=1F000 /* Start of BootLoader flash memory */
-Z(CODE)BOOTCODE=_..X_BOOTLOADER_BASE-_..X_FLASH_END
-Z(CODE)BOOT_SEGMENT=1E000-(_..X_BOOTLOADER_BASE-1)
*.c файл:
__root unsigned char WriteFlashByte(unsigned int flashAddr, unsigned char data)@"BOOT_SEGMENT";

Правда, обратите внимание, что я разделил сегменты, куда прилинковывается бутлоадер из другого проекта и сегмент с вашей функцией.

А такую ошибку я тоже уже видел:
Цитата(alux @ Jan 16 2008, 22:08) *
Error[e133]: The output format intel-extended cannot handle multiple address spaces. Use format variants (-y -O) to specify which address space is wanted

Но возникает она, если пытаться вывести в hex файл одновременно и CODE и DATA (или EEPROM).
Go to the top of the page
 
+Quote Post
alux
сообщение Jan 17 2008, 13:51
Сообщение #81


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(Сергей Борщ @ Jan 17 2008, 13:27) *
Код
-Ointel-extended,(CODE)=.hex
-Ointel-extended,(XDATA)=.eep

Цитата(Baser @ Jan 17 2008, 13:41) *
Сразу возник вопрос: вы это пытаетесь добавлять в проект с бутлоадером или в проект с прикладной программой?Я попробовал на проекте на мега128 с бутлоадером. При добавлении в прикладную программу след. строк все линкуется без ошибок.

Еще раз повторюсь. Есть многофайловый проект на Мега324 (без бутлодера). Бутлодер создан отдельным проектом. В контроллер уже прошит загрузчик в последний килобайт флеша. Хочу использовать функции из avr106 для записи во флеш. В частности в неиспользованную область NRWW (до начала загрузчика). В области NRWW необходимо разместить только функции записи во флеш. Я в курсе, что такое сообщение возникает при попытке скомпилить с данными в ЕЕПРОМе. И эти опции тоже использую, если надо. Но в тот момент ЕЕПРОМ не использовал. Это сообщение возникает при ВЫЗОВЕ WriteFlashByte(); Если не вызывать данную функцию, линкуется без ошибок.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 17 2008, 14:11
Сообщение #82


Гуру
******

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



Цитата(alux @ Jan 17 2008, 15:51) *
Если не вызывать данную функцию, линкуется без ошибок.
Тогда приведите кусок вашего .xcl. Вы показываете какой-то другой .xcl, и хотите телепатии. В вашем .xcl в определнии сегмента BOOT_SEGMENT используется _..X_FLASH_END? Если да, чему оно у вас равно?


--------------------
На любой вопрос даю любой ответ
"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
alux
сообщение Jan 17 2008, 14:37
Сообщение #83


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Код
/*                      - lnkm324s.xcl -
*   XLINK command file for the ICCAVR C-compiler using the --cpu=m324, -ms  options.
*   Usage: xlink your_file(s) -f lnkm324s
*   File version: $Revision: 1.1 $
*/

/*=================== CONSTANTS =============================*/
/* Constants used in the ranges down below,  Do not change these lines,  if it is not stated otherwise
*/

/* Code (flash) segments */
-D_..X_INTVEC_SIZE=7C   /* 31 Interrupt vectors * 4 bytes each */
-D_..X_FLASH_TEND=FF    /* End of tiny flash memory */
-D_..X_FLASH_NEND=7FFF  /* End of near flash memory */
-D_..X_FLASH_END=7FFF   /* End of flash memory */

///////////////////////////////////////////////////////////////////////// <- КОД МЕЖДУ СЛЕШАМИ Я ДОБАВИЛ
/* Boot Sector Size */
//-D_..X_BOOTSEC_SIZE=2000  /* 4096 words  */
-D_..X_BOOTSEC_SIZE=1000  /* 2048 words */
//-D_..X_BOOTSEC_SIZE=800  /* 1024 words */
//-D_..X_BOOTSEC_SIZE=400  /*  512 words */
//-D_..X_BOOTSEC_SIZE=200  /*  256 words */
//-D_..X_BOOTSEC_SIZE=100  /*  128 words */

-Z(CODE)BOOT_SEGMENT=(_..X_FLASH_END-_..X_BOOTSEC_SIZE+1)-_..X_FLASH_END
/////////////////////////////////////////////////////////////////////////
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 17 2008, 15:03
Сообщение #84


Гуру
******

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



Цитата(alux @ Jan 17 2008, 16:37) *
Не вижу криминала... Линкеру точно этот файл подсовывается? А поставьте формат выходного файла "Отладочный для C-SPY" и включите генерацию .map. В его шапке увидите командную строку линкера и в самом конце будет таблица распределения по сегментам - возможно, что-то прояснится.


--------------------
На любой вопрос даю любой ответ
"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
alux
сообщение Jan 17 2008, 15:37
Сообщение #85


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Откровенно говоря у меня нет острой необходимости использование именно флеш в качестве ЕЕПРОМ. Да и времени нет для экспериментов. Решил просто использовать внутренний ЕЕПРОМ для данной разработки. По старинке smile.gif Просто хотел освоить новый (для меня) способ записи. С первого раза не пошло... Если есть еще предположения, пишите.
Go to the top of the page
 
+Quote Post
Baser
сообщение Jan 17 2008, 16:57
Сообщение #86


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(alux @ Jan 17 2008, 15:51) *
Еще раз повторюсь. Есть многофайловый проект на Мега324 (без бутлодера). Бутлодер создан отдельным проектом. В контроллер уже прошит загрузчик в последний килобайт флеша. Хочу использовать функции из avr106 для записи во флеш. В частности в неиспользованную область NRWW (до начала загрузчика). В области NRWW необходимо разместить только функции записи во флеш.

Еще раз проверьте все, что вы делаете. Если именно так как написано, то это линкуется без ошибок. Проверил smile.gif Если есть сомнения, посмотрите прикрепленные файлы.

Цитата
Я в курсе, что такое сообщение возникает при попытке скомпилить с данными в ЕЕПРОМе. И эти опции тоже использую, если надо. Но в тот момент ЕЕПРОМ не использовал. Это сообщение возникает при ВЫЗОВЕ WriteFlashByte(); Если не вызывать данную функцию, линкуется без ошибок.

Это просто наложение ошибок. На вызов функции такое сообщение выдаваться не может.
Прикрепленные файлы
Прикрепленный файл  Test.zip ( 9.25 килобайт ) Кол-во скачиваний: 59
 
Go to the top of the page
 
+Quote Post
arttab
сообщение Jan 18 2008, 02:02
Сообщение #87


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

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



я поимел большие проблемы в установлении причины почему не получается самопрограммирование из-за неверных фузов размера загрузчика. проверьте на всякий случай


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
alux
сообщение Jan 18 2008, 11:16
Сообщение #88


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(arttab @ Jan 18 2008, 06:02) *
я поимел большие проблемы в установлении причины почему не получается самопрограммирование из-за неверных фузов размера загрузчика. проверьте на всякий случай

При чем в данном случае фузы? Речь идет об ошибке на этапе линковки программы.

To Baser
Не совсем понимаю для чего необходимо создавать хексы для DATA и EEPROM?
Код
-y(CODE)
-Ointel-extended,(DATA)=_data.hex
-Ointel-extended,(XDATA)=_eeprom.hex

Обязательно ли все функции размещать в "BOOT_SEGMENT" ? По-моему, достаточно разместить только те функции, которые непосредственно работают с SPM инструкцией. Так? Или также и функции, в которые входят эти функции (SPM) ? И зачем объявлять их как extern? Без модификатора extern все компилится без ошибок. И последнее, для чего root?
Go to the top of the page
 
+Quote Post
Baser
сообщение Jan 18 2008, 16:29
Сообщение #89


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(alux @ Jan 18 2008, 13:16) *
To Baser
Не совсем понимаю для чего необходимо создавать хексы для DATA и EEPROM?

Про это вам, вообщем-то, Сергей Борщ говорил smile.gif и относилось это к возникающей у вас ошибке линкера, которая могла быть следствием попытки вывести в Intel-hex файл одновременно два адресных пространства: CODE и EEPROM. А для чего получать два файла с хексами для DATA и EEPROM - чтобы затем прошить их в МК smile.gif

Цитата
Обязательно ли все функции размещать в "BOOT_SEGMENT" ? По-моему, достаточно разместить только те функции, которые непосредственно работают с SPM инструкцией. Так? Или также и функции, в которые входят эти функции (SPM) ?

Да, конечно, можно размещать только функции с SPM. Но это только в том случае, если вы все эти функции компилируете и пишете в МК вместе (а не отдельно функции с SPM в проекте бутлоадера, а другие функции в прикладной программе), иначе вам необходимо обеспечить нахождение точек вызова функций по абсолютным адресам.

Цитата
И зачем объявлять их как extern? Без модификатора extern все компилится без ошибок.

В случае описания внешних функций спецификатор extern является спецификатором по умолчанию и его допускается не писать (как мы не пишем auto при определении локальных auto-переменных). Но я привык всегда явно указывать extern, считаю, что это наглядней.

Цитата
И последнее, для чего root?

__root служит для указания линкеру, что данная функция или переменная должна быть безусловно включена в код, даже если она нигде не используется. Поскольку пример был тестовый, я везде добавил __root , чтобы линкер не своевольничал smile.gif

з.ы. А как вы отлаживаете прикладную программу, с кодами бутлоадера или без них? Интересен опыт других людей, поскольку с этим вопросом сам недавно разбирался.
Go to the top of the page
 
+Quote Post
Breese
сообщение Jan 20 2008, 18:02
Сообщение #90





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



Возникла такая проблема - не работает АЕS бутлоадер для ATmega64. Стал упрощать код, еще и еще, пока не дошел просто до пустой функции main(void) - он в функцию входит но из нее не выходит и висит - что это может быть? maniac.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th July 2025 - 17:36
Рейтинг@Mail.ru


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