реклама на сайте
подробности

 
 
27 страниц V  « < 9 10 11 12 13 > »   
Reply to this topicStart new topic
> Сложные программы
AlexandrY
сообщение Jan 10 2017, 09:23
Сообщение #151


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(zltigo @ Jan 10 2017, 10:09) *
1.Разумеется не один и тот же.
2.Про "напрямую" это Вы сами придумали и неведомо что под этим подразумеваете.


Ну-ка, ну-ка... Флагами у вас автоматы информацию не передают, переменную состояния друг друга не трогают (для тех, кто замучен моделью OSI - не записывают) .
Так каким же святым духом они взаимодействуют?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 10 2017, 10:06
Сообщение #152


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(AlexandrY @ Jan 10 2017, 11:23) *
Ну-ка, ну-ка... Флагами у вас автоматы информацию не передают, переменную состояния друг друга не трогают (для тех, кто замучен моделью OSI - не записывают) .
Так каким же святым духом они взаимодействуют?

Не передергивайте, я протестовал против придуманного Вами понятия " напрямую меняет" неведомо что для Вас означающего. Посему уже третий раз повторяю:
Цитата
они взаимодействуют через изменения СОСТОЯНИЙ друг друга

Собственно процедура перехода из одного состояния в другое есть прерогатива автомата, который свое состояние меняет, а не того автомата, который это изменение инициирует.
При этом сама процедура изменения состояния хорошо выносится из общего контекста конечного автомата в отдельную процедуру изменения состояний, что тоже упрощает и читабельность и написание, и понимание и отладку, работы автомата. Другой автомат просто вызывает эту процедуру о которой собственно не знает ничего, кроме того, что она в результате своей работы и работы чужого конечного автомата установит его в затребованное состояние.
Цитата
(для тех, кто замучен моделью OSI

Для тех, для кого в мире нет ничего, кроме нескольких моторчиков, ссылка на один (первый попавшийся) из нижних уровней - LAPВ :https://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-X.25-199610-I!!PDF-E&type=items
В стандарт уже описан с терминах конечного автомата.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jan 10 2017, 11:32
Сообщение #153


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(zltigo @ Jan 10 2017, 12:06) *
ссылка на один (первый попавшийся) из нижних уровней - LAPВ :https://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-X.25-199610-I!!PDF-E&type=items
В стандарт уже описан с терминах конечного автомата.

Интересно что вы курите.
В этом стандарте нет ни одного! упоминания таких терминов как finite-state machine (FSM) или finite-state automaton (FSA), finite automaton, или просто state machine
Цитата(zltigo @ Jan 10 2017, 12:06) *
При этом сама процедура изменения состояния хорошо выносится из общего контекста конечного автомата в отдельную процедуру изменения состояний, что тоже упрощает и читабельность и написание, и понимание и отладку, работы автомата. Другой автомат просто вызывает эту процедуру о которой собственно не знает ничего, кроме того, что она в результате своей работы и работы чужого конечного автомата установит его в затребованное состояние.

Ну и...
А дальше в той процедурке взводите флаг. Пришли к тому с чего начали.
А если ваша процедурка прямо пишет в переменную состояния то я вас поздравляю, вы разорвали свою машину на куски и скоро это же произойдет с вашим мозгом.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 10 2017, 12:05
Сообщение #154


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(AlexandrY @ Jan 10 2017, 13:32) *
Интересно что вы курите.
В этом стандарте нет ни одного! упоминания таких терминов как finite-state machine (FSM) или finite-state automaton (FSA), finite automaton, или просто state machine

Какой ужас! А то, что в нем разрисованы "state diagrams" и соответственно состояния конечного автомата переходы между состояниями, это уже не доступно пониманию чукчи-писателя sad.gif.
Цитата
А дальше в той процедурке взводите флаг. Пришли к тому с чего начали.

Это Вы у себя в голове, возможно чего-то взводите.
Цитата
А если ваша процедурка прямо пишет в переменную состояния то я вас поздравляю, вы разорвали свою машину на куски и

Себя поздравьте с уже третьей безуспешной попыткой приписать свои глупости c какой то "прямой записью" мне.
Цитата
скоро это же произойдет с вашим мозгом.

Я за свои 55 лет написал и сопровождаю, достаточно много конечных автоматов, причем и весьма сложных (не по тому, что они дурно написано, а по тому, что объекты сложные), а не для запустить остановить пару моторчиков. Так что методика программирования конечных автоматов у меня обработана. Мозг на месте. То, что Вам с бухты-барахты удалось даже для моторчика родить уродливый конечный автомат - верю. Конечные автоматы должны быть изначально спроектированы тщательно, после чего, как не удивительно sm.gif, достаточно легко пишутся и очень четко работают. Нежели же попытаться наскоком чего то там начать писать и латать рассматривая результат не работы под отладчиком, то лепя заплатки, ничего хорошего не получится.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Jan 10 2017, 14:09
Сообщение #155


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Цитата(Буратино @ Jan 4 2017, 01:47) *
Занимаюсь созданием приборов с микроконтроллерным управлением. Ничего эдакого, как говорит ЛИ "автоматизация курятников". Из последнего у меня получилось 32К на Си. Освоил и пользуюсь методами из теории конечных автоматов. Сообщения, таймеры много канальные программные.

Вау, 32К. Шутка ли! Это ж целая тыща строк! Сложно! </sarcasm>
Серьезно, однако, если вам это сложно надо учиться. Это не то что не сложно, это просто ни о чем. 1000 строк это на неделю работы.
Цитата(Буратино @ Jan 4 2017, 14:11) *
В этой теме речь не идет о пром контроллерах, армах или скриптовых движках. Это наверное и важно и интересно, но точно не мне и не сейчас.
Из конструктива в теме отмечу ссылки на ооп и ос. На сколько мне известно, то это огромные темы с массой интересного. Однако напоминаю, что у меня маленькие процы и в принципе простые задачи сложно взаимодействующие друг с другом.
Что из самого ценного взять и трансформировать в мир маленьких камней из ооп и ос? обьекты и задачи? семафоры? есть ли реализации на которые можно смотреть и наследовать?

Не нужно вам на 8ми битнике ни OOП ни С++. То что вы описали, это примитивные программы с простейшей логикой. Если вы не можете это эффективно на С выразить, промочки вам будут только усложнять жизнь. С должно быть вполне достаточно. Универсальных советов тут быть не может. Может с опытом придет )) Может надо поработать с кем-то и поучиться

