Comdiv писал(а):
Как-то выглядит сложней, чем надо. Например, видно, что Вы недолюбливаете логику высказываний, что приводит к появлению тавтологий. Если попытаться их устранить, получается что-то вроде этого:
Код:
int monitor_S1(void) {
int state = 0;
if(!flag_proverka_po_timer[nomer_kn]) { // "Проверить через 20 мс" не выставлен?
/* Непрерывный мониторинг */
flag_proverka_po_timer[nomer_kn] = /* Запустить проверку по таймеру если произошла смена состояния */
(digitalRead(pins_kn[nomer_kn]) == HIGH) != flag_[nomer_kn];
if (flag_proverka_po_timer[nomer_kn]) {
timers[nomer_kn] = millis();
}
} else if (millis() > timers[nomer_kn] + drebezg_S) { // Прошло 20 мс от старта таймера?
flag_proverka_po_timer[nomer_kn] = false; /* Отмена проверки по таймеру */
flag_[nomer_kn] = digitalRead(pins_kn[nomer_kn]) == HIGH; /* Выставим текущее состояние кнопки */
if (flag_[nomer_kn] != pre_flag_[nomer_kn]) { // "Текущее состояние" отличается от "Предыдущего"?
pre_flag_[nomer_kn] = flag_[nomer_kn]; // "Предыдущий" = "Текущий"
if (flag_[nomer_kn]) {
state = 1; // Переход в 1, возрастание фронта
} else {
state = 2; // Переход к 0, убывание фронта
}
}
}
return state;
}
Также, код можно улучшить, создав соответствующие структуры данных, избавившись от глобальных переменных и магических чисел и проведя декомпозицию, чему может помочь предварительное избавление от неструктурных переходов. Всё это лежит за пределами блок-схем. А комментарии, во многом, станут не нужны.
Не могу сразу навскидку найти нужную ссылку. Но дело здесь вот в чем. Существует однозначное, эквивалентное преобразование Дракон схем в текстовый язык и обратно. Понятно что не всех. А написанных правильно с соблюдением нужных правил.
Их этого следует несколько важных выводов.
Человеку лучше и привычней воспринимать информацию визуально. Конечно. Есть уникумы. Короые лучше воспринимают текстовую информацию, а не визуальную.
Но дело тут вот в чем. Те люди. Которые сейчас начинают работать на Драконе. Как правило, уже имеют какую либо подготовку в других языках. СИ, Бейсик, Ассемблер и тд и тп.
И им сложно перестроить мышление. Отсюда и идут требования дайте нам подсветку синтаксиса и все такое. То есть, они пытаются работать с Драконом. Но на ТЕКСТОВОМ языке... А переучиваться сложно...
С другой стороны. Те, кто воспринимает Дракон. Ничего не понимают в программировании.
Смычка, связка этих понятий приходит тогда. Когда появляется некто. Кто дает реальный пример работы именно в связке Дракона, и конкретного языка. Как например здесь.
viewtopic.php?f=233&t=6833Прорыв будет тогда. Когда появятся уроки. Которые от простого к сложному. Проведут эту цепочку. И вот именно тогда это станет легко и просто. И будет непонятно. А как же можно по другому... Столько мучились.
А вот автор выше приведенного кода. Может лично убедиться в эквивалентности текстового и графического представления кода. Если переведет его на язык Дракон. Ибо никто лучше автора не знает суть данного конкретного алгоритма. Но имея предварительную подготовку именно на СИ. Ему сложно представить это в графическом виде...
И что интересно. Я не говорю о том что нужно или СИ, или Дракон. Нужно знать и то и то. И умело применять в связке. А вот преимущества Дракона. Проявятся очень быстро. С ростом сложности проекта. Так как удержать в голове и манипулировать большими объёмами текста. Несопоставимо сложнее. Чем графическими Образами. При том же мыслительных способностях того. Кто решает эту задачу.
Я бы и сам сделал это преобразование. Но у меня все еще впереди. Я только начал изучать СИ. Хотя с Драконом работаю давно и плотно. Применяя его везде по жизни.