Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

по ссылке, стр.36 рассматривается 4 варианта реализации FIFO

Отправлено koyodza 24 августа 2009, г. 16:19
В ответ на: интеренета скоро не будет, надо же мозгами иногда шевелить. Да и FIFO у мну слегка левый нужен - без затирания старых данных. отправлено пользователем DASM 24 августа 2009, г. 15:58

в логике работы выдумать там уже нечего, всё довольно просто и логично.
Я обычно использую 2 указателя: на укладываемые и на извлекаемые данные. Тогда:
IF (Storage == Retrieval) then buffer is empty
IF (Storage+1 == Retrieval) then buffer is full
IF (Storage <> Retrieval) then data present
Удобнее всего размер буфера делать степенью двойки (16, 32, 64, 128, 256 и т.д. элементов), тогда контроль допустимости указателей вырождается в простое маскирование.

Например:
#define BUF_SIZE 512
#define BUF_MASK (BUF_SIZE-1)
WORD Buf[BUF_SIZE];
int PutFifoPos = 0;
int GetFifoPos = 0;
...
BOOL PutFifo(WORD x)
{
int newPos = PutFifoPos + 1;
if (((newPos ^ GetFifoPos) & BUF_MASK) == 0)
return FALSE;
*(Buf + (PutFifoPos & BUF_MASK)) = x;
PutFifoPos = newPos;
return TRUE;
}
...
BOOL GetFifo(WORD* pResult)
{
if (((PutFifoPos ^ GetFifoPos) & BUF_MASK) == 0)
return FALSE;
*pResult = *(Buf + (GetFifoPos & BUF_MASK));
GetFifoPos++;
return TRUE;
}
----------------
Насчет "слегка левый нужен - без затирания старых данных" не понял



Составить ответ | Вернуться на конференцию.

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
отымите от 2 единицу:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru