satory2600 0 14 декабря, 2010 Опубликовано 14 декабря, 2010 · Жалоба Помогите пожалуйста разобраться, в чем ошибка. Добавил в проект менюшку, вылезла ошибка. Как с этим бороться?(((( Как я понимаю, не хватает памяти ОЗУ для глобальных переменных. Что мне делать?((( 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 0 14 декабря, 2010 Опубликовано 14 декабря, 2010 · Жалоба Вам нехватает ОЗУ, поэтому у вас два пути: - хороший путь - оптимизировать программу - костыль - уменьшить размер стека в настройках проекта - результат непредсказуемый :) ЗЫ Очевидно у вас строки хранятся в ОЗУ так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 14 декабря, 2010 Опубликовано 14 декабря, 2010 · Жалоба Как я понимаю, не хватает памяти ОЗУ для глобальных переменных. Что мне делать?(((Понимаете почти правильно. Не хватает ОЗУ. В нем располагаются глобальные переменные, стеки и куча (heap). Что делать? Оптимизируйте программу. Смотрите, сколько отведено на стек, смотрите, сколько глобальных преременных. Возможно у вас выводимые на экран строки хранятся в ОЗУ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
satory2600 0 14 декабря, 2010 Опубликовано 14 декабря, 2010 · Жалоба Все строки я объявляю через дерективу __flash char * Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
satory2600 0 14 декабря, 2010 Опубликовано 14 декабря, 2010 (изменено) · Жалоба УРА!!! Поборол проблему. Все, видимо, оказалось в процедуре вывода строк на экран ЖКИ. Раньше она выглядела так: __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]- го элемента массива. Ошибка исчезла. Компилируется нормально. Всем спасибо!!! Изменено 14 декабря, 2010 пользователем #Kirill Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться