AVR studio в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение Pink-Pank »

есть стандартные макросы для работы с EEPROM. в определении структуры просто указываете ее принадлежность к памяти EEPROM - все должно работать автоматом. Как правильно это записать не подскажу - предпочитаю использовать собственноручно написанные функции для работы с переферией. Поищите в просторах инета. В Code Vision это выглядит так: eeprom char x = 0; где eeprom - модификатор памяти.
или eeprom TColor x {0,1,2};
Fucking static initialization order fiasco
Аватара пользователя
WishMasterMax
Потрогал лапой паяльник
Сообщения: 389
Зарегистрирован: Пн июл 09, 2012 11:07:59
Откуда: Ukraine
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение WishMasterMax »

С кодевижном так и есть, обозвал еепромом и работай как с обычной переменной, но в студии так не прокатит, я то ставлю описание EEMEM для переменной структуры НО, для работы с памятью нужно делать eeprom_update_xxx делать, я так понимаю что мне блок нужен но я не могу правильно описать эти функции
In me the WishMaster...
Изображение
Изображение
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение Pink-Pank »

Напишите функцию, которая будет брать элементы структур и запихивать их в EEPROM - тем более, что структуры у Вас однотипные.
Fucking static initialization order fiasco
Аватара пользователя
WishMasterMax
Потрогал лапой паяльник
Сообщения: 389
Зарегистрирован: Пн июл 09, 2012 11:07:59
Откуда: Ukraine
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение WishMasterMax »

Но это ведь будет костыль. Разве нет? Должен же быть способ делать это без "посредников"?
In me the WishMaster...
Изображение
Изображение
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение Pink-Pank »

В студии по моему такого нет. А библиотеки - это не те же костыли? ;) Просто Вы их пользуете по умолчанию. )) Да и Code Vision это все в соответствующий код преобразует, хотя и запись проще.
Fucking static initialization order fiasco
Аватара пользователя
WishMasterMax
Потрогал лапой паяльник
Сообщения: 389
Зарегистрирован: Пн июл 09, 2012 11:07:59
Откуда: Ukraine
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение WishMasterMax »

Меня просто смущает наличие функции eeprom_update_block, а точнее что я не знаю как ей правильно воспользоваться, там то указывается размер того что мы пишем, значит можно вписать что-то свое...
In me the WishMaster...
Изображение
Изображение
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение Pink-Pank »

Посмотрел, там есть какой-то eeprom_write_block с тремя параметрами. куда писать, откуда и скока байт. А update_block - там еще проверка на соответствие данных идет. Если равны - не пишет, если нет - перезаписывает.

http://www.atmel.com/webdoc/AVRLibcReferenceManual/group__avr__eeprom_1gac5c2be42eb170be7a26fe8b7cce4bc4d.html

Т.е. Вы указываете адрес памяти ОЗУ, откуда писать (почему-то он с модификатором const) - адрес Вашей структуры, адрес памяти в EEPROM и скока байт писать (размер структуры sizeof)
Fucking static initialization order fiasco
Аватара пользователя
WishMasterMax
Потрогал лапой паяльник
Сообщения: 389
Зарегистрирован: Пн июл 09, 2012 11:07:59
Откуда: Ukraine
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение WishMasterMax »

Вот вот, кто бы ткнул носом как надо и не надо делать)))
In me the WishMaster...
Изображение
Изображение
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение Pink-Pank »

пока будете ждать, что кто-то ткнет - сами бы уже натыкались в сласть и разобрались. ;)
Fucking static initialization order fiasco
Аватара пользователя
WishMasterMax
Потрогал лапой паяльник
Сообщения: 389
Зарегистрирован: Пн июл 09, 2012 11:07:59
Откуда: Ukraine
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение WishMasterMax »

Да и так не первый день сижу, правда до этого труднее было, инета не было)
СпойлерИ свет только с генератором, хорошо нетбук с батареей)))) Фаллаут отдыхает)
In me the WishMaster...
Изображение
Изображение
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: AVR studio 4 в вопросах и ответах

Сообщение oleg110592 »

нашел у себя, вроде с аврфрекса, может подойдет, сам не пробовал:
As for the structures, suppose we have structure ST like this:

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

typedef struct SStructure{
    int8_t varintbyte;
    int16_t varintword;
    double vardouble;
    char varchar[10];
}ST;

we have to define a EEPROM variable of ST type

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

ST EEMEM EEStruct;

and also an ordinary variable of type ST

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

ST mystructure;

Now, suppose we initiate mystructure like this:

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

mystructure.varintbyte=10;
mystructure.varintword=516;
mystructure.vardouble=123.45;
strcpy(mystructure.varchar,"Share it");

We can write the whole structure to eeprom without bothering with the size, individual members, etc. by calling this function:

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

void WriteStructureToEeprom(ST a){
   eeprom_write_block((const void*)&a, (void*)&EEStruct, sizeof(ST));
}

