Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: не получается объявить сегменты
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Василий Зыков
Пишу в файл линковки:
-Z(CODE)INTVEC,NEAR_F,INITTAB,TINY_ID,NEAR_ID,SWITCH,CODE=0000-1FFE /* Correct */
-Z(CODE)CHECKSUM=1FFF-1FFF /* In this example a two byte checksum */

-Z(DATA)TINY_I,TINY_Z=60-FF
-Z(DATA)NEAR_I,NEAR_Z=60-25F
-Z(DATA)CSTACK=60-25F
-Z(DATA)RSTACK#25F

Линкер выдает следующие ошибки:
Error[e16]: Segment TINY_I (size: 0xb align: 0) is too long for segment definition. At least 0xb more bytes needed.

и т.д... для каждого сегмента, расположенного в RAM. Rак будто бы линкер не понимает, что TINY_I лежит в ОЗУ, а не в ПЗУ...

В чем я могу ошибаться, или что я не делаю, что нужно делать?
Сергей Борщ
Цитата(Василий Зыков @ Mar 20 2007, 14:10) *
Rак будто бы линкер не понимает, что TINY_I лежит в ОЗУ, а не в ПЗУ...
Почему же? Он просто пишет что памяти не хватило. Покажите весь файл .xcl и убедитесь, что у вас в настройках проекта снята галочка configure system using dialogs (not in .xcl file)
Василий Зыков
Цитата(Сергей Борщ @ Mar 20 2007, 18:53) *
Почему же? Он просто пишет что памяти не хватило. Покажите весь файл .xcl и убедитесь, что у вас в настройках проекта снята галочка configure system using dialogs (not in .xcl file)


Сергей, галочка установлена!
Нашел вот такую ссылочку, объясняющую, почему надо снять эту галочку.
Завтра попробую все это сделать.
Спасибо за совет! smile.gif
Freeze Anti
У меня та же ошибка. Галочку и устанавливал и снимал - все едино. Вот мой файл линковки.

Код
-! Определение сегментов для ATmega103 -!

-! Определяем семейство процессоров -!

-ca90



-Fintel-extended
-! -Y0 -!
-xms

-l _release\code.map
-Ic:\creator\avriarew22\A90\LIB\

-! Хотя стек возвратов и расположен в ISRAM мы используем эту -!
-! директиву для разрешения доступа ESRAM с ожиданием -!
-e?RSTACK_IN_EXTERNAL_RAM=?C_STARTUP

-! Адресное пространство памяти программ -!
-Z(CODE)INTVEC=0-FF
-Z(CODE)RCODE,CDATA0,CDATA1,CCSTR,SWITCH,FLASH,CODE=100-1FFFF

-! Адресное пространство данных (internal EEPROM) -!
-! Регистры общего назначения: 0-1F -!
-! Пространство адресов портов ввода/вывода: 20-5F -!
-Z(DATA)IDATA0,UDATA0=60-FF
-Z(DATA)RSTACK+100=100-1FF
-Z(DATA)CSTACK+200=200-3FF
-Z(DATA)UDATA1=400-0FFF
-Z(DATA)IDATA1,ECSTR=1000-7FFF

-! Адресное пространство данных (external EEPROM) -!
-Z(DATA)NO_INIT=8000-8FFF

-! Адресное пространство данных (external PROM) -!
-Z(DATA)CSTR,CONST=9000-FFFF

-e_small_write=_formatted_write
-e_small_write_P=_formatted_write_P

-e_small_read=_formatted_read
-e_small_read_P=_formatted_read_P

-! Suppress one warning which is not relevant for this processor -!
-w29

-!  Now load the 'C' library -!

-C cl3s
Сергей Борщ
Цитата(Freeze Anti @ May 4 2008, 15:09) *
У меня та же ошибка.
Линкер английским по белому пишет - программа не влезает в память. Универсального рецепта исправления этой ошибки нет и быть не может. Если ругается на сегменты ОЗУ - уменьшайте количество глобальных переменных, уменьшайте размер стека до необходимого. Если на сегменты во флеш - оптимизируйте программу, включайте более высокий уровень оптимизации, в крайнем случае - переписывайте какие-то куски на ассемблере или уменьшайте функциональность устройства.
Freeze Anti
Разобрался... как раз изменив файл линкера... там оказалось нужно обязательно TINY_I, TINY_Z и TINY_N прописывать по отдельности... на все в сумме вроде места хватает, а почему-то непосредственно для TINY_I - нет...
Сергей Борщ
Цитата(Freeze Anti @ May 5 2008, 12:03) *
на все в сумме вроде места хватает, а почему-то непосредственно для TINY_I - нет...
Какие-то чудеса вы рассказываете. Не верю. Попробуйте в старом файле указать размер ОЗУ больше, чем его на самом деле, слинкуйте и посмотрите, сколько места заняли эти сегменты, в каких адресах, и что в них попало. Ищите разницу с вашим теперешним вариантом. Наверняка найдете что-нибудь интересное. На всякий случай: сегменты TINY_... в рабочей программе должны располагаться до адреса 0x100 - при косвенном доступе к ним старший байт адресной пары обнулен.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.