Перейти к содержанию
    

Циклический буфер на AVR

Люди, а как Вы синхронизируете скорости заполнения буфера и отправки от него?

...

Вы то как делаете?

Дык...ХОН-ХОФФ, аппаратная синхра...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Висеть в ожидании, пока там не освободится места, мне запрещает какая-то религия

Дык ждать-то по-любому нужно. Вопрос в том, делать ли чего полезное при этом или нет. А это скорее к механизмам шедулинга.

В случае достаточно долгого ожидания есть прямая целесообразность выйти из ожидания (отдать управление ОС), а потом иногда заходить и проверять или ждать(проверять) извещения о событии (буфер не полон) и уж тогда добивать.

while(On){

if(len<=0) break;

if(putc(*src)==EOF){

OS_Yield();//тут передаём управление ОС

}

src++;

len--;

}

Я, правда, чаще использую для выхода/входа в ожидающие функции не OS_Yield(), а механизм статических сопрограмм реализованный макросами http://www.chiark.greenend.org.uk/~sgtatham/coroutine.h

http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Люди, а как Вы синхронизируете скорости заполнения буфера и отправки от него?

Может что такое новое придумали? :)

 

 

Вы то как делаете?

 

Придумали уже давно,читайте внимательно пост 34.

Самый простой дернуть ногу CTS сом-порта ,он аппаратно приостановит передачу данных из него.

XON\XOFF - это еще нужно такой режим включить на дровах.

Хотя эти способы не освобождает от отслеживания на случай переполнения отправного буффера на ПК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дык ждать-то по-любому нужно. Вопрос в том, делать ли чего полезное при этом или нет. А это скорее к механизмам шедулинга.

Угу, спасибо. А без ОС единственная возможность использовать это время - натолкать в прерывания побольше функциональности, логично? Я то работаю без ОС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Угу, спасибо. А без ОС единственная возможность использовать это время - натолкать в прерывания побольше функциональности, логично? Я то работаю без ОС.

Использование статических сопрограмм требует только большого цикла (round-robin), хотя этим применение не ограничиваетчся. А Adam Dunkel наваял на этом деле даже нечто типа операционки - Protothreads http://www.sics.se/~adam/pt/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Использование статических сопрограмм требует только большого цикла (round-robin), хотя этим применение не ограничиваетчся. А Adam Dunkel наваял на этом деле даже нечто типа операционки - Prothothreads http://www.sics.se/~adam/pt/

Спасибо. Я где-то рядом болтаюсь в подходах, используя switch или вызовы функций по индексу, а у него хорошо все проанализировано и систематизировано.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Люди, а как Вы синхронизируете скорости заполнения буфера и отправки от него?

На отправку (тобиш TX буфер) - опорная точка - всегда пропускная способность канала, от нее и синхронизироваться. Регуляторов только 2 - размер буфера и задержка между вливанием очередной порции данных.

 

Вы то как делаете?
Там где канал с "узким горлышком" 300-1200 бод, а данных передавать много - ставлю 32k-128k внешней памяти. +2$ к стоимости устройства, +5см^2 места на плате.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...