Например TDA7294

Форум РадиоКот • Просмотр темы - Как поместить цикл в case оператора switch
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вс авг 24, 2025 09:04:49

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 252 ]     ... , , , 9, , , ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Как поместить цикл в case оператора switch
СообщениеДобавлено: Вт окт 11, 2022 15:34:43 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1478
Рейтинг сообщения: 0
Проект в каком компиляторе собирал?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как поместить цикл в case оператора switch
СообщениеДобавлено: Вт окт 11, 2022 19:29:03 
Открыл глаза

Зарегистрирован: Пн окт 05, 2020 17:20:11
Сообщений: 44
Рейтинг сообщения: 0
GCC Microchip Studio


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как поместить цикл в case оператора switch
СообщениеДобавлено: Вт окт 11, 2022 20:03:24 
Сверлит текстолит когтями

Карма: 12
Рейтинг сообщений: 124
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 1235
Рейтинг сообщения: 0
Да пофигу компилятор! Вы логику то должны понимать?
Или это у вас вызывает затруднения?
Код:
void main(void) {
  setup();
  while (true)
    loop();
}

Исходный текст я уже привёл. Результат виден. Какие вопросы?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как поместить цикл в case оператора switch
СообщениеДобавлено: Вт окт 11, 2022 20:45:26 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1478
Рейтинг сообщения: 0
OKF, это кому?

Добавлено after 16 minutes 54 seconds:
Посидел, подумал. Нет, так дело не пойдет.
Вольфганг Трамперт. AVR-RISC микроконтроллеры. В этой книге доступно и подробно показана архитектура мк avr. Примеры на ассемблере, но это не проблема. В книге много разных примеров. В том числе примеры работы с таймерами.
Вот вам урок. Читаете книгу, получите представление, как настраивать работу таймеров. Домашнее задание. Сделать тестовый проект. Генерация меандра, пусть примерно, 60 гц. Частота кварца 10 или 16 МГц.

Следующий урок. Пусть без подавления дребезга. Кнопка. Первое нажатие, запускаем генератор меандра. Второе нажатие остановка генерации. Запуск, остановку работу генератора сделать отдельными функциями. Потом как конечный автомат. Режимы IDLE, SET_RUN, RUN, STOP.

Следующий урок. Подавление дребезга. Есть цикл статей Татарчевского. Есть мой пример. У меня сделано практически по татарчевскому. Завтра покажу пример кнопки с подавлением дребезга.

Когда будет готов программный модуль кнопки с подавлением дребезга. Запуск генератора меандра


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как поместить цикл в case оператора switch
СообщениеДобавлено: Вт окт 11, 2022 21:13:15 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Demiurg писал(а):
Проект в каком компиляторе собирал?
с успехом сожрет winavr, iar, cvavr, да же тупо из под протеуса можно усе сделать, с небольшими изменениями и сожрет arduino_ide.
У него Makefile есть, при установленном winavr тупо из под командной строки можно собрать.
Даже можно попробовать и онлайн собрать.
В чем проблема вообще?

Вас просят подкорректировать чужой код - вот и корректируйте.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как поместить цикл в case оператора switch
СообщениеДобавлено: Вт окт 11, 2022 21:22:02 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1478
Рейтинг сообщения: 0
Проблем нет. Есть пошаговое создание проекта. Берешь книжку, берешь карандаш, бумажку и рисуешь алгоритм. Сначала человеку нужно понять, в чем именно его затык. Он правильно в общем то делает.
От нас, мы ему примеров накидали. Разных.

Я от себя добавлю. Пусть раздербанит проект и покусочно поймет в чем его затык.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как поместить цикл в case оператора switch
СообщениеДобавлено: Вт окт 11, 2022 21:27:08 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Demiurg писал(а):
Я от себя добавлю.
А ты не добавляй.
Из ваших всех примеров мне понравился пример MLX90640, но он не объяснил самого главного,
как создается сам рисунок?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как поместить цикл в case оператора switch
СообщениеДобавлено: Вт окт 11, 2022 21:30:03 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1478
Рейтинг сообщения: 0
Табличный? Рисунок? Ты про рукописный? Или я упустил, в программе для графов, алгоритмов?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как поместить цикл в case оператора switch
СообщениеДобавлено: Вт окт 11, 2022 21:35:56 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Тут


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как поместить цикл в case оператора switch
СообщениеДобавлено: Вт окт 11, 2022 21:44:53 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1478
Рейтинг сообщения: 0
Номера строк это состояния. Номер символа это следующее состояние автомата. Графы это взаимосвязи. Сообщения, входные символы, короче, все входы автомата - следующие состояния автомата.

Теперь смотри. Первая строка это 0-вое состояние автомата. Номера символа в строке от 0. Смотрим. Первая строка 0 состояние. Первый нулевой символ там 0. Значит состояние остаётся прежним. Следующий символ в строке там 1. Значит следующее состояние автомата 1. И так далее.

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


