Перейти к содержанию
    

Сегменты памяти

Всем привет!

Изучаю код бутлоадера для 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, но пока не понимаю, что и как надо там изменить:(

 

-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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

У Вас не хватает места в этом сегменте.

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

Тогда сегмент налезет на другие сегменты, придется и их двигать.

Так что лучше начните с того, что нарисуйте на бумажке распределение памяти, тогда и придет озарение.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У Вас не хватает места в этом сегменте.

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

Тогда сегмент налезет на другие сегменты, придется и их двигать.

Так что лучше начните с того, что нарисуйте на бумажке распределение памяти, тогда и придет озарение.

 

 

Спасибо за ответ.

Пробовал менять диапазон, но результата нет, а в документации 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?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...