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

 
 
> Как грамотно принять данные по I2C?, Без лишних циклов ожидания...
N1X
сообщение Apr 8 2011, 15:38
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 5-05-10
Из: Гомель, Беларусь
Пользователь №: 57 090



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

Проблема следующая: есть контроллер (STM8) с аппаратным IIC на борту. Также в проекте будет использоваться UART... И если с передачей все почти понятно (вкидываю данные в кольцевой буфер, а дальше парится аппаратура и обработчик IRQ), то с приемом у меня ступор... А именно: работаю с PCF8583, я конечно знаю, когда она мне что-то пришлет, мастер я всетаки, но шина довольно медленная, и тупо крутиться в цикле опроса флагов - терять время... С UART то же самое... Я спрашиваю, мне отвечают.

Вопрос: Как это делается правильно? В ОС функция выглядит обычно как что-то типа Read(дескриптор устройства, *куда читать, количество байт, которые читать); как это реализуется? Ведь не могу же я вывалиться из функции не возвратив данные, а то, что к ее вызову они еще не готовы может быть легко...

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

Сообщение отредактировал N1X - Apr 8 2011, 15:42
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Dog Pawlowa
сообщение Apr 8 2011, 21:53
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(N1X @ Apr 8 2011, 18:38) *
Но как прикрутить грамотную работу с приемом данных разобраться не могу.

Альтернатива одному обработчику - два обработчика! sm.gif
Вообще-то эти вещи протоколо-зависимые.
Обычно автомат состояний управляет процессом. Типа так http://caxapa.ru/193312.html
Ну а лихие обработчики прерываний складывают принятое в линейные или циклические буферы.

Добавлю, что типичный программистский прием - это выполнение функции, в которую передается указатель на структуру, в которой находится вся интересующая информация - что принято, что не принято, кто у принятого байта папа-мама и прочее. Затем структура разбирается на атомы или анализируется что-то нужное.
Или функция возвращает, что все байты приняты, а что принято, ищется в другом месте.

Да в конце концов вспомните, как это сделано в Windows!
Да и книжки бывают полезны, на форумах не учат, а калечат!


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 21:14
Рейтинг@Mail.ru


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