сложность конечных автоматов не столько в количестве состояний, сколько в количестве и разнообразии прерходов. у меня переходы линейны, да и не переходы это по своей сути (разве правильно называть переходом перемещение из точки а в точку а, пусть и через промежуток времени?)
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
ну вот! я тоже считаю что в goto нет ничего страшного (пока он не попал не в те руки) это универсальный инструмент, но какраз за излишнюю универсальность его и не любят. (шарился по нэту - там так и пишут: я использую goto (приводится пример кода с ним и без с явным преимуществом в пользу goto и в размере и в наглядности), а как делать вам - решайте сами ) —————————————— осталось найти как силами среды (чтоб в код попал только результат его работы) сделать счётчик для автоматического нумерования меток и будет функция отдачи управления майн процессу (типа OS_Yield (); из OSA) готова.
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Всю тему я, правда, не читал. Но, как я понял, вы с помощью goto делаете переход между состояниями автомата?
Цитата:
сложность конечных автоматов не столько в количестве состояний, сколько в количестве и разнообразии преходов.
А вы все состояния сведите в один большой enum, а сам автомат сделайте просто вызовом функций обработки состояния по значению этого самого enum. Тогда goto вам не нужны будут. Типа enum STATE { STATE_BEGIN,//начальное состояние автомата STATE_ONE,//первое состояние STATE_TWO//второе состояние }; ... STATE state; ... if (state==STATE_BEGIN) ExecuteStateBegin(); if (state==STATE_ONE) ExecuteStateOne(); if (state==STATE_TWO) ExecuteStateTwo();
А в этих функциях меняйте state от ситуации и на следующей итерации автомат выполнит уже другую функцию.
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
здесь: x (static unsigned char) - хранит номер текущей точки останова (нужно вписать название переменной) t (static unsigned int) - хранит задержку (нужно вписать название переменной) te (переменная, но лучше константа (число)) - задержка перед продолжением (мс) (по идее здесь надо вычесть 1, т.к. выход из подпрограммы - уже задержка на цикл) num (число) - неповторяющийся номер точки останова в отдельную функцию код выделять не обязательно - написал так для наглядности, если в пределах функции есть несколько независимых подзадач - для их счетчиков надо выделить независимые переменные.
причем, даже если вписываю в код подпрограммы delay_ms(100); - срыва стека не происходит, просто подпрограмму накрывает следующим прерыванием (в нём выполнение этой задачи блокировано), а когда прерывание завершается - подпрограмма продолжается: на скриншоте осциллограф показывает работу АЛУ (высокий уровень) и режим сна (низкий уровень), просто низкого уровня нет (там импульсы менее 5% заполнения) т.к. АЛУ просыпается, чтобы переключить разряд индикатора. ПС:длительность в 2 раза превышает расчетную потому что поставлена неправильная тактовая (4 вместо 8 МГц)
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Последний раз редактировалось Ivanoff-iv Чт апр 05, 2018 08:33:25, всего редактировалось 1 раз.
Это лучше сжечь. Правда! Чтобы подсказать, как нужно сделать правильно, нужно точно знать, что вы решаете со всеми нюансами. И вникнуть. Но вряд ли кто этим займётся, кроме вас. А зачем вы делаете sei в обработчике таймера? Вы любите балансировать на грани работоспособности программы? Вы бы лучше задержки делали с помощью счётчика и таймера, уменьшающего этот счётчик, если он больше нуля. А в основном цикле в delay просто ждали бы, когда счётчик не равен нулю. В вашей функции NashaFunctia проще сделать return в случае необходимости преждевременного выхода и всё.
Цитата:
а когда прерывание завершается - подпрограмма продолжается:
Даже такая стабильная ОС, как QNX, способна упасть, если не будет успевать обрабатывать события внутри системного такта.
А зачем вы делаете sei в обработчике таймера? Вы любите балансировать на грани работоспособности программы?
delay_ms(100); это далеко за гранью работоспособности программы... и ничего не упало.
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
расчетно порушить её можно специально записав delay_ms(17000); но так писать и не надо - для того и делал, - надо Delay(1,17000,delayx,delayt); и всё будет ок (только для таких длинных интервалов delayt придется делать лонг...), правда если delay будет лонг - то и delay_ms(17000); её не вышибет... другой вариант для больших интервалов использовать предделитель для вызова этой функции (счетчик пойдёт медленнее). на встречный вопрос об ожидании внешнего события - в цикл ожидания надо вставить Delay(1,0,delayx,delayt); и всё будет ОК
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
можно было бы вообще счетчик останавливать, тогда можно пихать код любой длительности, но это доппроверки -> удлинение кода, а т.к. я пытаюсь его ужать - то лучше про этот нюанс просто буду помнить. _____ а нормальная ОС в тини влезет?
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
бывает, за пару слов борорься приходится а вы мне предлагаете потерять ещё немного флеша на запись, памяти на стек и времени на переход? а что я получаю взамен?
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
бывает, за пару слов борорься приходится а вы мне предлагаете потерять ещё немного флеша на запись, памяти на стек и времени на переход? а что я получаю взамен?
Компилятор все заоптимизирует. Не будет никаких вызовов.
бывает, за пару слов борорься приходится а вы мне предлагаете потерять ещё немного флеша на запись, памяти на стек и времени на переход? а что я получаю взамен?
вы так и не объяснили, зачем вам строго нормированное по времени исполнения дробление кода. поэтому объяснить вам преимущества иного подхода - невозможно. тем более, что вы не особо прислушиваетесь. ну и соответственно, желание советовать тоже тает.
ковыряться в ваших макросах уже никто не хочет, да и ответов на ваши вопросы, по-моему, уже три страницы нет. прогноз каков? останетесь вы со своими проблемами в гордом одиночестве, да и все. мир не перевернется, никто не пострадает, никто и не заметит. всем, и вам тоже, будет наплевать на всё.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Опять же недопонимание. Как я понял, Вы хотите написать функцию, которая будет выполняться последовательно частями. Это все надо для того, чтобы где-то ее (эту функцию) вызвать, не заботясь какая часть будет выполняться. Это так? Тогда как может быть, что "этот код не будет выделен в функцию"?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения