Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
15.06.2007, 18:58
|
|
Гражданин KAZUS.RU
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
|
Как в CVAVR записать в EEPROM по определенному адресу?
Нужно переменные записывать по определенным адресам в EEPROM как это сделать в CVAVR?
|
|
|
|
15.06.2007, 20:36
|
|
Прохожий
Регистрация: 05.09.2006
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Использую для этих целей собственные функции:
#pragma warn- // this will prevent warnings
void WriteEeprom(unsigned int addres, unsigned char data) {
#asm
ldd r31,y+2 ;R31=MSB addres
ldd r30,y+1 ;R30=LSB addres
ld r26,y ;R26=data
__EEPROMWRB:
SBIC EECR,EEWE
RJMP __EEPROMWRB
IN r25,SREG
CLI
OUT EEARL,r30
OUT EEARH,r31
SBI EECR,EERE
IN r24,EEDR
CP r30,r24
BREQ __EEPROMWRB0
OUT EEDR,r26
SBI EECR,EEMWE
SBI EECR,EEWE
__EEPROMWRB0:
OUT SREG,r25
RET
#endasm
}
unsigned char ReadEeprom(unsigned int addres) {
#asm
ld r30,y ;R30=LSB addres
ldd r31,y+1 ;R31=MSB addres
__EEPROMRDB:
SBIC EECR,EEWE
RJMP __EEPROMRDB
PUSH r27
IN r27,SREG
CLI
OUT EEARL,r30
OUT EEARH,r31
SBI EECR,EERE
IN R30,EEDR
OUT SREG,r27
POP r27
RET
#endasm
}
#pragma warn+ // enable warnings
Удачи!
|
|
|
|
16.06.2007, 11:45
|
|
Вид на жительство
Регистрация: 22.06.2006
Адрес: Украина
Сообщений: 308
Сказал спасибо: 19
Сказали Спасибо 32 раз(а) в 24 сообщении(ях)
|
Код:
|
eeprom unsigned char var_name @10 |
переменная ложится на указанный адрес
99% что верно - почитай справку - там хорошо описано.
|
|
|
|
16.06.2007, 18:54
|
|
Гражданин KAZUS.RU
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
|
Уважаемый AndryG
Если бы было так просто я бы не задавал вопрос.
А вы бы сначало попробовали а потом советовали.
А если лень компилировать, я вам отвечу вместо компилятора-" @ operator can be used only SRAM variables"
|
|
|
|
17.06.2007, 07:16
|
|
Частый гость
Регистрация: 14.09.2005
Сообщений: 34
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Может так?
Код:
|
//CodeVisionAVR 1.24.8e Evaluation
#include ‹mega8.h›
unsigned int eeprom* peei1=0x10;
//объявили указатель на ячейку eeprom 0x10(младший байт), а старший будет в 0x11
unsigned int i1;
int main(void)
{
i1= *peei1;//записали содержимое ячеек 0x10, 0x11 в i1
i1 *=7;//получили новое значение
*peei1= i1;//записали по адресу 0x10 новое значение
while(1);
return 0;
} |
(Это кстати не Вы?
http://www.fulcrum.ru/cgi-bin/bbs/me...ID=4945&page=1
)
|
|
|
|
18.06.2007, 06:44
|
|
Частый гость
Регистрация: 21.08.2006
Сообщений: 47
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Автору вопроса. А в чём собственно проблема? Если ты хочешь что-бы это были обычные преременные но по определенному адресу - так однозначно не получится и ты об этом знаешь сам.
Если не пугает работа с указателями - то всё просто, пиши куда хочешь и сколько хочешь. Еще можно массив натянуть на весь (не весь) EEPROM и писать в любую нужную ячейку. Тока зачем?
Ты бы задачу конкретнее описал - тогда можно выбрать подходящее решение, теоретически рассуждать не интересно.
|
|
|
|
18.06.2007, 09:27
|
|
Гражданин KAZUS.RU
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
|
Ivax
Задача в следующем в EEPROM хранятся поравочные коэфициеты (изменяемые в конце процесса вычисления).
В зависимости от результата вычисления=адрессу EEPROM выбирается соответствующий коэфициент.
|
|
|
|
21.06.2007, 08:23
|
|
Прохожий
Регистрация: 21.06.2007
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Кодевижен имеет native процедюры для записи/чтения еепром, и даже флэш!
Все просто:
Код:
|
eeprom char a; //переменная в еепром
flash float c; // переменная в флэш-памяти
void main{
...
a=2*c...... ; // запись в еепром автоматическая! чтение из flash - тоже
tempvar=a*23*sqrt(2); // чтение из еепром
c=(float)(a*24.6); // есть даже запись во флеш(!)
} |
если нужно возиться с таблицей - все без изменений, как с обычной в SRAM
Но учти: без фанатизьма! количество записей в одну ячейку EEPROM - 100 000, потом пойдут сбои
запись в пределах одной страницы flash (64-256 байт) - 1000-5000 раз.
И еще. Писать в еепром напрямую (вне переменных) можно, но не рекомендуется, т.к. переменные назначаются при каждой компиляции по-разному. Можешь запороть данные.
Флеш писать можно, дабы сделать внутрисхемную замену ПО. Делается это так:
Код:
|
flash char progm @0;
char progb[];// буфер записи флеш
... траляля, инит, все дела
main{......}
#org SMALLBOOTSTART
void sysprog(void)
// складываешь новую прошивку(фрагмент) в SRAM progb
// затем берешь по очереди байты и кладешь во флеш
*(progm+смещение)= progb[i];
//и так далее |
|
|
|
|
21.06.2007, 08:33
|
|
Прохожий
Регистрация: 21.06.2007
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Цитата:
|
Задача в следующем в EEPROM хранятся поравочные коэфициеты (изменяемые в конце процесса вычисления).
|
если каждый раз будешь менять еепром - надолго его не хватит!
делай так:
Код:
|
char coeff_1[5]; // таблица коэфф-тов в памяти
eeprom char coeff_2[5]; // таблица коэф-тов в ПЗУ
{при включении питания}
coeff_1=coeff_2; //вспомнить коэф-ты
{в процессе работы, скажем каждую минуту}
coeff_2=coeff_1; //периодически сохраняем таблицу в ПЗУ (копирует весь массив целиком)
{процесс работы}
coeff_1[i+3]=#@$#@@~! ; // работаешь ТОЛЬКО с таблицей в SRAM!!! |
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Как записать mp3/wav файл во флэш?
|
svad0 |
Микроконтроллеры, АЦП, память и т.д |
5 |
03.09.2008 08:55 |
как записать строку в массив?
|
dimonbest |
Микроконтроллеры, АЦП, память и т.д |
8 |
27.02.2008 12:18 |
Помогите записать EEPROM
|
masterpc |
Микроконтроллеры, АЦП, память и т.д |
4 |
16.02.2007 02:53 |
как записать массив 50 на 16 в еепром atmega128&
|
sma-etu |
Микроконтроллеры, АЦП, память и т.д |
0 |
15.02.2007 16:05 |
как записать в eeprom atmegi128?
|
sma-etu |
Микроконтроллеры, АЦП, память и т.д |
1 |
06.12.2006 15:35 |
Часовой пояс GMT +4, время: 18:46.
|
|