like this: (note the sizeof(ST) statement in the function)

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

WriteStructureToEeprom(mystructure);
and read the whole structure back from eeprom by calling this function:
ST ReadStructureFromEeprom(void){
   ST temp;
   eeprom_read_block((void*)&temp, (const void*)&EEStruct, sizeof(ST));
   return(temp);
}

like this:

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

mystructure=ReadStructureFromEeprom();
Аватара пользователя
WishMasterMax
Потрогал лапой паяльник
Сообщения: 389
Зарегистрирован: Пн июл 09, 2012 11:07:59
Откуда: Ukraine
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение WishMasterMax »

О, благодарю, попробую реализовать :))
In me the WishMaster...
Изображение
Изображение
Аватара пользователя
B@R5uk
Собутыльник Кота
Сообщения: 2896
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Откуда: приходит весна?

Re: AVR studio 4 в вопросах и ответах

Сообщение B@R5uk »

Подскажите, пожалуйста, можно ли отключить подбивку нулями ("padding") между подряд идущими в сегменте кода директивами .db с нечётным количеством байт? Количество директив чётное, так что память будет заполнена "без дырки", а вот лишние нули между данными не нужны. В Гугле ничего подобного найти не удалось. Заранее спасибо.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение Alexeyslav »

Нет нельзя. Эта добивалка - аппаратная, контроллер в памяти программ может хранить только 16-битные значения и соответственно каждая новая строка в исходнике это новый адрес в памяти программ а он указывает только на слова.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: AVR studio 4 в вопросах и ответах

Сообщение Gudd-Head »

B@R5uk, не совсем понял, что вы хотите.
Но я храню графическое изображение цифр (по 5 байт на символ) без пробелов в ПП вот так (с помощью "\"):

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

numbers: .DB 0b00111110, 0b01010001, 0b01001001, 0b01000101, 0b00111110,/*0*/\
          0b00000000, 0b01000010, 0b01111111, 0b01000000, 0b00000000,/*1*/\
          0b01000010, 0b01100001, 0b01010001, 0b01001001, 0b01000110,/*2*/\
          0b00100001, 0b01000001, 0b01000101, 0b01001011, 0b00110001,/*3*/\
          0b00011000, 0b00010100, 0b00010010, 0b01111111, 0b00010000,/*4*/\
          0b00100111, 0b01000101, 0b01000101, 0b01000101, 0b00111001,/*5*/\
          0b00111100, 0b01001010, 0b01001001, 0b01001001, 0b00110000,/*6*/\
          0b00000001, 0b01110001, 0b00001001, 0b00000101, 0b00000011,/*7*/\
          0b00110110, 0b01001001, 0b01001001, 0b01001001, 0b00110110,/*8*/\
          0b00000110, 0b01001001, 0b01001001, 0b00101001, 0b00011110;/*9*/
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
B@R5uk
Собутыльник Кота
Сообщения: 2896
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Откуда: приходит весна?

Re: AVR studio 4 в вопросах и ответах

Сообщение B@R5uk »

Gudd-Head, то что надо! Изображение Спасибо.

А то я уж начал писать программу, которая переформатирует мне все данные в слова с разным числом слов в строке.
nirq
Опытный кот
Сообщения: 758
Зарегистрирован: Вс фев 10, 2013 15:26:00

Re: AVR studio 4 в вопросах и ответах

Сообщение nirq »

Gudd-Head писал(а):numbers: .DB 0b00111110, 0b01010001, 0b01001001, 0b01000101, 0b00111110,/*0*/\
second_line: 0b00000000, 0b01000010, 0b01111111, 0b01000000, 0b00000000,/*1*/\
В красное место не получится обратиться по текстовой метке.
А так да, перенос строки он и есть перенос. С любым текстом.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение ARV »

Думаю, получится
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
nirq
Опытный кот
Сообщения: 758
Зарегистрирован: Вс фев 10, 2013 15:26:00

Re: AVR studio 4 в вопросах и ответах

Сообщение nirq »

twobytes_isONEinstruction: .db 0x01, 0x02 ; twobytes_isONEinstruction = PC
Метка - не более и не менее, чем константа, численно равная адресу инструкции в памяти, а не "условному номеру полуинструкции".

ldi ZH, high(twobytes_isONEinstruction * 2)
ldi ZL, low(twobytes_isONEinstruction * 2)
lpm temp, Z ; temp = 0x01
sbiw ZH:ZL, (256-1)
lpm temp, Z ; temp = 0x02

ldi ZH, high(twobytes_isONEinstruction * 2 + 1)
ldi ZL, low(twobytes_isONEinstruction * 2 + 1)
lpm temp, Z ; temp = 0x02
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение Alexeyslav »

В середину массива(строки из констант) нельзя обратится таким способом, ибо туда нельзя поставить метку. Можно попытаться вычислить смещение от ближайшей метки, но это в ряде случаев будет неудобно.
Ответить

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