Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Комипилятор IAR 4.02A... Нехватает Стека.....
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Potter
Конроллер мега 64... Надо сохранить (в памяти) большое количество данных.... Сохраняю во флеше в виде массивов..... И выскакивает следующая ошибка:


Error[e16]: Segment CSTACK (size: 0x200 align: 0) is too long for segment definition. At least 0x71 more bytes needed. The problem occurred while
processing the segment placement command "-Z(DATA)CSTACK+_..X_CSTACK_SIZE=_..X_SRAM_BASE-_..X_SRAM_END", where at the moment of
placement the available memory ranges were "DATA:f71-10ff"
Reserved ranges relevant to this placement:
DATA:100-d18 NEAR_I
DATA:d19-f30 NEAR_Z
DATA:f31-f70 RSTACK
DATA:f71-10ff CSTACK

Я так понимаю что это не хватает стека.... Поправте если это не так.... Знаю что б устранить эту ошибку надо где-то в настройках проэкта что-то изменить.... Подскажите что и где надо изменить.... Работаю в компиляторе IAR 4.02A....

Зарание спасибо за ответы....
IgorKossak
Это вовсе не значит, что именно стека не хватает.
Просто сегменты стека находятся в конце адресного пространства ОЗУ и предыдущие сегменты их выталкивают.
Уменьшить размеры стеков можно, но делать это надо осторожно либо в настройках проекта (General options - System) либо правив константы (CSTACK_SIZE RSTACK_SIZE если используете *.xcl файл).
slog
По моему это значит что не хватает памяти для стека, который ты хочешь. Уменьши 0х200 на 0х71 и ошибка исчезнет.
Potter
Цитата(slog @ Nov 3 2006, 19:31) *
По моему это значит что не хватает памяти для стека, который ты хочешь. Уменьши 0х200 на 0х71 и ошибка исчезнет.


Интересно.... Вот я сохраняю все во флеше.... Но сохраняю в виде массивов.... Тоесть в таком виде к примеру:

unsigned char I[2] = {1,74};

То есть этот масив как набор переменных.... Получается что при начале работы конроллера он полность все массивы загружает в ОЗУ.... А мне надо впринципе сохранять не переменные а константы... То есть эти данные которые мне надро сохранить не меняются.... Просто я сохраняю в виде массивов что б удобней было с данными работать.... Интересно.. Надо будет посмотреть в книге по Си... Можно ли сохранят Не просто константы... А массивы констант....
IgorKossak
Цитата(Potter @ Nov 4 2006, 15:52) *
Интересно.... Вот я сохраняю все во флеше.... Но сохраняю в виде массивов.... Тоесть в таком виде к примеру:

unsigned char I[2] = {1,74};

Если хотите сохранять во флеш, надо писать
Код
__flash unsigned char I[2] = {1,74};
AVR
Цитата(Potter @ Nov 4 2006, 16:52) *
unsigned char I[2] = {1,74};

При такой записи, кажется, и будет дублирование содержимого массива в ОЗУ, ведь это инициализация массива переменных.
Попробуйте так...:
const unsigned char __flash I[2] = {1,74};
Stefan
Цитата(Potter @ Nov 4 2006, 17:52) *
Цитата(slog @ Nov 3 2006, 19:31) *

По моему это значит что не хватает памяти для стека, который ты хочешь. Уменьши 0х200 на 0х71 и ошибка исчезнет.


Интересно.... Вот я сохраняю все во флеше.... Но сохраняю в виде массивов.... Тоесть в таком виде к примеру:

unsigned char I[2] = {1,74};

То есть этот масив как набор переменных.... Получается что при начале работы конроллера он полность все массивы загружает в ОЗУ.... А мне надо впринципе сохранять не переменные а константы... То есть эти данные которые мне надро сохранить не меняются.... Просто я сохраняю в виде массивов что б удобней было с данными работать.... Интересно.. Надо будет посмотреть в книге по Си... Можно ли сохранят Не просто константы... А массивы констант....




Вот, из работающего проекта:
...
flash unsigned char MFont[Fontsnumber][TableSize] =//Symbols tables
#include "Font.inc" //Fonts for Tablo {FontType][Symbol][Image]
...

файл Font.inc:

// Fonts for monochrome
{
#include "timesnr.fon"
,
#include "arial.fon"
,
#include "ms_sans.fon"
,
#include "tahoma.fon"
,
#include "verdana.fon"
,
#include "couriern.fon"
,
#include "arialslm.fon"
,
#include "timesslm.fon"
}; //font/inc

файл timesnr.fon (фрагмент):

//Times New Roman 16
//
{
//0 Space
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
// 20 !
231,193,39,192,
....
}

Это те самые массивы констант во флэше, что Вам нужны. У меня они занимают около 48К байт (mega128) и ни в какое ОЗУ, ессно, не копируются smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.