Последний раз редактировалось Demiurg Вт окт 11, 2022 21:54:57, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как поместить цикл в case оператора switch
СообщениеДобавлено: Вт окт 11, 2022 21:53:08 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Demiurg, сам рисунок, нарисуй так что бы я понял.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как поместить цикл в case оператора switch
СообщениеДобавлено: Вт окт 11, 2022 22:00:24 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1478
Рейтинг сообщения: 0
Мои все спят. Комп недоступен.


Вложения:
2yby9yi4v7_1.jpg [67.55 KiB]
Скачиваний: 26
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как поместить цикл в case оператора switch
СообщениеДобавлено: Вт окт 11, 2022 22:02:10 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Слушай, мне давно уже объяснили, что таблицей работать гораздо эффективнее, чем с вашими флагами.
Demiurg писал(а):
Мои все спят. Комп недоступен.
Ты меня опять не понял, пусть лучше автор объясняет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как поместить цикл в case оператора switch
СообщениеДобавлено: Вт окт 11, 2022 22:18:09 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1478
Рейтинг сообщения: 0
Значит ты не так понял. Речь не о флагах. Применять таблицы или нет это твое решение.

Накалякал. Так понятно?

тут


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как поместить цикл в case оператора switch
СообщениеДобавлено: Вт окт 11, 2022 22:24:32 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Demiurg писал(а):
Так понятно?
Нет, если мне нет, значит и ТС нет. Ты не забывай, я не спец, я любитель.
Demiurg писал(а):
Со Смарта большой размер файла
У меня проблем с инетом нет, оптика, 100Мбит/сек.

Что такое от 0 до 7, откуда 7 взялось? По чему не до 8? или до 16?

По чему s1 s2 s3, а s4 где?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как поместить цикл в case оператора switch
СообщениеДобавлено: Вт окт 11, 2022 22:32:17 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1478
Рейтинг сообщения: 0
Конечный автомат. Число состояний конечно. Пусть при проектировании, анализе мы понимаем, что у нас 8 состояний. От 0 до 7. Это номера строк. Также, мы понимаем, что у нас 8 сообщений. От 0 до 7. Это номер символа в строке. Номера строк и символов это индекс. Пусть у нас состояние 0. Это первая строка. Индекс 0. Пришел символ на вход автомата. Пусть у нас будет сообщение со значением 0. Это первый символ в строке. Индекс 0. Пусть пришел в 0 состоянии символ со значением 5. Это первая строка 6 символ. Так понятно?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как поместить цикл в case оператора switch
СообщениеДобавлено: Вт окт 11, 2022 22:35:29 
Опытный кот
Аватар пользователя

Карма: 2
Рейтинг сообщений: 164
Зарегистрирован: Ср авг 03, 2022 05:22:56
Сообщений: 848
Рейтинг сообщения: 0
как создается сам рисунок?

Рисунок со стрелочками переходов? Он отражает таблицу, это одно и то же, только стрелками явно показаны переходы, которые в таблице показаны циферками. Да, на рисунке стрелочками составлять удобнее, потому что сразу видно.

На вход алгоритма поступают некоторые входные значения. В данном случае входная переменная может принимать 8 значений: от 0 до 7. Это определено нашими условиями, тем что для каждой кнопки выделен один бит, итого 3 бита, общее число комбинаций = 8. Если кнопок много, такой вариант будет неэффективен по числу комбинаций, поэтому входное значение должно содержать просто десятичный код нажатой кнопки (или код события, если нужны отпускания и нажатия).
Начальное (исходное) состояние, с которого вообще начинается "жизнь", обозначается s0. Затем, от него проводим стрелочки, над которыми пишем циферки значений, при поступлении которых алгоритм пойдет по тому или иному пути и перейдет в другое состояние. И далее, от каждого такого состояния проводятся стрелочки с циферками к другим состояниям. Если входное значение не меняет состояния, рисуется дуга возвращающая в тот же самый кружок.
Таким образом, по этому рисунку можно отследить поведение алгоритма при поступлении входного значения в каждом шаге опроса кнопок. В первом шаге на вход поступила 1 (нажата кнопка 1), по стрелочке перешли в s1. Во втором шаге опроса кнопок получили значение 0 (все кнопки отпущены), и по стрелочке перешли в состояние s4. В следующем шаге опроса получили значение 1 (снова нажата кнопка 1), перешли в состояние s7. Затем отпустили кнопку и вернулись в исходное состояние s0. Стрелочки показывают все возможные комбинации нажатий, удержаний и отпусканий кнопок в каждом цикле опроса кнопок. Число состояний s определяется исходя из того, какие входные последовательности возможны и как должен работать алгоритм.
А чтобы на выходе алгоритма получить конкретные цифры, которые можно применить дальше, нужно составить еще одну табличку, в которой каждому состоянию s соответствует число, нужное нам на выходе.

