[an error occurred while processing this directive]
могу сказать, как делал сам:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Тумблер 23 июля 2006 г. 02:30
В ответ на: Ну и как решить эту проблему отправлено dred73 23 июля 2006 г. 02:08


1. полагаю, что обычным "процедурным" программированием
решать такие проблемы черезвычайно трудно. Да и просто долго.
Надо делать автомат состояний.
2. насколько я знаю, у MODBUS-а имеется пауза между пакетами
не менее 3.5 байт (длительности), но не менее 50 мкс.
Это значит, что начало пакета можно определять и без маркера.
Маркер, надо думать, используется для вящей надежности и
устойчивости.
(это так, к слову)
3. Находясь в состоянии-ожидания 1-го байта (головы пакета)
автомат в полном покое.
(нижеследующее все в процедуре прерывания RXD)
После получения маркера-начала,
если он правильный (нет любых ошибок):
-запускаем тайм-аут на прием 2-го байта (запускаем таймер)
-переходим в состояние ожидания 2-го байта
-если надо - спасаем макер в память.
-если надо(и возможно) - начинаем считать CRC

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


А что будет, если на сработает T-OUT на прием, скажем, 2-го байта?
Находясь в этом же (по номеру) состоянии автомат в прерывании
таймера просто:
- перейдет в состояние ожидания башки пакета.
- остановит работу таймера (т.е.) сам-себя (если нужно)
И все придет в исходное состояние - ожидание башки пакета.

итд, итп.

Реализация некоторого сетевого алгоритма заняла в моем случае
28-29 состояний (всего-то) и 4-5 дней работы "на все".

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание