[an error occurred while processing this directive]
Не-е-е, извратов не надо :) То о чём грил SM, выглядет может так... (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено уни 09 апреля 2006 г. 15:55
В ответ на: Какие я планы себе нарисовал большие ;) (+) отправлено <font color=gray>NAUT</font> 09 апреля 2006 г. 15:18

У Вас есть вечный цикл, который имеет внтури переключатель switch() {...}, у этого свитча есть куча case'ов - вот эти выборочные "точки" и есть как-бы жесткая ситема конечного автомата. Каждый case - это определённое состояние, переход между ними регулируется сообщениями, их реализация может быть разной.

Я, к примеру, у себя в переключателе пользовался регистром сообщений - это был специально мною заданный флаговый регистр (для медлеено повторяющихся сообщений). Допустим "драйвер" клавы сосканировал, что мол нажата клавиша и есть её код. Я выставлял в общую часть памяти этот код и выставлял флаг - мол flagMsgKeyPressed, специальная задача у меня отабатывала это сообщение, для этого она постоянно опрашивает флаг и ждет его установления, как только установился - снимает код клавиши из ОЗУ, а далее у меня был специальный код сделан - Обработчик Сообщений от Окна. В общем я перенял кое-что от обработки сообщений в Windows, я там тоже как-то было дело на асме писал. В железе у меня интерфейс был с использованием а/ц LCD с размерами 20 симв. на 4 строки. Окна были почти статическими (некоторые можно было построчно перелистывать вверх/вних), а вся иерархия была в виде дерева. Поскольку ресурсов было мало, то весь интерфейс я хранил во флешке I2C SEEPROM, и придумал специальный формат для описания окна, чтобы можно было "двигальться" по дереву окон, что-то вроде связанного списка. Так вот у меня конечными макросостояниеями были окна :) А переход между окнами - по событиям, например, нажали клавишу выход - вышли на окно уровеня выше, либо срабатывает в окне программынй таймер - и выход осуществляется автоматом. Для обслуживания такого событийного интерфейса у меня были кучка вечных циклов и огромная куча Case'ов с переходами. Все было писано на асме и очень это было сложно, я написал спец утилиты для этого давняшнего своего проекта, чтобы создавать интерфейс иерархический на ПК, чтобы прошивать отдельно I2C. В общем я достиг предела того, что называется - реализация на асме практически неразумна, т.к. трудно поддается отладке, но вроде работало. Старый Ассемблер мне действовал на нервы ещё.

Очереди сообщений также делаются с помощью циклических буферов. Программа разбивается на некие слои, которые передают друг другу собщения. Вот эти слои у меня были отдельными задачами. Вообще эта тема довольно сложна и всё будет зависить только от Вашего желания. У меня некое смешение ртос получилось и автоматов и это не случайно. Ртос можно вообще не использовать - это очень сомнительная штука и подходить к ней надо обдуманно.

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

Ответы


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

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

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

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

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


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

E-mail: info@telesys.ru