WinAvr в вопросах и ответах
-
TuzRostislav
- Мучитель микросхем
- Сообщения: 455
- Зарегистрирован: Сб фев 14, 2009 05:19:48
- Откуда: Kiev
Re: WinAvr в вопросах и ответах
ps
Прояснилось кое-что. У меня Vista64.
Поставил WinAVR под VMware на XP. Работает без проблем.
Не в курсе, на Vista64 WinAVR реально заставить работать?
ps ps
Проблему решил. DLL надо отсюда скачать.
http://www.madwizard.org/electronics/ar ... inavrvista
Прояснилось кое-что. У меня Vista64.
Поставил WinAVR под VMware на XP. Работает без проблем.
Не в курсе, на Vista64 WinAVR реально заставить работать?
ps ps
Проблему решил. DLL надо отсюда скачать.
http://www.madwizard.org/electronics/ar ... inavrvista
- Реклама
Re: WinAvr в вопросах и ответах
Доброго всем
Помогите, пожалуйста, разобраться есть функция, которая должна выводить символ не дисплей по заданным координатам
три массива со шрифтами.
пока все массивы хранились в ОЗУ все работало только ОЗУ заполнялось на 127% (ну некоторые строки приходилось убирать, чтоб было хотя бы 99%)
решил перенести всё в память программ и встал уже 2 недели не могу вывести символ
оставил все по минимуму один массив размер шрифта выводит правильно рисует квадратик а заполняет его всякими кракозябрами причем одинаковыми для любого символа
вот часть кода массив определен в отдельном файле там всё верно первые 3 значения это размеры и количество байт на символ
код работает правильно вот до этой строчки
pChar=pFont+(nBytes*(c-0x1F))+nBytes-1;
размер символа считывается правильно
Помогите, пожалуйста, разобраться есть функция, которая должна выводить символ не дисплей по заданным координатам
три массива со шрифтами.
пока все массивы хранились в ОЗУ все работало только ОЗУ заполнялось на 127% (ну некоторые строки приходилось убирать, чтоб было хотя бы 99%)
решил перенести всё в память программ и встал уже 2 недели не могу вывести символ
оставил все по минимуму один массив размер шрифта выводит правильно рисует квадратик а заполняет его всякими кракозябрами причем одинаковыми для любого символа
вот часть кода массив определен в отдельном файле там всё верно первые 3 значения это размеры и количество байт на символ
Код: Выделить всё
void Lcd_Put_Char(char c,int x,int y,int fcolor,int bcolor)
{
int i,j;
unsigned int nCols;
unsigned int nRows;
unsigned int nBytes;
unsigned char PixelRow;
unsigned char Mask;
unsigned int Word0;
unsigned int Word1;
unsigned char * pFont;
unsigned char * pChar;
pFont=(unsigned char*) font1;
nCols=pgm_read_byte(pFont);
nRows=pgm_read_byte(pFont+1);
nBytes=pgm_read_byte(pFont+2);
pChar=pFont+(nBytes*(c-0x1F))+nBytes-1;
sendCMD(PASET);
sendData(x);
sendData(x+nRows-1);
sendCMD(CASET);
sendData(y);
sendData(y+nCols-1);
sendCMD(RAMWR);
for (i=nRows-1;i>=0;i--)
{
PixelRow=pgm_read_byte(*pChar--);
Mask=0x80;
for(j=0;j<nCols;j+=2)
{
if ((PixelRow & Mask)==0)
Word0=bcolor;
else
Word0=fcolor;
Mask=Mask>>1;
if ((PixelRow & Mask)==0)
Word1=bcolor;
else
Word1=fcolor;
Mask=Mask>>1;
sendData((Word0>>4) & 0xFF);
sendData(((Word0 & 0xF)<<4)|((Word1>>8) & 0xF));
sendData(Word1 & 0xFF);
}
}
sendCMD(NOP);
}код работает правильно вот до этой строчки
pChar=pFont+(nBytes*(c-0x1F))+nBytes-1;
размер символа считывается правильно
Я НЕ суслик, Я БАРСУК
-
Maximka_18
- Открыл глаза
- Сообщения: 50
- Зарегистрирован: Пт ноя 26, 2010 23:12:18
Re: WinAvr в вопросах и ответах
Помогите скомпилить код, как не делал makefile, выдает ошибку
- Вложения
-
- Desktop.rar
- (1.58 КБ) 216 скачиваний
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: WinAvr в вопросах и ответах
хидер прерывания не понравился.
- Вложения
-
- Desktop.zip
- (16.13 КБ) 217 скачиваний
- Реклама
Re: WinAvr в вопросах и ответах
Здравствуйте. Есть вопрос по avr-gcc...или WinAvr.
В коде нашел строки
Вопросы:
1. Закоментированное слово eeprom если раскоментировать, получится, что компилятору будет сообщено, что данные переменные хранятся в eeprom?
2. При обращении к ним будет разница с использованием функций доступа к eeprom из gcc libc? Конечный способ доступа будет тот же самый ведь?
Заранее спасибо за ответ.
В коде нашел строки
Код: Выделить всё
/*eeprom*/ char eep_my_number[] = {3,1}; //Номер устройства байты наоборот 0,7 соответсвует номеру 0103
/*eeprom*/ char eep_read_result[] = {'0','7'}; // Тип чтения данных - 2 напряжения 5В
/*eeprom*/ char eep_average = 200;
/*eeprom*/ char eep_prescaler = freq/16/19200-1;
Вопросы:
1. Закоментированное слово eeprom если раскоментировать, получится, что компилятору будет сообщено, что данные переменные хранятся в eeprom?
2. При обращении к ним будет разница с использованием функций доступа к eeprom из gcc libc? Конечный способ доступа будет тот же самый ведь?
Заранее спасибо за ответ.
Re: WinAvr в вопросах и ответах
3DRaven писал(а):Вопросы:
1. Закоментированное слово eeprom если раскоментировать, получится, что компилятору будет сообщено, что данные переменные хранятся в eeprom?
2. При обращении к ним будет разница с использованием функций доступа к eeprom из gcc libc? Конечный способ доступа будет тот же самый ведь?
смотри в поиск такие вопросы уже были только в другой теме
viewtopic.php?f=20&t=37981
Я НЕ суслик, Я БАРСУК
Re: WinAvr в вопросах и ответах
Спасибо. Я действительно уже нашел. Есть вопрос.
Там watchdog timer используется у меня.
При работе с eeprom говорят надо его обнулять пока ждешь готовности памяти,
иначе МК сброситься может.
Так вот при доступе с помощью функций или как в CVAVR с помощью
типа переменной - это делается?
Там watchdog timer используется у меня.
При работе с eeprom говорят надо его обнулять пока ждешь готовности памяти,
иначе МК сброситься может.
Так вот при доступе с помощью функций или как в CVAVR с помощью
типа переменной - это делается?
Re: WinAvr в вопросах и ответах
Добрый день, уважаемые форумчане!
Прошу помощи по следующим вопросам:
- как в WINAVR подключить (объявить) внешнюю память МК?
- как в WINAVR объявить размещение конкретных данных (массива) во внешней памяти?
(WINAVR + AVR studio 4.18)
Прошу помощи по следующим вопросам:
- как в WINAVR подключить (объявить) внешнюю память МК?
- как в WINAVR объявить размещение конкретных данных (массива) во внешней памяти?
(WINAVR + AVR studio 4.18)
- AI_Disable
- Сверлит текстолит когтями
- Сообщения: 1116
- Зарегистрирован: Чт окт 15, 2009 14:16:18
- Откуда: Екб
- Контактная информация:
Re: WinAvr в вопросах и ответах
О какой внешней памяти речь?
Re: WinAvr в вопросах и ответах
AI_Disable писал(а):О какой внешней памяти речь?
RAM
- AI_Disable
- Сверлит текстолит когтями
- Сообщения: 1116
- Зарегистрирован: Чт окт 15, 2009 14:16:18
- Откуда: Екб
- Контактная информация:
Re: WinAvr в вопросах и ответах
Даю подсказку: Flash, SRAM или EEPROM? Как подключена?Re: WinAvr в вопросах и ответах
AI_Disable писал(а)::facepalm: Даю подсказку: 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
Re: WinAvr в вопросах и ответах
Да,... похоже одна надежда, что сюда заглянет ARV.
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: WinAvr в вопросах и ответах
насколько я знаю он больше тут не живет.у него свой сайт.ищите там.в коте последнее сообщение в 2011году.
В поисках истины человек развивается.
Re: WinAvr в вопросах и ответах
vitalik_1984 писал(а):насколько я знаю он больше тут не живет.у него свой сайт.ищите там.в коте последнее сообщение в 2011году.
Понятно... ну мы и сам с усами, с WINAVR разобрался.
1.Объявляем в опциях проекта сегмент XRAM: Memory Type = Sram, Name = xdata, Address = 0x802000
2.Указываем для переменных (массива):
volatile UCHAR Buf[257] __attribute__ ((section ("хdata")));
...
-
maxpetr1993
- Открыл глаза
- Сообщения: 53
- Зарегистрирован: Пт май 13, 2011 21:16:40
- Откуда: НИЖЕГОРОДСКАЯ ОБЛ
Re: WinAvr в вопросах и ответах
доброго времени суток)нужна помощь по 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[code][temp3]);
соотвнтственно есть инклуде #include "font1.h" что еще ему нужно!!!?)))спасите хелп!!!постоянно говорит
undefined reference to `PGM_READ_BYTE'
итак: есть массив в отдельном файле 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[code][temp3]);
соотвнтственно есть инклуде #include "font1.h" что еще ему нужно!!!?)))спасите хелп!!!постоянно говорит
undefined reference to `PGM_READ_BYTE'
Re: WinAvr в вопросах и ответах
pgm_read_byte
-
maxpetr1993
- Открыл глаза
- Сообщения: 53
- Зарегистрирован: Пт май 13, 2011 21:16:40
- Откуда: НИЖЕГОРОДСКАЯ ОБЛ
Re: WinAvr в вопросах и ответах
чувак ты где живёш? куда тебе ящик пива отпрвить!!!?))
Re: WinAvr в вопросах и ответах
Прошу помощи у знатаков WinAVR
Задача:
- разместить в XRAM несколько длинных массивов, оставив все остальное во внутренней RAM Mega128A
(во внутренней памяти программа работает, но массивы укорочены).
Что делаю:
1)
- в оболочке WinAVR указываю доп. сегмент .xdata 0x802000
- переопределяю размещение массивов (размерность сокращена)
volatile UCHAR BufAdc1[281] __attribute__ ((section (".xdata")));
volatile UINT BufAdc2[281] __attribute__ ((section (".xdata")));
volatile UINT BufAdc3[281] __attribute__ ((section (".xdata")));
- разрешаю работу XRAM (тайменги и конфиг. XRAM сути не меняют, но привожу)
MCUCR = (1<<SRE) | (0<<SRW10);
XMCRA = (0<<SRL2) | (0<<SRL1) | (0<<SRL0) | (0<<SRW01) | (0<<SRW00) | (0<<SRW11);
XMCRB = (0<<XMBK) | (0<<XMM2) | (0<<XMM1) | (0<<XMM0);
*.map Размещение:
.xdata 0x00802000 0x57d Variables.o
0x00802000 BufAdc1
0x00802119 BufAdc2
0x0080234b BufAdc3
Это работает!
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),
т.е. "портятся" другие места, точнее код оптимизируеся неправильно и программа становится нестабильной...
Но так быть не должно! Шаманство какое-то!!!
В чем может быть косяк?
Кто нибудь знает как с ним бороться?
Очень прошу пнуть в нужном направлении, можно сильно!
Mega128A + SRAM, WinAVR + AVR Studio 4.18 (поставил 4.19 + AVRToolchain - таже проблемма)
Задача:
- разместить в XRAM несколько длинных массивов, оставив все остальное во внутренней RAM Mega128A
(во внутренней памяти программа работает, но массивы укорочены).
Что делаю:
1)
- в оболочке WinAVR указываю доп. сегмент .xdata 0x802000
- переопределяю размещение массивов (размерность сокращена)
volatile UCHAR BufAdc1[281] __attribute__ ((section (".xdata")));
volatile UINT BufAdc2[281] __attribute__ ((section (".xdata")));
volatile UINT BufAdc3[281] __attribute__ ((section (".xdata")));
- разрешаю работу XRAM (тайменги и конфиг. XRAM сути не меняют, но привожу)
MCUCR = (1<<SRE) | (0<<SRW10);
XMCRA = (0<<SRL2) | (0<<SRL1) | (0<<SRL0) | (0<<SRW01) | (0<<SRW00) | (0<<SRW11);
XMCRB = (0<<XMBK) | (0<<XMM2) | (0<<XMM1) | (0<<XMM0);
*.map Размещение:
.xdata 0x00802000 0x57d Variables.o
0x00802000 BufAdc1
0x00802119 BufAdc2
0x0080234b BufAdc3
Это работает!
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),
т.е. "портятся" другие места, точнее код оптимизируеся неправильно и программа становится нестабильной...
Но так быть не должно! Шаманство какое-то!!!
В чем может быть косяк?
Кто нибудь знает как с ним бороться?
Очень прошу пнуть в нужном направлении, можно сильно!
Mega128A + SRAM, WinAVR + AVR Studio 4.18 (поставил 4.19 + AVRToolchain - таже проблемма)


