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

 
 
> Циклический буфер на AVR, (Примеры применения)
=GM=
сообщение Aug 24 2007, 15:16
Сообщение #1


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Тема открыта по горячим следам недавней острой дискуссии.

В ней одним из участников (defunct) была приведена программа, в которой использовался циклический буфер для работы с последовательным портом МК AT90S2313. На взгляд автора программа написана достаточно грамотно, но как-то слишком размашисто, без учёта мизерности ресурсов данного МК. Предлагаю участникам поделиться примерами и приёмами использования циклического буфера в программных разработках.

Для затравки предлагаю следующие фрагменты.

А. Запись байта из регистра AL в циклический буфер
Код
      mov     xl,qhead    ;указатель на запись
      st      x+,al       ;запишем байт
      cp      xl,qend     ;конец буфера?
      brne    .+2         ;нет, обходим
      ldi     xl,buffer   ;да, установим начало

Б. Чтение байта из циклического буфера в регистр AL
Код
      mov     xl,qtail    ;указатель на чтение
      ld      al,x+       ;прочитаем байт
      cp      xl,qend     ;конец буфера?
      brne    .+2         ;нет, обходим
      ldi     xl,buffer   ;да, установим начало

Если использовать буфер не произвольной длины, а кратный степени 2, и размещать его в памяти не произвольно, а начиная с адресов, кратных длине буфера, то размер кода можно немного сократить. Например.

В. Запись байта из регистра AL в циклический буфер длиной 32
Код
      mov     xl,qhead    ;указатель на запись
      st      x+,al       ;запишем байт
      cbr     xl,0xE0     ;держим указатель в предписанных рамках

Г. Чтение байта из циклического буфера длиной 32 в регистр AL
Код
      mov     xl,qtail    ;указатель на чтение
      ld      al,x+       ;прочитаем байт
      cbr     xl,0xE0     ;держим указатель в предписанных рамках

Здесь qhead, qtail, qend – регистровые переменные, содержащие адреса-указатели ячеек в озу для записи, чтения и конца буфера соответственно.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sensor_ua
сообщение Aug 31 2007, 19:56
Сообщение #2


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

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Цитата
Циклический буфер позволяет работать с максимальной производительностью

Всё-таки накладные нужно отметить - это удвоенное время пересылки байтов - в буфер и из него.
Кроме того имеем некоторые вопросы с обслуживанием флагов при приёме - приходится либо принимать решение о загрузке байта в буфер по месту (при обслуживании флагов), либо расширять буфер для трансляции флагов. Пропуск повреждённых байтов (типа не сошлась четность) может привести к ожиданию конца пакета по таймауту, а это не всегда одинаково полезноwink.gif
При передаче использование модификатора __generic (иногда приятно пользоваться удобствами) для указателей приводит к удорожанию их обслуживания


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
mse
сообщение Sep 1 2007, 07:03
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



Цитата(sensor_ua @ Aug 31 2007, 23:56) *
Всё-таки накладные нужно отметить - это удвоенное время пересылки байтов - в буфер и из него.
...

Для УАРТовых времян это слёзы.
Цитата
А когда хвост догнал голову, а он важнее (ибо прерывание) получается баальшой булик

