Charoit 0 18 марта, 2014 Опубликовано 18 марта, 2014 (изменено) · Жалоба Всем привет! Изучаю код бутлоадера для 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 Подскажите пжлста, в чем проблема.. Изменено 18 марта, 2014 пользователем Charoit Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DogPawlowa 0 18 марта, 2014 Опубликовано 18 марта, 2014 · Жалоба Открыл файл xcl, но пока не понимаю, что и как надо там изменить:( У Вас не хватает места в этом сегменте. Или уменьшите то, что Вы собираетесь туда впихнуть, или расширьте диапазон. Верхняя граница определяется физическим размером памяти, значит уменьшите нижнюю. Тогда сегмент налезет на другие сегменты, придется и их двигать. Так что лучше начните с того, что нарисуйте на бумажке распределение памяти, тогда и придет озарение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Charoit 0 19 марта, 2014 Опубликовано 19 марта, 2014 · Жалоба У Вас не хватает места в этом сегменте. Или уменьшите то, что Вы собираетесь туда впихнуть, или расширьте диапазон. Верхняя граница определяется физическим размером памяти, значит уменьшите нижнюю. Тогда сегмент налезет на другие сегменты, придется и их двигать. Так что лучше начните с того, что нарисуйте на бумажке распределение памяти, тогда и придет озарение. Спасибо за ответ. Пробовал менять диапазон, но результата нет, а в документации 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? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться