Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ошибка e16 Помогите!
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
#Kirill
Помогите пожалуйста разобраться, в чем ошибка. Добавил в проект менюшку, вылезла ошибка. Как с этим бороться?((((
Как я понимаю, не хватает памяти ОЗУ для глобальных переменных. Что мне делать?(((

Error[e16]: Segment NEAR_Z (size: 0x36a align: 0) is too long for segment definition. At least 0x39 more bytes needed. The problem occurred while processing the segment placement command "-Z(DATA)NEAR_I,NEAR_Z=_..X_SRAM_BASE-Error[e16]: Segment NEAR_Z (size: 0x36a align: 0) is too long for segment definition. At least 0x39 more bytes needed. The problem occurred while processing the segment placement command "-Z(DATA)NEAR_I,NEAR_Z=_..X_SRAM_BASE-_..X_SRAM_END,_..X_EXT_SRAM_BASE:+_..X_EXT_SRAM_SIZE", where at the moment of placement the available memory ranges were "DATA:dcf-10ff,DATA:10ff--1"
Stanislav_S
Вам нехватает ОЗУ, поэтому у вас два пути:
- хороший путь - оптимизировать программу
- костыль - уменьшить размер стека в настройках проекта - результат непредсказуемый sm.gif
ЗЫ Очевидно у вас строки хранятся в ОЗУ так?
Сергей Борщ
QUOTE (#Kirill @ Dec 14 2010, 08:04) *
Как я понимаю, не хватает памяти ОЗУ для глобальных переменных. Что мне делать?(((
Понимаете почти правильно. Не хватает ОЗУ. В нем располагаются глобальные переменные, стеки и куча (heap). Что делать? Оптимизируйте программу. Смотрите, сколько отведено на стек, смотрите, сколько глобальных преременных. Возможно у вас выводимые на экран строки хранятся в ОЗУ.
#Kirill
Все строки я объявляю через дерективу __flash char *
#Kirill
УРА!!! Поборол проблему. Все, видимо, оказалось в процедуре вывода строк на экран ЖКИ.

Раньше она выглядела так:

__flash char *SOFTREV =
{
"Soft rev. - 1.00 ",
};


void DrawString(char *str)
{
for(char i=0;i<18;i++)
{
DrawSymbol(str[i]);
}
}

И для вывода строки использовалась:

DrawString(SOFTREV);

Или можно прямо:

DrawString(”1234567890zzzzzzz”);

//------------------------------------------------------------------------------

Я поменял код на:

void DrawString(char __flash *str I)
{
for(char i=0;i<18;i++)
{
char P=*(str+i);
DrawSymbol(P);
}
}

и

void DrawStringC(char *str)
{
for(char i=0;i<18;i++)
{
char P=*(str+i);
DrawSymbol(P);
}
}

И для вызова использую их так:

char str[18]= ”1234567890zzzzzzz”;

__flash char *SOFTREV[18] =
{
"Soft rev. - 1.00 ",
};

DrawString(&SOFTREV[0]);
DrawStringC(str);

Т.е. при передаче параметров в процедуру использую адрес [0]- го элемента массива.

Ошибка исчезла. Компилируется нормально. Всем спасибо!!! biggrin.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.