Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сегменты памяти
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Charoit
Всем привет!
Изучаю код бутлоадера для 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


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

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

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

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