В двух словах это доходчиво не объяснить, а если объяснять по уму, там нужно уже прибегать к математическим заморочкам, довольно сложная штукенция - составление минимального детерминированного конечного автомата (МДКА). Могу только сказать, что основное назначение такого рода автоматов - это формирование поведения алгоритма в зависимости от приходящих значений. Хорошо работает в менюшках юзер-интерфейса, в разборе приходящих извне (например по UART-у) команд или ответов от того же GSM-модуля SIM800 или от модуля GPS.
В кнопках - да, прикольно, но нужно сразу отсеивать все ненужные комбинации одновременных нажатий, чтобы размер таблицы не разрастался в геометрической прогрессии.
В принципе, алгоритмы через таблицы переходов или через switch-case представляют собой разные записи того же самого. Однако, при сложных и длинных входных последовательностях (например, парсинг текста) запись через switch-case оказывается настолько длинной и нечитаемой, что прибегают именно к табличному методу. И наоборот, если входное число имеет например три варианта: 1, 50, 135, которые сильно отличаются по величине, то табличный метод будет иметь перерасход памяти на промежуточные невостребованные ячейки.


Последний раз редактировалось MLX90640 Вт окт 11, 2022 22:48:39, всего редактировалось 2 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как поместить цикл в case оператора switch
СообщениеДобавлено: Вт окт 11, 2022 22:36:51 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Demiurg писал(а):
Число состояний конечно. Пусть при проектировании, анализе мы понимаем, что у нас 8 состояний.
Ты меня опять не понял.
У нас всего три кнопки, которые могут принимать всего 8 значений.
4 кнопки - уже 16 значений.
Танцуй от этого, учитель, мат надо сюда вставить, да хороший.

У меня внучка жмет на все кнопки на пульте ТВ, и еще и ножкой наступит.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как поместить цикл в case оператора switch
СообщениеДобавлено: Вт окт 11, 2022 22:49:55 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1478
Рейтинг сообщения: 0
А давай без эмоций. Есть разные виды конечных автоматов. И если вдаваться в подробности, то, Гугл в помощь. Тем более что есть ещё математические модели конечных автоматов. А это уже не с форумов учиться.

Если 16 значений, значит, заманаешься рисовать. Сидеть и просчитывать все значения. Либо группировать и сортировать.

По поводу "учитель". Я в этом топике показал задумку. Практикум. И рамки этого практикума жёстко и строго очерчены.

И кстати, да. Если количество символов велико, как правильно отметил MLX90640, у табличного метода будет много неиспользуемых и повторяющихся ячеек. Поэтому, анализ входных символов. Группировка, сортировка, виды символов и так далее.

Пример. Пусть у нас матричная клава 4х4. От 0 до 9. A, B, C, D, *, #. От 0 до 9 это числовые значения. A, B, C, D, *, # - навигация и действия. От 0 до 9 это вводимые параметры. A, B, C, D, *, # - символы на вход автомата. На входе проверяем, если числовые и если нужно вводить параметры, вводим. Если служебные символы, то вот тебе символы для управления автоматом. Это и есть символы для таблицы.

Грубо, приблизительно как то так.


Последний раз редактировалось Demiurg Вт окт 11, 2022 23:07:44, всего редактировалось 2 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как поместить цикл в case оператора switch
СообщениеДобавлено: Вт окт 11, 2022 23:05:59 
Опытный кот
Аватар пользователя

Карма: 2
Рейтинг сообщений: 164
Зарегистрирован: Ср авг 03, 2022 05:22:56
Сообщений: 848
Рейтинг сообщения: 0
По чему s1 s2 s3, а s4 где?

Попробую еще раз и немного иначе описать. Задано было три кнопки. И выбрано было, что каждой кнопке соответствует один бит, то есть 3 бита, а значит 8 возможных комбинаций состояния этих кнопок. Итого, возможны 8 путей перехода в следующее состояние из текущего. Поэтому ширина таблицы - 8 ячеек.
Затем, задано 3 светодиода, которые будут включаться одной из трех кнопок. Причем, нажатие на ту же самую кнопку должно отключить этот светодиод (и все остальные тоже). А нажатие на любую другую кнопку переключить на другой соответствующий светодиод. Итого минимальное число состояний, реализующих заданный алгоритм работы = 1 исходное + 3 для переключения светодиодов по нажатию кнопки + 3 для отпускания кнопок и подготовки к выключению того же светика по следующему нажатию (как раз реализует тот самый триггер вкл/выкл-кнопки) + 1 для отключения всех светиков по нажатию кнопки.


Последний раз редактировалось MLX90640 Вт окт 11, 2022 23:10:19, всего редактировалось 1 раз.

Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 252 ]     ... , , , 9, , , ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 331


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y