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

 
 
> Как исправить ошибку.
Oleg_IT
сообщение Oct 9 2006, 05:45
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Перевожу программы из ATMega32 в ATMega128. Компилятор победил, а линковщик даёт ошибку
Error[e16]: Segment TINY_Z (size: 0x16 align: 0) is too long for segment definition. At least 0x16 more bytes needed. The problem occurred while
processing the segment placement command "-Z(DATA)TINY_I,TINY_Z,TINY_N=_..X_SRAM_TBASE:+_..X_SRAM_TSIZE", where at the moment of
placement the available memory ranges were "DATA:0--1"

Не пойму как исправить.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Oleg_IT
сообщение Oct 9 2006, 13:48
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Большие массивы я во __flash помещаю. А как понять, что переменная в области __tiny лежит?
Во заимствованном коде есть
#ifndef USB_BUFFER_SECTION
# define USB_BUFFER_SECTION "TINY_Z" /* if user has not selected a named section */
#endif

Может это мешает? Если да, то как это исправить?
Go to the top of the page
 
+Quote Post
exSSerge
сообщение Oct 9 2006, 20:15
Сообщение #3


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

Группа: Новичок
Сообщений: 136
Регистрация: 18-08-06
Из: Novosibirsk
Пользователь №: 19 655



Цитата(Oleg_IT @ Oct 9 2006, 20:48) *
Большие массивы я во __flash помещаю. А как понять, что переменная в области __tiny лежит?
Во заимствованном коде есть
#ifndef USB_BUFFER_SECTION
# define USB_BUFFER_SECTION "TINY_Z" /* if user has not selected a named section */
#endif

Может это мешает? Если да, то как это исправить?


Очевидно, определить в коде
#define USB_BUFFER_SECTION "NEAR_Z"

или на вкладке compiler options -> Preprocessor.

Судя по виду эта USB_BUFFER_SECTION скорее всего используется в программе примерно так:
#pragma dataseg=USB_BUFFER_SECTION

Только этим дело скорее всего не ограничится, так как есть ещё TINY_N, TINY_I, TINY_HEAP, TINY_ID.
Описаны в EWAVR_CompilerReference.pdf.
А ещё редко какая программа обходится без указателей, они тоже будут разными (размером 1 или 2 байта).

Есть ещё одно решение - попросту убрать из текста все явные указания в каком сегменте размещать переменные, поскольку в случае с Мегой128 сегмента TINY просто нет, вся память будет NEAR и без явного указания, по умолчанию.
Но обьявления указателей и корректную работу с ними (особенно всякие явные и неявные преобразования типов) проверять придётся.

Сообщение отредактировал exSSerge - Oct 9 2006, 20:18
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 30th July 2025 - 18:10
Рейтинг@Mail.ru


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