Домашняя страница библиотеки_c AVR

Синтаксис языка C

Библиотека языка C GNU glibc

 Страницы развития библиотеки_с AVR

Главная страница

Инструкция пользователя

Содержание библиотеки_c

Часто задаваемые вопросы

Содержание по алфавиту

Демонстрационные проекты


<avr/eeprom.h>: EEPROM handling


Детальное Описание

 #include <avr/eeprom.h> 

Этот header файл объявляет интерфейс к некоторым простым библиотечным подпрограммам, подходящим чтобы обращаться с данными EEPROM содержавшийся в микроконтроллерах AVR. Выполнение использует простой опрашиваемый режим интерфейса. Приложения, которые требуют управляемый прерыванием EEPROM доступ, чтобы гарантировать, что никакое время не будет потрачено впустую в spinloops, должен будет развернуть их собственное выполнение.

Примечание:

Все функции для чтения/записи сначала удостоверяются готов ли к обращению EEPROM. Так как это может вызвать длинные задержки, если операция записи все еще ожидает, критические ко времени приложения должны сначала опросить EEPROM т. о. использование eeprom_is_ready() перед попыткой любого фактического ввода - вывода.

Этот header файл объявляет встроенные функции тот запрос подпрограммы ассемблера непосредственно. Это предотвращает это, компилятор генерирует, помещают/выталкивают для затертых запросом регистраторов. Этот путь также определенное соглашение о вызовах мог использоваться для eeprom подпрограмм например, передавая значения в __ tmp_reg __, eeprom адреса в X и адресах памяти в регистраторах Z. Метод оптимизирован для размера кода.

Теперь поддержаны два местоположения набора регистров EEPROM: 0x1F,0x20,0x21 и 0x1C,0x1D,0x1E (see __EEPROM_REG_LOCATIONS__).

Поскольку эти функции изменяют регистраторы IO, они, как известно, являются не повторно используемыми. Если любая из этих функций используется от обоих, стандарта и прерывает контекст, приложения должны гарантировать надлежащую защиту (например, отключая прерывания перед доступом к ним).

 

 

avr-libc объявления

 

uint8_t 

eeprom_read_byte (const uint8_t *addr)

uint16_t 

eeprom_read_word (const uint16_t *addr)

void 

eeprom_read_block (void *pointer_ram, const void *pointer_eeprom, size_t n)

void 

eeprom_write_byte (uint8_t *addr, uint8_t value)

void 

eeprom_write_word (uint16_t *addr, uint16_t value)

void 

eeprom_write_block (const void *pointer_ram, void *pointer_eeprom, size_t n)

#define 

EEMEM   __attribute__((section(".eeprom")))

#define 

eeprom_is_ready()

#define 

eeprom_busy_wait()   do {} while (!eeprom_is_ready())

 

IAR C совместимые определения

 

#define 

_EEPUT(addr, val)   eeprom_write_byte ((uint8_t *)(addr), (uint8_t)(val))

#define 

_EEGET(var, addr)   (var) = eeprom_read_byte ((uint8_t *)(addr))

 

Макроопределения

#define 

__EEPROM_REG_LOCATIONS__   1C1D1E


Документация макроопределений

#define __EEPROM_REG_LOCATIONS__   1C1D1E

Чтобы быть способным работать без требования, приближается мульти-lib для того, чтобы иметь дело с контроллерами, имеющими регистраторы EEPROM в различных позициях в пространстве памяти, функции eeprom оценивают __EEPROM_REG_LOCATIONS__: Принято быть определено устройством io заголовок и содержит 6 шестнадцатеричных цифр верхнего регистра, кодирующих адреса EECR,EEDR и EEAR. Первые два символа: EECR адрес. Вторые два символа: EEDR адрес. Следующие два символа: EEAR адрес. Значение по умолчанию 1C1D1E соответствует местоположению регистра, которое является правильным для большинства контроллеров. Значение этого определяет символ, используется для того, чтобы добавить его в конец к основному имени функций ассемблера.

#define _EEGET

(

var,

 

 

 

addr 

 

 ) 

   (var) = eeprom_read_byte ((uint8_t *)(addr))

Чтение байта из EEPROM. Совместимость определения для IAR C.

#define _EEPUT

(

addr,

 

 

 

val 

 

 ) 

   eeprom_write_byte ((uint8_t *)(addr), (uint8_t)(val))

Запись байта в EEPROM. Совместимость определения для IAR C.

#define EEMEM   __attribute__((section(".eeprom")))

Выражение атрибута, заставляющее переменную быть распределеной в пределах раздела.eeprom.

#define eeprom_busy_wait

 

 ) 

   do {} while (!eeprom_is_ready())

Организовывает бесконечный цикл до тех пор, пока память EEPROM не освободится.

Возвращения: отсутствуют.

#define eeprom_is_ready

 

 ) 

 

Возвращается 1, если память EEPROM готова к новой операции чте­ния/записи. В противном случае — 0.


Документация функций

void eeprom_read_block

(

void * 

pointer_ram,

 

 

 

const void * 

pointer_eeprom,

 

 

 

size_t 

n

 

 

)

 

 

 

Считывает блок из n байт по адресу EEPROM pointer_eeprom в буфер pointer_ram. Для константы n <= 256 байт библиотечная функция используется. Для неизвестного размеров блока во времени компиляции или размерах блока > 256 встроенный цикл расширен.

Пример использования:       #include  <stdio.h>

#include <avr/eeprom.h>

char pointer_ram [20];

void main(void)

{

eeprom_read_block(pointer_ram, 0x01, 10);

}

uint8_t eeprom_read_byte

(

const uint8_t

addr

 ) 

 

Считывает один байт по адресу EEPROM addr

Пример использования:      #include <stdio.h>

#include <avr/eeprom.h>

unsigned char b;

void main(void)

{

b = eeprom_read_byte(0x01);

}

uint16_t eeprom_read_word

(

const uint16_t

addr

 ) 

 

Считывает 16-тиразрядное слово по адресу EEPROM addr.

Пример использования:       #include  <stdio.h>

#include   <avr/eeprom.h>

unsigned  int   w;

void main(void)

{

w = eeprom_read_word(0x01);

}

void eeprom_write_block

(

const void * 

pointer_ram,

 

 

 

void * 

pointer_eeprom,

 

 

 

size_t 

n

 

 

)

 

 

 

Записывает блок из n байт из буфера pointer_ram по адресу EEPROM pointer_eeprom.

Пример использования:      #include  <stdio.h>

#include   <avr/eeprom.h>

char  pointer_ram [20]   =   "0123456789";

void main(void)

{

eeprom_write_block(pointer_ram,    0x01,    5);

}

void eeprom_write_byte

(

uint8_t

addr,

 

 

 

uint8_t 

value

 

 

)

 

 

 

Записывает байт value по адресу EEPROM addr.

Пример использования:      #include   <stdio.h>

#include   <avr/eeprom.h>

unsigned   char  b=10;

void main(void)

{

eeprom_write_byte(0x01,   b);

}

void eeprom_write_word

(

uint16_t

addr,

 

 

 

uint16_t 

value

 

 

)

 

 

 

Записывает    16-тиразрядное   слово   value    по   адресу  EEPROM addr.

Пример использования:      #include  <stdio.h>

#include <avr/eeprom.h>

unsigned int w=60000;

void main(void)

{

eeprom_write_word(0x01, w) ;

}


Automatically generated by Doxygen 1.5.2 on 21 Dec 2007.

Hosted by uCoz