AVR studio в вопросах и ответах
- Pink-Pank
- Опытный кот
- Сообщения: 721
- Зарегистрирован: Ср июн 11, 2014 09:43:13
- Откуда: США
- Контактная информация:
Re: AVR studio 4 в вопросах и ответах
есть стандартные макросы для работы с EEPROM. в определении структуры просто указываете ее принадлежность к памяти EEPROM - все должно работать автоматом. Как правильно это записать не подскажу - предпочитаю использовать собственноручно написанные функции для работы с переферией. Поищите в просторах инета. В Code Vision это выглядит так: eeprom char x = 0; где eeprom - модификатор памяти.
или eeprom TColor x {0,1,2};
или eeprom TColor x {0,1,2};
Fucking static initialization order fiasco
- WishMasterMax
- Потрогал лапой паяльник
- Сообщения: 389
- Зарегистрирован: Пн июл 09, 2012 11:07:59
- Откуда: Ukraine
- Контактная информация:
Re: AVR studio 4 в вопросах и ответах
С кодевижном так и есть, обозвал еепромом и работай как с обычной переменной, но в студии так не прокатит, я то ставлю описание EEMEM для переменной структуры НО, для работы с памятью нужно делать eeprom_update_xxx делать, я так понимаю что мне блок нужен но я не могу правильно описать эти функции
- Pink-Pank
- Опытный кот
- Сообщения: 721
- Зарегистрирован: Ср июн 11, 2014 09:43:13
- Откуда: США
- Контактная информация:
Re: AVR studio 4 в вопросах и ответах
Напишите функцию, которая будет брать элементы структур и запихивать их в EEPROM - тем более, что структуры у Вас однотипные.
Fucking static initialization order fiasco
- WishMasterMax
- Потрогал лапой паяльник
- Сообщения: 389
- Зарегистрирован: Пн июл 09, 2012 11:07:59
- Откуда: Ukraine
- Контактная информация:
Re: AVR studio 4 в вопросах и ответах
Но это ведь будет костыль. Разве нет? Должен же быть способ делать это без "посредников"?
- Pink-Pank
- Опытный кот
- Сообщения: 721
- Зарегистрирован: Ср июн 11, 2014 09:43:13
- Откуда: США
- Контактная информация:
Re: AVR studio 4 в вопросах и ответах
В студии по моему такого нет. А библиотеки - это не те же костыли?
Просто Вы их пользуете по умолчанию. )) Да и Code Vision это все в соответствующий код преобразует, хотя и запись проще.
Fucking static initialization order fiasco
- WishMasterMax
- Потрогал лапой паяльник
- Сообщения: 389
- Зарегистрирован: Пн июл 09, 2012 11:07:59
- Откуда: Ukraine
- Контактная информация:
Re: AVR studio 4 в вопросах и ответах
Меня просто смущает наличие функции eeprom_update_block, а точнее что я не знаю как ей правильно воспользоваться, там то указывается размер того что мы пишем, значит можно вписать что-то свое...
- Pink-Pank
- Опытный кот
- Сообщения: 721
- Зарегистрирован: Ср июн 11, 2014 09:43:13
- Откуда: США
- Контактная информация:
Re: AVR studio 4 в вопросах и ответах
Посмотрел, там есть какой-то eeprom_write_block с тремя параметрами. куда писать, откуда и скока байт. А update_block - там еще проверка на соответствие данных идет. Если равны - не пишет, если нет - перезаписывает.
http://www.atmel.com/webdoc/AVRLibcReferenceManual/group__avr__eeprom_1gac5c2be42eb170be7a26fe8b7cce4bc4d.html
Т.е. Вы указываете адрес памяти ОЗУ, откуда писать (почему-то он с модификатором const) - адрес Вашей структуры, адрес памяти в EEPROM и скока байт писать (размер структуры sizeof)
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 в вопросах и ответах
Вот вот, кто бы ткнул носом как надо и не надо делать)))
- Pink-Pank
- Опытный кот
- Сообщения: 721
- Зарегистрирован: Ср июн 11, 2014 09:43:13
- Откуда: США
- Контактная информация:
Re: AVR studio 4 в вопросах и ответах
пока будете ждать, что кто-то ткнет - сами бы уже натыкались в сласть и разобрались. 
Fucking static initialization order fiasco
- WishMasterMax
- Потрогал лапой паяльник
- Сообщения: 389
- Зарегистрирован: Пн июл 09, 2012 11:07:59
- Откуда: Ukraine
- Контактная информация:
Re: AVR studio 4 в вопросах и ответах
Да и так не первый день сижу, правда до этого труднее было, инета не было)
Спойлер
И свет только с генератором, хорошо нетбук с батареей)))) Фаллаут отдыхает)- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: AVR studio 4 в вопросах и ответах
нашел у себя, вроде с аврфрекса, может подойдет, сам не пробовал:
As for the structures, suppose we have structure ST like this:
we have to define a EEPROM variable of ST type
and also an ordinary variable of type ST
Now, suppose we initiate mystructure like this:
We can write the whole structure to eeprom without bothering with the size, individual members, etc. by calling this function:
like this: (note the sizeof(ST) statement in the function)
like this:
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
- Контактная информация:
- B@R5uk
- Собутыльник Кота
- Сообщения: 2896
- Зарегистрирован: Сб ноя 13, 2010 12:53:25
- Откуда: приходит весна?
Re: AVR studio 4 в вопросах и ответах
Подскажите, пожалуйста, можно ли отключить подбивку нулями ("padding") между подряд идущими в сегменте кода директивами .db с нечётным количеством байт? Количество директив чётное, так что память будет заполнена "без дырки", а вот лишние нули между данными не нужны. В Гугле ничего подобного найти не удалось. Заранее спасибо.
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: AVR studio 4 в вопросах и ответах
Нет нельзя. Эта добивалка - аппаратная, контроллер в памяти программ может хранить только 16-битные значения и соответственно каждая новая строка в исходнике это новый адрес в памяти программ а он указывает только на слова.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: AVR studio 4 в вопросах и ответах
B@R5uk, не совсем понял, что вы хотите.
Но я храню графическое изображение цифр (по 5 байт на символ) без пробелов в ПП вот так (с помощью "\"):
Но я храню графическое изображение цифр (по 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 в вопросах и ответах
Gudd-Head, то что надо!
Спасибо.
А то я уж начал писать программу, которая переформатирует мне все данные в слова с разным числом слов в строке.
Спасибо.А то я уж начал писать программу, которая переформатирует мне все данные в слова с разным числом слов в строке.
Re: AVR studio 4 в вопросах и ответах
В красное место не получится обратиться по текстовой метке.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 в вопросах и ответах
Думаю, получится
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: AVR studio 4 в вопросах и ответах
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
Метка - не более и не менее, чем константа, численно равная адресу инструкции в памяти, а не "условному номеру полуинструкции".
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 в вопросах и ответах
В середину массива(строки из констант) нельзя обратится таким способом, ибо туда нельзя поставить метку. Можно попытаться вычислить смещение от ближайшей метки, но это в ряде случаев будет неудобно.

