WinAvr в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
TuzRostislav
Мучитель микросхем
Сообщения: 455
Зарегистрирован: Сб фев 14, 2009 05:19:48
Откуда: Kiev

Re: WinAvr в вопросах и ответах

Сообщение TuzRostislav »

ps

Прояснилось кое-что. У меня Vista64.
Поставил WinAVR под VMware на XP. Работает без проблем.

Не в курсе, на Vista64 WinAVR реально заставить работать?

ps ps

Проблему решил. DLL надо отсюда скачать.

http://www.madwizard.org/electronics/ar ... inavrvista
Реклама
Аватара пользователя
Барсук
Открыл глаза
Сообщения: 64
Зарегистрирован: Сб апр 24, 2010 08:48:05
Откуда: Новосибирск

Re: WinAvr в вопросах и ответах

Сообщение Барсук »

Доброго всем
Помогите, пожалуйста, разобраться есть функция, которая должна выводить символ не дисплей по заданным координатам
три массива со шрифтами.
пока все массивы хранились в ОЗУ все работало только ОЗУ заполнялось на 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;
размер символа считывается правильно
Я НЕ суслик, Я БАРСУК
Реклама
Аватара пользователя
Барсук
Открыл глаза
Сообщения: 64
Зарегистрирован: Сб апр 24, 2010 08:48:05
Откуда: Новосибирск

Re: WinAvr в вопросах и ответах

Сообщение Барсук »

спасибо разобрался сам
Я НЕ суслик, Я БАРСУК
Maximka_18
Открыл глаза
Сообщения: 50
Зарегистрирован: Пт ноя 26, 2010 23:12:18

Re: WinAvr в вопросах и ответах

Сообщение Maximka_18 »

Помогите скомпилить код, как не делал makefile, выдает ошибку
Вложения
Desktop.rar
(1.58 КБ) 216 скачиваний
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение urry »

хидер прерывания не понравился.
Вложения
Desktop.zip
(16.13 КБ) 217 скачиваний
Реклама
3DRaven
Грызет канифоль
Сообщения: 294
Зарегистрирован: Пт мар 11, 2011 08:51:55

Re: WinAvr в вопросах и ответах

Сообщение 3DRaven »

Здравствуйте. Есть вопрос по avr-gcc...или WinAvr.
В коде нашел строки

Код: Выделить всё

/*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? Конечный способ доступа будет тот же самый ведь?

Заранее спасибо за ответ.
Реклама
Аватара пользователя
Барсук
Открыл глаза
Сообщения: 64
Зарегистрирован: Сб апр 24, 2010 08:48:05
Откуда: Новосибирск

Re: WinAvr в вопросах и ответах

Сообщение Барсук »

3DRaven писал(а):Вопросы:
1. Закоментированное слово eeprom если раскоментировать, получится, что компилятору будет сообщено, что данные переменные хранятся в eeprom?
2. При обращении к ним будет разница с использованием функций доступа к eeprom из gcc libc? Конечный способ доступа будет тот же самый ведь?

смотри в поиск такие вопросы уже были только в другой теме
viewtopic.php?f=20&t=37981
Я НЕ суслик, Я БАРСУК
3DRaven
Грызет канифоль
Сообщения: 294
Зарегистрирован: Пт мар 11, 2011 08:51:55

Re: WinAvr в вопросах и ответах

Сообщение 3DRaven »

Спасибо. Я действительно уже нашел. Есть вопрос.
Там watchdog timer используется у меня.
При работе с eeprom говорят надо его обнулять пока ждешь готовности памяти,
иначе МК сброситься может.
Так вот при доступе с помощью функций или как в CVAVR с помощью
типа переменной - это делается?
Аватара пользователя
_dark
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт апр 26, 2012 14:30:40
Откуда: под Москвой

Re: WinAvr в вопросах и ответах

Сообщение _dark »

Добрый день, уважаемые форумчане!

Прошу помощи по следующим вопросам:
- как в WINAVR подключить (объявить) внешнюю память МК?
- как в WINAVR объявить размещение конкретных данных (массива) во внешней памяти?

(WINAVR + AVR studio 4.18)
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение AI_Disable »

О какой внешней памяти речь?
Аватара пользователя
_dark
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт апр 26, 2012 14:30:40
Откуда: под Москвой

Re: WinAvr в вопросах и ответах

Сообщение _dark »

AI_Disable писал(а):О какой внешней памяти речь?


RAM
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение AI_Disable »

:facepalm: Даю подсказку: Flash, SRAM или EEPROM? Как подключена?
Аватара пользователя
_dark
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт апр 26, 2012 14:30:40
Откуда: под Москвой

Re: WinAvr в вопросах и ответах

Сообщение _dark »

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
Аватара пользователя
_dark
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт апр 26, 2012 14:30:40
Откуда: под Москвой

Re: WinAvr в вопросах и ответах

Сообщение _dark »

Да,... похоже одна надежда, что сюда заглянет ARV.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение vitalik_1984 »

насколько я знаю он больше тут не живет.у него свой сайт.ищите там.в коте последнее сообщение в 2011году.
В поисках истины человек развивается.
Аватара пользователя
_dark
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт апр 26, 2012 14:30:40
Откуда: под Москвой

Re: WinAvr в вопросах и ответах

Сообщение _dark »

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 в вопросах и ответах

Сообщение maxpetr1993 »

доброго времени суток)нужна помощь по 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'
Совесть
Встал на лапы
Сообщения: 106
Зарегистрирован: Пн мар 26, 2012 05:25:06

Re: WinAvr в вопросах и ответах

Сообщение Совесть »

pgm_read_byte
maxpetr1993
Открыл глаза
Сообщения: 53
Зарегистрирован: Пт май 13, 2011 21:16:40
Откуда: НИЖЕГОРОДСКАЯ ОБЛ

Re: WinAvr в вопросах и ответах

Сообщение maxpetr1993 »

чувак ты где живёш? куда тебе ящик пива отпрвить!!!?))
Аватара пользователя
_dark
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт апр 26, 2012 14:30:40
Откуда: под Москвой

Re: WinAvr в вопросах и ответах

Сообщение _dark »

Прошу помощи у знатаков 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 - таже проблемма)
Ответить

Вернуться в «AVR»