Практика такова, что это хвост постоянно сидит на хвосте у головы ;О) Даже если УАРТ работает на мегабоде, то между двумя байтами 160 тактов. За это время фон успеет прожевать не один байт. Конечно, если его тормознут на 100мкС, тогда приёмник ему накидает. Но всё равно, потом фон огуляет принятое гораздо быстрее. ;О)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- =GM=   Циклический буфер на AVR   Aug 24 2007, 15:16
- - defunct   Цитата(=GM= @ Aug 24 2007, 18:16) Если ис...   Aug 24 2007, 22:12
- - =AVR=   Такой метод (посредством урезания операцией ...   Aug 25 2007, 05:42
|- - SasaVitebsk   Цитата(=AVR= @ Aug 25 2007, 08:42) Такой ...   Aug 26 2007, 10:50
|- - =GM=   Привет всем! Отъезжал ненадолго, тут праздник ...   Aug 28 2007, 16:02
|- - WHALE   Цитата(=GM= @ Aug 28 2007, 20:02) Привет ...   Aug 28 2007, 18:33
||- - =GM=   Цитата(WHALE @ Aug 28 2007, 18:33) Господ...   Aug 28 2007, 22:33
|- - SasaVitebsk   Цитата(=GM= @ Aug 28 2007, 19:02) 1) To S...   Aug 28 2007, 19:20
|- - =AVR=   Аппаратные буфера отличаются от address mode тем ж...   Aug 28 2007, 20:21
- - sensor_ua   IMHO, обсуждение циклических буферов в привязке к ...   Aug 25 2007, 07:11
- - mse   Цитата(=GM= @ Aug 24 2007, 19:16) Код m...   Aug 25 2007, 07:48
- - adnega   Доброго дня! Мне вот очень интересно применен...   Aug 27 2007, 06:45
- - zltigo   Moderator: Так, оба двое и присоединившийся к ним ...   Aug 28 2007, 22:41
|- - =GM=   Цитата(zltigo @ Aug 28 2007, 22:41) Если ...   Aug 29 2007, 00:07
- - SasaVitebsk   2 AVR спасибо. До вашего варианта не додумался. Пр...   Aug 29 2007, 11:05
|- - =GM=   Цитата(SasaVitebsk @ Aug 29 2007, 10:05) ...   Aug 29 2007, 12:13
- - alcosar   Вот одна из возможных реализаций. Имеется индекс ...   Aug 31 2007, 12:37
|- - =GM=   Цитата(alcosar @ Aug 31 2007, 11:37) Код;...   Aug 31 2007, 15:12
|- - prottoss   Цитата(=GM= @ Aug 31 2007, 23:12) Пара...   Aug 31 2007, 16:53
||- - SasaVitebsk   Цитата(prottoss @ Aug 31 2007, 19:53) Пар...   Aug 31 2007, 18:37
||- - prottoss   Цитата(SasaVitebsk @ Sep 1 2007, 02:37) 1...   Aug 31 2007, 18:57
||- - SasaVitebsk   Цитата(prottoss @ Aug 31 2007, 21:57) В п...   Sep 3 2007, 14:31
|- - alcosar   [quote name='=GM=' date='Aug 31 2007, ...   Sep 2 2007, 18:55
|- - prottoss   Цитата(mse @ Sep 1 2007, 15:03) Практика ...   Sep 1 2007, 07:15
|- - mse   Цитата(prottoss @ Sep 1 2007, 11:15) Прак...   Sep 1 2007, 08:57
|- - prottoss   Цитата(mse @ Sep 1 2007, 16:57) Если загр...   Sep 1 2007, 09:02
|- - mse   Цитата(prottoss @ Sep 1 2007, 13:02) Ну В...   Sep 1 2007, 09:23
|- - =GM=   To alcosar 1) Здесь: std Y+1,r16 у вас ошибка, на...   Sep 3 2007, 11:54
|- - alcosar   Цитата(=GM= @ Sep 3 2007, 14:54) To alcos...   Sep 3 2007, 19:33
|- - =GM=   Цитата(alcosar @ Sep 3 2007, 19:33) 2. По...   Sep 3 2007, 20:45
- - sensor_ua   ЦитатаПочему нет ни единого примера на Си? Файл пр...   Sep 1 2007, 07:45
|- - zltigo   Цитата(sensor_ua @ Sep 1 2007, 10:45) Код...   Sep 1 2007, 08:36
- - prottoss   Выложу и я свое здесь, хоть уже и выкладывал в тем...   Sep 1 2007, 08:43
- - sensor_ua   ЦитатаНу хоть тэгами пользуйтесь для выделения исх...   Sep 1 2007, 09:03
- - sensor_ua   Цитата2. Размер указателей зависит от размера буфе...   Sep 3 2007, 15:03
|- - SasaVitebsk   Цитата(sensor_ua @ Sep 3 2007, 18:03) Про...   Sep 3 2007, 15:14
- - sensor_ua   ЦитатаЕстественно на стадии написания программы Ра...   Sep 3 2007, 17:51
|- - =GM=   Цитата(sensor_ua @ Sep 3 2007, 17:51) Ука...   Sep 3 2007, 19:25
|- - SasaVitebsk   Цитата(sensor_ua @ Sep 3 2007, 20:51) Рац...   Sep 3 2007, 19:33
- - sensor_ua   ЦитатаЧто вас смущает. Цитата2. Размер указателей ...   Sep 3 2007, 19:50
|- - SasaVitebsk   Цитата(sensor_ua @ Sep 3 2007, 22:50) Ну ...   Sep 4 2007, 17:07
- - sensor_ua   ЦитатаЕсли ввёл кого в заблуждение Да всё путём. П...   Sep 4 2007, 17:46
|- - Dog Pawlowa   Люди, а как Вы синхронизируете скорости заполнения...   Sep 4 2007, 18:06
|- - mse   Цитата(Dog Pawlowa @ Sep 4 2007, 22:06) Л...   Sep 4 2007, 18:39
|- - bodja74   Цитата(Dog Pawlowa @ Sep 4 2007, 21:06) Л...   Sep 4 2007, 20:46
|- - defunct   Цитата(Dog Pawlowa @ Sep 4 2007, 21:06) Л...   Sep 8 2007, 22:21
- - sensor_ua   ЦитатаВисеть в ожидании, пока там не освободится м...   Sep 4 2007, 18:44
- - Dog Pawlowa   Цитата(sensor_ua @ Sep 4 2007, 21:44) Дык...   Sep 5 2007, 05:03
- - sensor_ua   Цитата(Dog Pawlowa @ Sep 5 2007, 08:03) У...   Sep 5 2007, 06:33
- - Dog Pawlowa   Цитата(sensor_ua @ Sep 5 2007, 09:33) Исп...   Sep 5 2007, 07:19


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

 


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


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