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

 
 
 
Reply to this topicStart new topic
> встроенная функция копирования eeprom блоков, как обратиться?
plombir
сообщение Oct 10 2011, 04:39
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 99
Регистрация: 14-12-05
Пользователь №: 12 191



EWAVR 5.3
IAR умеет работать с копированием блоков eeprom->ram и ram->eeprom. Например, если это typedef структуры. На входе их задаётся откуда, куда и длина.

А есть ли возможность обратиться к этим функциям, чтобы свои не вставлять?
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Oct 10 2011, 18:19
Сообщение #2


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

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



Цитата(plombir @ Oct 10 2011, 07:39) *
EWAVR 5.3
IAR умеет работать с копированием блоков eeprom->ram и ram->eeprom. Например, если это typedef структуры. На входе их задаётся откуда, куда и длина.

А есть ли возможность обратиться к этим функциям, чтобы свои не вставлять?


Зачем к ним обращатья? Если хотите узнать как ИАР читает/пишет еепром почитайте соотв. аппноуты от атмела. Это довольно простая процедура.
при написании программ на С в ИАРе нет необходимости вставлять свои процедуры. ИАР в зависимости от типа данных вызовет встроеннные процедуры чтения/записи байта/слова или целого массива байт.
Go to the top of the page
 
+Quote Post
plombir
сообщение Oct 11 2011, 03:58
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 99
Регистрация: 14-12-05
Пользователь №: 12 191



"... или целого массива байт."


Код
char r[ 10 ] = { "123456789" };
__no_init __eeprom char e[ 10 ];
Как присвоить r к e? А часть r?


При приведении к типу - всё ок.
Код
typedef struct { char s[ 10 ]; } string10_t;
main()
{
    * (__eeprom string10_t *)e = * (string10_t *)r; //OK
}
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Oct 11 2011, 13:49
Сообщение #4


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

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



Код
unsigned char r[10] = { "123456789" };
__no_init __eeprom unsigned char e[10];

void ee_to_ram(unsigned char __eeprom* pEE, unsigned char * pRAM, unsigned char size)
{
  while(size--)
  {
    *pRAM++ = *pEE++;
  }
}


ee_to_ram(e+5, r+4, 3); //копируем 3 байта начиная с 5го элемента массива в еепром в рам начиная с 4й ячейки


ИАР применит __eeget8_16 для копирования данных.
Аналогично можно создать ram_to_ee для перекидывания данных из рам в еепром.

Сообщение отредактировал IgorKossak - Oct 11 2011, 14:01
Причина редактирования: Лишнее цитирование
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 2nd August 2025 - 23:26
Рейтинг@Mail.ru


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