Доброго всем
Помогите, пожалуйста, разобраться есть функция, которая должна выводить символ не дисплей по заданным координатам
три массива со шрифтами.
пока все массивы хранились в ОЗУ все работало только ОЗУ заполнялось на 127% (ну некоторые строки приходилось убирать, чтоб было хотя бы 99%)
решил перенести всё в память программ и встал уже 2 недели не могу вывести символ
оставил все по минимуму один массив размер шрифта выводит правильно рисует квадратик а заполняет его всякими кракозябрами причем одинаковыми для любого символа
вот часть кода массив определен в отдельном файле там всё верно первые 3 значения это размеры и количество байт на символ
Вопросы:
1. Закоментированное слово eeprom если раскоментировать, получится, что компилятору будет сообщено, что данные переменные хранятся в eeprom?
2. При обращении к ним будет разница с использованием функций доступа к eeprom из gcc libc? Конечный способ доступа будет тот же самый ведь?
3DRaven писал(а):Вопросы:
1. Закоментированное слово eeprom если раскоментировать, получится, что компилятору будет сообщено, что данные переменные хранятся в eeprom?
2. При обращении к ним будет разница с использованием функций доступа к eeprom из gcc libc? Конечный способ доступа будет тот же самый ведь?
Спасибо. Я действительно уже нашел. Есть вопрос.
Там watchdog timer используется у меня.
При работе с eeprom говорят надо его обнулять пока ждешь готовности памяти,
иначе МК сброситься может.
Так вот при доступе с помощью функций или как в CVAVR с помощью
типа переменной - это делается?
Прошу помощи по следующим вопросам:
- как в WINAVR подключить (объявить) внешнюю память МК?
- как в WINAVR объявить размещение конкретных данных (массива) во внешней памяти?
AI_Disable писал(а): Даю подсказку: Flash, SRAM или EEPROM? Как подключена?
Ув. AI_Disable мне не подсказки нужны, а решение как включить в компиляторе опцию работы с внешней памятью данных (конкретно для Меги128 для RAM свыше 4к) и разместить переменную там же.
К примеру на ICC по первому вопросу (как включить обращение к внешней RAM) нужно было тупо указать в оболочке размер сектора XDATA.
а для размещения конкретной переменной указать директиву xdata перед ней.
Как это сделать в WINAVR?
P.S.
объявление в опциях проекта параметров памяти: Memory Type = Sram, Name = .data, Address = 0x800000
и при объявлении переменных
volatile UCHAR Buf[257] __attribute__ ((section (".data")));
не помогает
сегмент Data: 2162 bytes (52.8% Full) - не меняется, в смысле не уменьшает % ее использования
P.P.S.
уточняю, вообще-то Address = 0x800000 "убивает" прогу, это я погорячился,
работает Address = 0x10000
доброго времени суток)нужна помощь по pgmspace.h,а то скоро разобью голову об стол(((
итак: есть массив в отдельном файле font1.h
const uint8_t sym[256][8] PROGMEM =
{
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x7E,0x81,0xA5,0x81,0xBD,0x99,0x81,0x7E},бла бла бла...
соответственно пытаюсь из него выдергивать значения...
temp4=PGM_READ_BYTE (&sym
[temp3]);
соотвнтственно есть инклуде #include "font1.h" что еще ему нужно!!!?)))спасите хелп!!!постоянно говорит
undefined reference to `PGM_READ_BYTE'
Задача:
- разместить в XRAM несколько длинных массивов, оставив все остальное во внутренней RAM Mega128A
(во внутренней памяти программа работает, но массивы укорочены).
2)
Увеличиваю размерность одного массива до нужного (в *.h как extern естественно тоже), остальное без изменений.
volatile UCHAR BufAdc1[1281] __attribute__ ((section (".xdata")));
Размещение:
.xdata 0x00802000 0x965 variables.o
0x00802000 BufAdc1
0x00802501 BufAdc2
0x00802733 BufAdc3
Не работает, точнее слетает связь по UART!
Смотрю по map - все остальные переменные находятся на своих местах, т.е. не менялись...
Эти массивы в работе UART при ответах естественно не участвуют.
Портится глобальный флаг готовности буфера приема UART объявленный как
volatile uint8_t fCmdComplite = 0;
прерывание его выставляет = "1", но где то он портится в "0" и в main() он уже "0"...
- свои "сбросы" этого флага убрал...
- его положение сместил в .bss (0x00800248 fCmdComplite)
не помогает... т.е. похоже, что дело не в наезде памяти... (оптимизация Os)
...Похоже это косяки WinAVR, при оптимизации -О2 удалось "довести" массивы до 768 единиц!
Но ряд глюков остался (не читаются отдельные переменные по запросам UART),
т.е. "портятся" другие места, точнее код оптимизируеся неправильно и программа становится нестабильной...
Но так быть не должно! Шаманство какое-то!!!
В чем может быть косяк?
Кто нибудь знает как с ним бороться?
Очень прошу пнуть в нужном направлении, можно сильно!