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

 
 
 
Reply to this topicStart new topic
> Реализация очереди FIFO для записи в ЕЕПРОМ Xmega
Kovrov
сообщение Dec 1 2014, 20:46
Сообщение #1


Мастер-фломастер
****

Группа: Свой
Сообщений: 611
Регистрация: 29-12-05
Пользователь №: 12 700



Ребят
в голове кручу идею создать буфер для записи страниц еепрома
в ХМЕГА.
Думаю классическим способом:
вектор очереди головы, вектор очереди хвоста- сравнение головы с хвостом..
Вопрос: по какому признаку определить опустошение или переполнение буфера?
теоретически: если хвост догонят голову переполнение, если наоборот опустошение
но как практически реализовать?


--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Dec 2 2014, 04:38
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



так и реализовывай, при перед/после инкремента указателей проверяй на больше/меньше/равно
Код
int write_buf(int data)
{
  *ptr_wr++ = data;      
  if(ptr_wr >= ptr_end)  ptr_wr = ptr_start;
  if(ptr_wr == ptr_rd)  return 0;    // ожидается переполнение!!!
  else   return 1;  // норм
}

или
Код
int read_buf(int *data)
{
  if(ptr_rd == ptr_wr)  return 0;    // пусто!!!
  *data = *ptr_rd++;
  if(ptr_rd >= ptr_end)  ptr_rd = ptr_start;
  return 1;  // норм
}
Go to the top of the page
 
+Quote Post
megajohn
сообщение Dec 2 2014, 06:22
Сообщение #3


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

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



я бы заменил
if(ptr_wr >= ptr_end) ptr_wr = ptr_start;

на
assert( ptr_wr <= ptr_end );
if(ptr_wr == ptr_end) ptr_wr = ptr_start;


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Dec 3 2014, 03:41
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



Использование assert - на любителя


Сообщение отредактировал alexeyv - Dec 3 2014, 04:07
Go to the top of the page
 
+Quote Post
megajohn
сообщение Dec 3 2014, 07:09
Сообщение #5


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

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(alexeyv @ Dec 3 2014, 07:41) *
Использование assert - на любителя


а здесь фишка не в самом assert а в предупреждении что что-то ездит по памяти и портит


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post

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

 


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


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