Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
82 / 2 / 0
Регистрация: 10.02.2024
Сообщений: 165

Тема конечных автоматов

12.11.2024, 17:12. Показов 1696. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.

Перехожу с Arduino на более углублённое программирование. На Arduino сидел уже давно и написал много параллельно выполняющегося кода на таймерах с millis() и уже приучился всю периферию и работу с ней завертывать в классы, и вызывать роботу с ней через функции, чтобы основной код был более читаем.

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

Опытные разработчики, можете прокомментировать, насколько я правильно понял материал?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.11.2024, 17:12
Ответы с готовыми решениями:

Сишные шаблоны реализации конечных автоматов
Давайте поднимем такую интересную темку. Конечные автоматы. Точнее, шаблоны реализации конечных автоматов. Накидывайте сюда ваши...

Метод конечных автоматов
Дан список слов X1, X2, …, Xk и строка Y длины n. Определить, входит ли одно из слов Xi в строку Y как подстрока за время C∙n (где C...

Минимизация конечных автоматов
доброго времени суток. имеется два автомата: 1. 2. нужно их минимизировать. подразумевалось, что после минимизации они станут...

26
82 / 2 / 0
Регистрация: 10.02.2024
Сообщений: 165
13.11.2024, 11:03  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Azathtot Посмотреть сообщение
А возьмите m128 например. 4k памяти. И сразу все проблеммы перестанут быть проблемами. Серьезно. Или вообще XMega/STM32
А я и думал на мегах делать. ВЫходит 4-8кб это уже вообще не критично для создания экземпляров во время работы?

Добавлено через 2 минуты
Цитата Сообщение от Azathtot Посмотреть сообщение
Это как????
Ну, в плане инициализация это по сути определение панов и первоначальная настройка. Закинуть их в отдельную функцию и и вызывать ее только уже в процессе работы программы, когда конкретно сдираюсь использовать этот экземпляр.
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
13.11.2024, 11:13
Цитата Сообщение от Elesh_Makfa Посмотреть сообщение
ВЫходит 4-8кб это уже вообще не критично для создания экземпляров во время работы?
Еще раз. Если вы не дергаете в бешеном темпе new/delete да еще с разными размерами, то никаких проблем нет от слова "вообще". Вы их придумали. Пишите на С++ и не ищите черную кошку в темной кухне.
1
82 / 2 / 0
Регистрация: 10.02.2024
Сообщений: 165
13.11.2024, 11:16  [ТС]
Цитата Сообщение от Azathtot Посмотреть сообщение
Еще раз. Если вы не дергаете в бешеном темпе new/delete да еще с разными размерами, то никаких проблем нет от слова "вообще". Вы их придумали. Пишите на С++ и не ищите черную кошку в темной кухне.
Все, понял. Спасибо)
0
 Аватар для COKPOWEHEU
4078 / 2676 / 432
Регистрация: 09.09.2017
Сообщений: 11,886
13.11.2024, 11:22
Цитата Сообщение от Dushevny Посмотреть сообщение
Из С++ останутся исключительно шаблоны и классы без new/delete…
А разве кто-то говорил про new/delete?
С С++ проблема в том, что new/delete могут вызываться "под капотом". Например, при работе со строками.
Цитата Сообщение от Azathtot Посмотреть сообщение
А если у вас new вызывается при запуске микропрограммы один раз...
...то зачем вообще заморачиваться с динамической памятью?
Цитата Сообщение от Elesh_Makfa Посмотреть сообщение
Но если у меня каждый класс занимает по 1-3 байта, то ме же лучше, как я и предложил, заранее их создать, но не инициализировать. Тогда я еще на этапе компиляции буду понимать сколько памяти они займут.
А что, вы заранее не знаете сколько у вас будет объектов? Или хотя бы сколько их может быть в пределе. Аллокаторы - довольно сложный алгоритм, который будет отъедать память просто под список свободных / занятых ячеек. Ну и алгоритм поиска свободного места тоже время заимает.
Цитата Сообщение от Elesh_Makfa Посмотреть сообщение
А разве нельзя, зная заранее сколько байт занимает 1 экземпляр, оставить, уловно, 1кб оперативки
А чем это лучше простого массива?
Цитата Сообщение от Azathtot Посмотреть сообщение
А возьмите m128 например.
У нее корпус неприятный. По крайней мере если сравнивать с DIP или ардуиной.
Цитата Сообщение от Elesh_Makfa Посмотреть сообщение
ВЫходит 4-8кб это уже вообще не критично для создания экземпляров во время работы?
От задачи зависит. При желании можно и гигабайт памяти выжрать.
Цитата Сообщение от Elesh_Makfa Посмотреть сообщение
конченые автоматы это и есть про "делать весь код только на таймерах с milli() и не использовать delay()" и про "Для удобства и лучшей организации блоков кода, оборачивать каждую сущность в класс или в модуль".
Да, примерно так. Возможно, что-то полезное найдете в моей статье. Она, правда, по gd32, а не по avr, но принцип-то тот же.
0
1184 / 460 / 68
Регистрация: 22.09.2023
Сообщений: 1,395
13.11.2024, 11:35
Цитата Сообщение от Azathtot Посмотреть сообщение
А если у вас new вызывается при запуске микропрограммы один раз - то ничего страшного не случается. delete можно не вызывать
Тогда зачем его (new) использовать? Зачем тащить в проект менеджер памяти, если один раз все объекты можно разместить в памяти статически еще на этапе компиляции, вообще до запуска программы.
Цитата Сообщение от Elesh_Makfa Посмотреть сообщение
Но если у меня каждый класс занимает по 1-3 байта, то мне же лучше, как я и предложил, заранее их создать, но не инициализировать.
Можно и так. Вот пример решения от TheCalligrapher: Вызов нужного конструктора Вручную лучше вряд ли сделаете. Не видя задачи трудно советовать что-то конкретное. Почему нельзя сразу инициализировать объекты?

