Страница 1 из 1
не хватает памяти данных в авр... что делать?
Добавлено: Пн июл 30, 2007 21:25:39
Mozart
ситуёвина такая... "изучаю" графический цветной дисплей (может потом пришлю статью)... на процесоре seps525 на каждый пиксел по 2 байта, т.е. чтобы вывести картинку хотя бы 60х66 нужно 7920 байт а память данных в at90can128 всего навсего 4кБайта при компиляции в WinAVR пишет что... хреново в общем памяти не хватает...
можно ли данные хранить в памяти программы? и как это сделать в си?
eeprom и внешняя памяти не подходят...
Добавлено: Пн июл 30, 2007 23:16:18
Mr.Moss
если тебе нужно хранить изначально заданные данные то
можно в программной памяти создать массив и читать его побайтно.
Добавлено: Пн июл 30, 2007 23:19:33
Mr.Moss
а вобщем можно темже способом и изменять данные в массиве.
Добавлено: Пн июл 30, 2007 23:26:48
Mozart
хорошо что могу... вопрос как??? если гнушный компилятор... весь массив, созданный мною или не мною, относит к памяти данных... как сказать ему - компилятору? или как скомпилировать так чтобы этот массив был записан в память программы?
Добавлено: Пн июл 30, 2007 23:43:51
Mr.Moss
не знаю как это зделать СИ, в ассемблере это так.
есть такая деректива DW которая резервирует в EEPROM или в програмноя памяти неоходимое количество байт.
Добавлено: Вт июл 31, 2007 08:23:18
Пожиратель AVR
У меня тоже проблема нехватает всего навсего 380 байт памети незнаю откуда их взять ладно можно было невывисти 190 пикселей изображения но оперы тоже нехватает 121 байт
Добавлено: Вт июл 31, 2007 08:47:36
Aheir
вроде как достаточно перед обявлением переменной добавить слово __flash, вот так, например:
Код: Выделить всё
__flash unsigned char RusFont5n4 [6][4] =
{
{0x3E,0x04,0x08,0x3E}, // -> И
{0x20,0x3E,0x0A,0x06}, // -> Ъ
{0x3E,0x02,0x3E,0x03}, // -> Ц
{0x3E,0x08,0x04,0x3E}, // -> N
{0x1C,0x22,0x2A,0x0C}, // -> G
{0x3C,0x02,0x02,0x3C} // -> U
};
Добавлено: Вт июл 31, 2007 09:26:08
Mozart
Код: Выделить всё
_flash unsigned char RusFont5n4 [6][4] =
{
{0x3E,0x04,0x08,0x3E}, // -> И
{0x20,0x3E,0x0A,0x06}, // -> Ъ
{0x3E,0x02,0x3E,0x03}, // -> Ц
{0x3E,0x08,0x04,0x3E}, // -> N
{0x1C,0x22,0x2A,0x0C}, // -> G
{0x3C,0x02,0x02,0x3C} // -> U
};
а так пишут в каком компиляторе?? WinAVR это не съел
Добавлено: Вт июл 31, 2007 10:31:51
Aheir
Там перед flash два подчеркивания: __flash
СVAVR кушает
Или попробуйте просто flash, без подчеркиваний.
Вообще, в хелпе к компилятору д.б. написано, проверьте меня на всякий случай..
Если в WinAVR есть функция выделения цветом служебных слов С - включите, сразу будет видно, нравится оно ему или не очень..
Да и код почитабельней смотрится.
Добавлено: Вт июл 31, 2007 10:57:29
Mozart
не, есму слово флэш не нравится... ему нравится PROGMEM
unsigned char a[] PROGMEM = {...};
но всё равно что-то не очень-то и работает.... статья есть на
http://www.avrfreaks.net/index.php?name ... ic&t=38003
Добавлено: Вт июл 31, 2007 11:39:15
Aheir
а в чем "не работа" проявляется?
Добавлено: Вт июл 31, 2007 11:46:53
Mozart
авр студио говорит что данные размещаются в SRAM, при обращении к массиву данных, извлекается не то что надо...
Код: Выделить всё
unsigned char a[] PROGMEM = {очень много чисел};
void DrawPicture(...unsigned char *Pixels){
SetDDRAM();
for (uint16_t i = 0; i < SizeFram; i += 2) {
WriteData(*(Pixels + i), *(Pixels + i + 1));
}
}
вот кусок кода, но не весь... просто оставил то что передаю...
Добавлено: Вт июл 31, 2007 12:53:36
Mozart
в общем есть функции
вот при помощи неё и надо читать из флэша...
Добавлено: Вт июл 31, 2007 23:26:19
Mozart
оказывается всё не просто так... нарисовал уточку размером 66х60 красиво получилось... но нужно картинку выводить 160х128 картинка получается около 37,5 кбайт.... просто так массив такого размера оказывается не просто так разместить... скоро будут первые картинки... я обещаю...
Добавлено: Пт авг 03, 2007 08:47:50
Mozart
как и обещал картинки я выкладываю...
Добавлено: Вт авг 07, 2007 22:55:39
Tohey
Не в тему:
А что за LCD? Где такой используют? Сколько стоит? Где почитать про него можно?
Добавлено: Вт авг 07, 2007 23:00:20
Mozart
на процике seps525 а называется... UG-6028... стоит рублей 600 700 есть кажется в ктц-мк...
Добавлено: Чт авг 09, 2007 04:27:05
Mamonth
Я совсем забыл... но видел в интернете проект по использованию внешней памяти (ОЗУ) на основе модулей от оперативки компьютера... Может подойдет проект называется Monster Memory
Re: не хватает памяти данных в авр... что делать?
Добавлено: Ср авг 29, 2007 04:16:41
Romanich
Mozart писал(а):ситуёвина такая... "изучаю" графический цветной дисплей (может потом пришлю статью)... на процесоре seps525 на каждый пиксел по 2 байта, т.е. чтобы вывести картинку хотя бы 60х66 нужно 7920 байт а память данных в at90can128 всего навсего 4кБайта при компиляции в WinAVR пишет что... хреново в общем памяти не хватает...
можно ли данные хранить в памяти программы? и как это сделать в си?
eeprom и внешняя памяти не подходят...
для видеобуфера нужна внешняя SRAM (62256 например - 32кб)
далее настроить контроллер внешней памяти и пользовать!
а в менеджере проекта указать что использ. внешняя память