Почитал ваши посты дальше. В принципе, наверное, вы на правильном пути, раз уже сами пришли к тем же выводам.
Я бы посоветовал вам почитать "Clean code <...>" by Martin. Ничего такого, но много правильных советов по поводу того, как делать программу более понятной и читаемой. В остальном вам поможет только "опыт, сын ошибок трудных"
Go to the top of the page
 
+Quote Post
Буратино
сообщение Jan 10 2017, 14:12
Сообщение #156


Профессионал
*****

Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215



Цитата(ar__systems @ Jan 10 2017, 16:51) *
Не нужно вам на 8ми битнике ни OOП ни С++. То что вы описали, это примитивные программы с простейшей логикой. Если вы не можете это эффективно на С выразить, промочки вам будут только усложнять жизнь. С должно быть вполне достаточно. Универсальных советов тут быть не может. Может с опытом придет )) Может надо поработать с кем-то и поучиться

Я нахожусь в соответствующем разделе и задаю вопросы не для того чтоб услышать что мол мало знаю! Это и так ясно, по-крайней мере для меня. Но справедливости ради тысяча строк это в моем проекте один "с" файл из 30ти! И это если не считать USB драйвера (LUFA библиотека. Там наверное как минимум дясять-15 тыс строк).
Таким образом, Вы "дыманули" ориентировочно на два порядка. Мне было бы стыдно за такие оценки и отношение к вопросу.
И снова оговорюсь: речь идет о сложности для меня, для вас это может быть и легко, но судя по всему с некоторыми исключениями sm.gif


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Jan 10 2017, 14:29
Сообщение #157


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Цитата(Буратино @ Jan 10 2017, 09:12) *
Таким образом вы дыманули


Гы, ну так я же исхожу из того, что вы написали. Написали бы 30 тыщ чтобы не надо было додумывать. К слову, библиотеку-то вы не считайте. Она же для вас только black box.
Go to the top of the page
 
+Quote Post
Буратино
сообщение Jan 10 2017, 14:33
Сообщение #158


Профессионал
*****

Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215



Цитата(ar__systems @ Jan 10 2017, 17:29) *
Гы, ну так я же исхожу из того, что вы написали. Написали бы 30 тыщ чтобы не надо было додумывать. К слову, библиотеку-то вы не считайте. Она же для вас только black box.


Вот я бы на Вашем месте извинился. Так принято поступать если ошибся. Посмотрим на что Вы годны rolleyes.gif


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
Эдди
сообщение Jan 10 2017, 14:34
Сообщение #159


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



Дык, комментарии и пустые строки тоже не считаются. А то можно в подобной фигне насчитать
Код
cat *.c|wc -l
4220



