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

 
 
> не получается объявить сегменты
Василий Зыков
сообщение Mar 20 2007, 15:10
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 11-11-06
Из: Екатеринбург
Пользователь №: 22 191



Пишу в файл линковки:
-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 лежит в ОЗУ, а не в ПЗУ...

В чем я могу ошибаться, или что я не делаю, что нужно делать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
Сергей Борщ
сообщение Mar 20 2007, 16:53
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Василий Зыков
сообщение Mar 20 2007, 18:28
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 11-11-06
Из: Екатеринбург
Пользователь №: 22 191



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


Сергей, галочка установлена!
Нашел вот такую ссылочку, объясняющую, почему надо снять эту галочку.
Завтра попробую все это сделать.
Спасибо за совет! smile.gif
Go to the top of the page
 
+Quote Post
Freeze Anti
сообщение May 4 2008, 12:09
Сообщение #4


Частый гость
**

Группа: Новичок
Сообщений: 153
Регистрация: 29-03-07
Из: Саратов
Пользователь №: 26 613



У меня та же ошибка. Галочку и устанавливал и снимал - все едино. Вот мой файл линковки.

Код
-! Определение сегментов для 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, 12:10


--------------------
!!! All you need is LOVE !!!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 4 2008, 15:30
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Freeze Anti @ May 4 2008, 15:09) *
У меня та же ошибка.
Линкер английским по белому пишет - программа не влезает в память. Универсального рецепта исправления этой ошибки нет и быть не может. Если ругается на сегменты ОЗУ - уменьшайте количество глобальных переменных, уменьшайте размер стека до необходимого. Если на сегменты во флеш - оптимизируйте программу, включайте более высокий уровень оптимизации, в крайнем случае - переписывайте какие-то куски на ассемблере или уменьшайте функциональность устройства.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Freeze Anti
сообщение May 5 2008, 09:03
Сообщение #6


Частый гость
**

Группа: Новичок
Сообщений: 153
Регистрация: 29-03-07
Из: Саратов
Пользователь №: 26 613



Разобрался... как раз изменив файл линкера... там оказалось нужно обязательно TINY_I, TINY_Z и TINY_N прописывать по отдельности... на все в сумме вроде места хватает, а почему-то непосредственно для TINY_I - нет...


--------------------
!!! All you need is LOVE !!!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 5 2008, 09:30
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Freeze Anti @ May 5 2008, 12:03) *
на все в сумме вроде места хватает, а почему-то непосредственно для TINY_I - нет...
Какие-то чудеса вы рассказываете. Не верю. Попробуйте в старом файле указать размер ОЗУ больше, чем его на самом деле, слинкуйте и посмотрите, сколько места заняли эти сегменты, в каких адресах, и что в них попало. Ищите разницу с вашим теперешним вариантом. Наверняка найдете что-нибудь интересное. На всякий случай: сегменты TINY_... в рабочей программе должны располагаться до адреса 0x100 - при косвенном доступе к ним старший байт адресной пары обнулен.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

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

 


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


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