реклама на сайте
подробности

 
 
> Переброс массива из EEPROM в RAM используя указатели
SZ0
сообщение Aug 23 2008, 07:22
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331



В поиске был... не могу разобраться с указателями wacko.gif

Есть массив в EEPROM, при запуске проца надо перебросить его в RAM. Написал такой код:

Код
unsigned short *ptr_win, *ptr_win_ee, *ptr_eeprom, g = 0;

ptr_win = (unsigned short *)&win[0];
ptr_win_ee = (unsigned short *)&win_ee[0];

unsigned short size_w = sizeof(win), i = 0; //size_w размер массива в eeprom

while(i < size_w)
{
  EEAR = g++;
  EECR |= (1<<EERE);
  *ptr_win++ = EEDR;
  i++;
}


Не получилось вместо g использовать указатель ptr_win_ee, который указывает на массив в eeprom и присваивать его значение EEAR. И при увеличении указателя *ptr_win++ он увеличивается на два байта, вместо 1. А как его заставить увеличиваться на байт, не могу сообразить cranky.gif
Выручайте, а то голова ваще гудит 07.gif

В таком виде из EEPROM читаются все байты из массива, но пишутся они в RAM через 1 байт. Использование g не правильно, т.к. g инициализировано на начало eeprom. Потому что я заранее знаю где начало массива. А правильно через указание EEAR = *ptr_win_ee++ не получается.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
mempfis_
сообщение Aug 23 2008, 08:39
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



[quote name='SZ0' date='Aug 23 2008, 11:22' post='458992']
В поиске был... не могу разобраться с указателями wacko.gif

Есть массив в EEPROM, при запуске проца надо перебросить его в RAM. Написал такой код:

Код
unsigned short *ptr_win, *ptr_win_ee, *ptr_eeprom, g = 0;

ptr_win = (unsigned short *)&win[0];
ptr_win_ee = (unsigned short *)&win_ee[0];

unsigned short size_w = sizeof(win), i = 0; //size_w размер массива в eeprom

while(i < size_w)
{
  EEAR = g++;
  EECR |= (1<<EERE);
  *ptr_win++ = EEDR;
  i++;
}


[quote]Не получилось вместо g использовать указатель ptr_win_ee, который указывает на массив в eeprom и присваивать его значение EEAR. И при увеличении указателя *ptr_win++ он увеличивается на два байта, вместо 1. А как его заставить увеличиваться на байт, не могу сообразить cranky.gif
Выручайте, а то голова ваще гудит 07.gif [/quote]

Ва уже сказали что ptr_win_ee и ptr_win указатели на массив данных типа unsigned short - т.е. двухбайтных величин. Указатель в любом случае будет увеличиваться на 2.Хотите увеличиывть на 1 объявляйте массивы как unsigned char. Может быть Вам стоит возложить все обязанности по считыванию данных из еепром на компилятор и использовать например такое:

Код
unsigned short *ptr_win, *ptr_win_ee, *ptr_eeprom, g = 0;

ptr_win = (unsigned short *)&win[0];
ptr_win_ee = (unsigned short *)&win_ee[0];

unsigned short size_w = sizeof(win), i = 0; //size_w размер массива в eeprom
//sizeof(win) возвратит размер массива в байтах

while(i < (size_w/2)) // size_w/2 - кол-во элементов в массиве
{
  *ptr_win++ = *ptr_win_ee++;
  i++;
}
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 20:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01391 секунд с 7
ELECTRONIX ©2004-2016