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

 
 
> Сегменты памяти
Charoit
сообщение Mar 18 2014, 11:01
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 10-10-07
Пользователь №: 31 217



Всем привет!
Изучаю код бутлоадера для XMega32A4AU, взял атмеловский пример для IAR.

Линковщик выдает вот такую ошибку :

Цитата
Error[e16]: Segment NEAR_ID (size: 0x98 align: 0x1) is too long for segment definition. At least 0x30 more bytes needed. The problem occurred while processing the segment placement command "-Z(CODE)NEAR_ID=81FC-_..X_CODE_END", where at the moment of placement the available memory ranges were "CODE:8f98-8fff"
Reserved ranges relevant to this placement:
CODE:81fc-81fd STARTBOOT
CODE:81fe-8f8b CODE
CODE:8f8c-8f97 INITTAB
CODE:8f98-8fff NEAR_ID


Открыл файл xcl, но пока не понимаю, что и как надо там изменитьsad.gif

Код
-D_..X_FLASH_BASE=8002
-D_..X_CODE_END=8FFF
-D_..X_INTVEC_END=81FB


//////////////////////////////////////////////////////////////////////////////
// Code (flash) segments


-Z(CODE)INTVEC=81F4-81FF
-P(CODE)BOOT=_..X_FLASH_BASE-_..X_CODE_END
-P(CODE)CODE=_..X_FLASH_BASE-_..X_CODE_END
-P(CODE)FARCODE=_..X_FLASH_BASE-_..X_CODE_END
-Z(CODE)INITTAB=81FC-_..X_CODE_END
-Z(CODE)NEAR_ID=81FC-_..X_CODE_END


Подскажите пжлста, в чем проблема..

Сообщение отредактировал Charoit - Mar 18 2014, 11:02
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
Dog Pawlowa
сообщение Mar 18 2014, 11:54
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Charoit @ Mar 18 2014, 14:01) *
Открыл файл xcl, но пока не понимаю, что и как надо там изменитьsad.gif

У Вас не хватает места в этом сегменте.
Или уменьшите то, что Вы собираетесь туда впихнуть, или расширьте диапазон. Верхняя граница определяется физическим размером памяти, значит уменьшите нижнюю.
Тогда сегмент налезет на другие сегменты, придется и их двигать.
Так что лучше начните с того, что нарисуйте на бумажке распределение памяти, тогда и придет озарение.



--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Charoit
сообщение Mar 19 2014, 10:12
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 10-10-07
Пользователь №: 31 217



Цитата(Dog Pawlowa @ Mar 18 2014, 15:54) *
У Вас не хватает места в этом сегменте.
Или уменьшите то, что Вы собираетесь туда впихнуть, или расширьте диапазон. Верхняя граница определяется физическим размером памяти, значит уменьшите нижнюю.
Тогда сегмент налезет на другие сегменты, придется и их двигать.
Так что лучше начните с того, что нарисуйте на бумажке распределение памяти, тогда и придет озарение.



Спасибо за ответ.
Пробовал менять диапазон, но результата нет, а в документации IAR'а не все понятно.

Я правильно понимаю, что :

1) Верхняя граница, которая определяется физ.размером памяти, в данном случае : -D_..X_CODE_END=8FFF ?

2)
Код
    -P(CODE)BOOT=_..X_FLASH_BASE-_..X_CODE_END
    -P(CODE)CODE=_..X_FLASH_BASE-_..X_CODE_END
    -P(CODE)FARCODE=_..X_FLASH_BASE-_..X_CODE_END


Эти строки означают, что определены сегменты BOOT, CODE и FARCODE и располагаются они во флэш, а директива -P означает что части сегмента могут быть размещены не непрерывно, а с
разрывами? Эти сегменты могут быть расположены в любой части секции Бутлоадера, т.к. указано _..X_FLASH_BASE-_..X_CODE_END?


Еще непонятно с сегментом INTVEC : он описан как -Z(CODE)INTVEC=81F4-81FF, при этом выше есть строка : -D_..X_INTVEC_END=81FB, что означает верхнюю границу сегмента. Но почему это значение меньше 81FF?

Go to the top of the page
 
+Quote Post

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

 


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


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