P.S. А 1000 строк — это все-таки не неделя. Зависит от сложности. Я вот сегодня за 4 часа написал сотню строк. Теперь уже второй час сижу, не понимаю, чего оно сегфолтится (простая комповая утилитка с кучей malloc/free).

Сообщение отредактировал Эдди - Jan 10 2017, 14:38
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Jan 10 2017, 15:27
Сообщение #160


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Цитата(Эдди @ Jan 10 2017, 09:34) *
Дык, комментарии и пустые строки тоже не считаются. А то можно в подобной фигне насчитать
Код
cat *.c|wc -l
4220



P.S. А 1000 строк — это все-таки не неделя. Зависит от сложности. Я вот сегодня за 4 часа написал сотню строк. Теперь уже второй час сижу, не понимаю, чего оно сегфолтится (простая комповая утилитка с кучей malloc/free).

Комменты как раз считаются. Это важная часть программы.
Раз на раз не приходится, и да, зависит от сложности. У меня за последние две недели вышло по тыще за неделю, и это я еще и другой работой занимался ).

Буратино, у меня ошибки не было.

Anyway,
из моих личных советов я советую разбивать программу на функции, до такого размера, чтобы было за 30 секунд понятен весь ее код. И насколько возможно переписывать код с целью уменьшения глубины вложенности управляющих блоков.

Пример: сравните варианты:

Код
void ProcessOnTime() {
static int TimeCount = 0;

    TimeCount++;
    if ( TimeCount == 10 ) {
        TimeCount = 0;
        // Do some stuff here
    };
}

// vs.

void ProcessOnTime() {
static int TimeCount = 0;

    TimeCount++;
    if ( TimeCount < 10 )
        return;  

    TimeCount = 0;
    // Do some stuff here
}


Если следить за этим, такое преобразование очень часто возможно.
Код получается более линейным и понятным
Go to the top of the page
 
+Quote Post
Буратино
сообщение Jan 10 2017, 15:35
Сообщение #161


Профессионал
*****

Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215



Сори, а зачем int TimeCountУ ? А зачем его определять ноликом? А зачем скобки в первом случае!? И мне кажется можно и нужно проще записать все это. Или я ошибаюсь!?

Сообщение отредактировал Herz - Jan 10 2017, 18:39
Причина редактирования: Избыточное цитирование


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Jan 10 2017, 15:46
Сообщение #162


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Цитата(Буратино @ Jan 10 2017, 10:35) *
Сори, а зачем int TimeCountУ ? А зачем его определять ноликом? А зачем скобки в первом случае!? И мне кажется можно и нужно проще записать все это. Или я ошибаюсь!?

На месте do some stuff подразумевается код, который исполняется раз в 10 вызовов. В первом случае скобки нужны чтобы этот код был внутри if.

Перепишите проще, даже интересно.
Go to the top of the page
 
+Quote Post
Буратино
сообщение Jan 10 2017, 15:57
Сообщение #163


Профессионал
*****

Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215



Цитата(ar__systems @ Jan 10 2017, 18:46) *
В первом случае скобки нужны чтобы этот код был внутри if.


А зачем тогда точка с запятой нужна? Я плохо ориентируюсь в таких моментах.


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 10 2017, 16:16
Сообщение #164


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(ar__systems @ Jan 10 2017, 17:46) *
Перепишите проще, даже интересно.

Код
    if( chk_timer_restart( &ledx_timer ) )
    {
// Do some stuff here
    }

Это я к тому, что разнообразные функции таймеров:
Код
void set_timer( sys_timer_s *tim, ulong value );
void stp_timer( sys_timer_s *tim );
void rst_timer( sys_timer_s *tim );
bint chk_timer( sys_timer_s *tim );
bint chk_timer_stop( sys_timer_s *tim );
bint chk_timer_restart( sys_timer_s *tim );
void chg_timer( sys_timer_s *tim, ulong value );

#define set_timer_ms( t, v )    set_timer( (t), ((v)*(    (SYS_FREQUENCY)/1000UL)) )
#define set_timer_ts( t, v )    set_timer( (t), ((v)*((2)*(SYS_FREQUENCY)/1000UL)) )

это тоже общая унифицированная часть и рожать на каждое использование таймера чего то заново неразумно sad.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
dm37
сообщение Jan 10 2017, 16:17
Сообщение #165


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 14-08-16
Пользователь №: 92 949



Цитата
А зачем тогда точка с запятой нужна? Я плохо ориентируюсь в таких моментах.

Подразумевается, что доходишь до команды return и если условие выполняется, то дальше код можно не смотреть
Go to the top of the page
 
+Quote Post

27 страниц V  « < 9 10 11 12 13 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 1st August 2025 - 18:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.01515 секунд с 7
ELECTRONIX ©2004-2016