Перейти к содержанию
    

Ошибка e16 Помогите!

Помогите пожалуйста разобраться, в чем ошибка. Добавил в проект менюшку, вылезла ошибка. Как с этим бороться?((((

Как я понимаю, не хватает памяти ОЗУ для глобальных переменных. Что мне делать?(((

 

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"

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вам нехватает ОЗУ, поэтому у вас два пути:

- хороший путь - оптимизировать программу

- костыль - уменьшить размер стека в настройках проекта - результат непредсказуемый :)

ЗЫ Очевидно у вас строки хранятся в ОЗУ так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как я понимаю, не хватает памяти ОЗУ для глобальных переменных. Что мне делать?(((
Понимаете почти правильно. Не хватает ОЗУ. В нем располагаются глобальные переменные, стеки и куча (heap). Что делать? Оптимизируйте программу. Смотрите, сколько отведено на стек, смотрите, сколько глобальных преременных. Возможно у вас выводимые на экран строки хранятся в ОЗУ.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

УРА!!! Поборол проблему. Все, видимо, оказалось в процедуре вывода строк на экран ЖКИ.

 

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

 

__flash char *SOFTREV =

{

"Soft rev. - 1.00 ",

};

 

 

void DrawString(char *str)

{

for(char i=0;i<18;i++)

{

DrawSymbol(str);

}

}

 

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

 

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:

Изменено пользователем #Kirill

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...