Есть еще placement new, его тоже можно использовать в подобных случаях. Если объекты не живут одновременно (грубо говоря, приняли команду - создали объект типа a - обработали команду - объект больше не нужен - ждем следующую команду - получили - создали объект типа b - обработали команду - объект больше не нужен - ждем следующую команду и т.д.), то можно все эти объекты объединить в union и при получении команды создавать объект в этом union при помощи placement new, а после окончания обработки разрушать прямым вызовом деструктора.

Цитата Сообщение от Elesh_Makfa Посмотреть сообщение
Удалять же я эти экземпляры не буду, точно. + конечно какой-то резерв по оперативке оставлять.
А резерв зачем? Это как презерватив на морковке у монашки из анекдота?

Добавлено через 3 минуты
Цитата Сообщение от Elesh_Makfa Посмотреть сообщение
Это же был ответ на сообщение выше.
Да, в котором не было ни слова ни об аллокаторах, ни о new/delete. Но Эдди персонаж широко известный в широких кругах. Увидел слово "класс" и "Остапа понесло"...

Добавлено через 2 минуты
Цитата Сообщение от Azathtot Посмотреть сообщение
А возьмите m128 например. 4k памяти.
То есть вот так, не видя задачи, "4k хватит всем"? смело, смело.

Добавлено через 2 минуты
Цитата Сообщение от Elesh_Makfa Посмотреть сообщение
ВЫходит 4-8кб это уже вообще не критично для создания экземпляров во время работы?
У меня в некоторых проектах под кучу выделено 1 К, и это с запасом. А в некоторых суммарный занятый объем ОЗУ несколько десятков байтов. При этом объекты в процессе работы создаются на стеке чуть ли не в каждой функции и там же уничтожаются.

Добавлено через 3 минуты
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
С С++ проблема в том, что new/delete могут вызываться "под капотом". Например, при работе со строками.
Смотрим размер выходного файла. Если после добавления очередного куска кода с использованием стандартной библиотеки он неадекватно резко возрос - смотрим .map и если видим там работу с кучей - решаем задачу иначе, не используя работу со стандартными строками.
0
 Аватар для COKPOWEHEU
4078 / 2676 / 432
Регистрация: 09.09.2017
Сообщений: 11,886
13.11.2024, 11:50
Цитата Сообщение от Dushevny Посмотреть сообщение
Да, в котором не было ни слова ни об аллокаторах, ни о new/delete. Но Эдди персонаж широко известный в широких кругах. Увидел слово "класс" и "Остапа понесло"...
Правильно его понесло. Опасность С++ в контроллерах что надо хорошо знать как он будет разворачивать код. Как с теми же строками. std::string s = "abc" + uart.gets();. Будут ли тут выделения памяти?
Цитата Сообщение от Dushevny Посмотреть сообщение
Смотрим размер выходного файла. Если после добавления очередного куска кода с использованием стандартной библиотеки он неадекватно резко возрос - смотрим .map и если видим там работу с кучей - решаем задачу иначе, не используя работу со стандартными строками.
Вот-вот. Постоянно надо перепроверять.
0
Windows must die
828 / 834 / 102
Регистрация: 23.11.2021
Сообщений: 4,843
Записей в блоге: 15
13.11.2024, 12:12
Цитата Сообщение от Dushevny Посмотреть сообщение
с использованием стандартной библиотеки
Если использовать только стандартную библиотеку, то на любой аллокатор вылезет ошибка, т.к. в стандартной библиотеке нет функции _sbrk и т.п. А вот если кто-то зачем-то эту функцию определил, то и аллокаторы будут работать.
А еще, некоторые любят определять всякие функции _write и им подобные, чтобы у них, видите ли, printf работал. Ну, черт с ними: лично я считаю printf в микроконтроллерах лютым злом, а кто-то может считать иначе.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.11.2024, 12:12
Помогаю со студенческими работами здесь

Произведение конечных автоматов
Помогите написать программу, что получает на вход 2 конечных автомата, на выходе выдает произведение этих автоматов в виде таблицы с...

Умножение конечных автоматов
Очень срочно! Нужно написать программу, которая получает на входе два конечных автомата, на выходе выдает произведение этих автоматов в...

Минимизация конечных автоматов
всем привет можете помочь? Разработать программное средство, реализующее следующие функции: 1) ввод исходного конечного автомата и...

Пример конечных автоматов
Добрый вечер! Кто-нибудь может подсказать какие-нибудь красивые примеры использования конечных автоматов (кроме компиляторов и...

Прямое произведение конечных автоматов
Не могу найти пример прямого произведения конечных автоматов. Повсюду голая теория. Где всё-таки можно найти пример?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru