О прерываниях? - PullRequest
       6

О прерываниях?

1 голос
/ 12 ноября 2008

Я кодирую элемент управления светофора, который будет отображаться на мониторе.

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

Теперь я думаю, что у меня есть следующие варианты. скажи мне, что лучше.

1. Одна функция прерывания, которая будет установлена ​​в системе, которая будет давать прерывания регулярно? (Но я не знаю, как установить это ... любое тело, пожалуйста, помогите мне в этом)

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

3. Или я должен пойти на внешний генератор прерываний?

В вышеупомянутых методах, который является лучшим способом сделать это. или же есть какой-либо другой альтернативный вариант, который проще и не включает в себя внешнее оборудование. Если какое-либо из приведенных выше решений не является правильным, пожалуйста, игнорируйте их. Моя среда - Turbo C в Windows (ответы на gcc также приветствуются, поскольку у меня TRITON IDE с gcc, установленным в Windows для ARM7)

Ответы [ 3 ]

2 голосов
/ 14 ноября 2008

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

Тема первая: Контроль трафика Нить вторая: Смоделируйте движение, приближающееся с востока и запрашивающее изменение в освещении и беспорядочно спящее от 1 до 60 секунд, прежде чем снова проснуться. Нить X использовать воображение.

В gcc это можно сделать легко, если у вас есть библиотека pthread для одного примера.

1 голос
/ 12 ноября 2008

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

В Unixland таймеры отправляют сигналы для обработки после завершения. В частности, реализация таймера для Linux: setitimer .

Затем вы должны поймать и обработать сигналы , отправленные таймером.

В Win32 API вы также можете использовать таймеры , но концепция несколько иная.

0 голосов
/ 14 ноября 2008

Получите копию Справочник программиста Microsoft® Win32® Файл справки: Win32.hlp

Seek SetTimer и связанные с ним функции. Эта функция регистрирует в окнах, что вы хотите, чтобы функция вызывалась через определенный интервал (с момента, когда вы вызываете ее setTimer). Я предлагаю, чтобы на этой функции вы: - убить этот таймер и установить другой, такой же, как он (то есть тот же интервал, та же функция); - увеличить счетчик; - проверить счетчик на постоянные;

т.е. Счетчик = 10, изменить на желтый, = 20, на зеленый, = 30 на красный и сбросить счетчик.

Если идея состоит в том, чтобы светофор реагировал на что-то другое, замените встречную логику этим "чем-то другим".

Основным () вашей программы является только инициализация вашего таймера и некоторое время (1). Остальное делает функция, вызываемая по таймеру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...