Обсуждаем контроллеры компании Atmel.
Ответить

Re: Нестабильность из-за задержек

Пт апр 16, 2021 16:46:25

просто всё зависит от задачи...
есть задачи, где требуется РТОС с вытесняющей многозадачностью, приоритетами, семафорами и прочим её удобством и возможностями (правда на АВР теперь такие задачи всё реже решают...)
а есть чтото типа как у ТС - помигать светодиодами невтакт... для такой задачи хватит и чего попроще...
для ассемблера я сделал небольшой набор простеньких функций, позволяющий писать несложную многопоточную задачу так, как пишутся обычные однопоточные с делаями... просто во время делая (а у однопоточных задач часто именно программное ожидание расходует больше всего процессорного времени) счётчик команд переключается на выполнение кода другого потока (сохранив предварительно адрес для возврата именно в эту же точку оставленного потока).
Когда я этот подход попытался применить в С, то у меня ничего не получилось... виной всему оказалась оптимизация - код могло закинуть внутрь скрытой от глаз программиста подфункции (понятно, что о контексте для неё никто не озаботился...) и при выходе срывало стек...
Пришлось написать средствами С но уже не функциями, а макросами...
для программиста код остаётся набором однопоточных задач, обрамленных указателями начала и конца задачи и с делаями внутри, а для компилятора этот код разворачивается в свитч-кейс структуру...
Результат (хоть он пока и не конечный) мне понравился: дефайны занимают 3 строчки, да и получающийся код можно даже в тини 13 уместить.

Re: Нестабильность из-за задержек

Пт апр 16, 2021 18:05:48

Мы в теме AVR? Да. Чтобы ТС-у получить псевдопараллельность. То есть, опрос кнопок, с учётом дребезга, мигание светодиода. В дальнейшем не одного. Что нам нужно сделать. Убираем в сторону языки программирования. Убираем в сторону личные предпочтения, типа одностраничности, как у одного, красивости кода, как у некоторых. Берём чисто практическую сторону вопроса. Нужно дробить все процессы. Чтобы за итерацию рабочего цикла все нужные процессы выполняли свой код покусочно. Это можно реализовать двумя способами. Заработал очередной процесс, выполнил действия, заработал другой процесс, также выполнил, следующий процесс. Этот способ дробление процессов реализуется условиями, флагами, состояниями конечных автоматов. Второй способ реализуется временными кадрами. Заработал процесс, поработал определённое время, скажем, 10 мкс. Сработало прерывание аппаратного таймера, сохранили контент, восстановили контент следующего процесса и так далее. Это и только это важно понимать. А вот на каком языке и как красиво, это уже решает программист. В силу своих познаний языков программирования, опыта и так далее.
Конечные автоматы при первом способе решают задачу псевдопараллельности на ура. Потому что каждый процесс раздроблен на состояния. И основной цикл выглядит как список из функций. Необязательно каждая функция это конечный автомат. Главное, чтобы соблюдался принцип дробления всех функций.
И почему именно это, практическую сторону, вы всегда отбрасываете при очередном обсуждении...
Любому начинающему нужно знать только это. Как технически реализовать псевдопараллельность. А дальше уже он решает, каким путем он пойдёт дальше.

Re: Нестабильность из-за задержек

Пт апр 16, 2021 20:32:00

Ну ни себе чего полемика!! Высший пилотаж, да и только.
NStorm,дружище, " в блокноте, без проверки" и вот он код " на блюдечке с голубой каёмочкой" , но, к великому сожалеию, с маленьким пятнышком:
кодвижн ругается на 48 : if (flag >= 2 && TCNT0 >= T0VAL) . Окончательно обнаглею: как подправить? Ну не дано в таких высоких материях ориентироваться,
у каждого свой уровень.

Re: Нестабильность из-за задержек

Пт апр 16, 2021 21:11:41

Demiurg, а вы говорите - дальше сами.
Да куда уж мы сами, нам подай на "блюдечке с голубой каёмочкой", и еще и ошибку помоги исправить.
Кстати в ветке про arm предлагают задержку для лсд на конечных автоматах, присоединяйтесь, будет интересно.

Re: Нестабильность из-за задержек

Сб апр 17, 2021 03:17:28

Ну, вообще то я с асма начинал. И конечные автоматы применял вовсю.

Re: Нестабильность из-за задержек

Сб апр 17, 2021 14:06:56

Demiurg, Вы поймёте, Вы весьма неглуп. Ну вот не надо первоклашку учить интегрировать. Пусть он со сложением разберётся. Пусть пока делает попроще, а когда дорастёт, и надоест мигать светиками, найдёт Вашу ссыль на Татарчевского и подумает, вот, йопт, пора и посложнее сделать. А КА, конечно, отличный метод. Я до него ещё не добрался, всё с флагами пока. ;)

Re: Нестабильность из-за задержек

Вс апр 18, 2021 03:31:38

Сначала первоклашка должен прочитать внимательно книжку по архитектуре мк, понять как работает мк, понять, как сделать псевдопараллельность процессов. Что я и сделал. Обратите внимание. Из за того что они этого не понимают, мало того, в книжках почему то об этом не пишут. Вот в чем проблема. Нужно сразу показывать это. Лично мне ещё на этапе ассемблера крайне не хватало именно этой информации. Из за чего я бросался на всякие диспетчеры. Казалось бы вот решение проблем. Ан нет. Я из за этого потерял кучу времени. С другой стороны это опыт... Какой никакой. Но эту информацию нужно давать сразу. И параллельно пусть учатся писать. Ассемблер, си, без разницы. Когда видишь суть, на чем писать уже по фигу.
Не пожалейте времени, сядьте почитайте эти статьи. В них полностью расписано, как нужно создавать проекты. Дело даже не в конечных автоматах. Взаимодействие программных модулей. Служба сообщений, событий. Программные таймеры. И так далее. Эта именно та информация, которая нужна всем.

Re: Нестабильность из-за задержек

Вс апр 18, 2021 06:25:30

Прошу разрешения у Sergbern использовать его код в качестве примера для моего распределителя - попробую это дело в статью оформить.

Re: Нестабильность из-за задержек

Вс апр 18, 2021 08:27:28

Т е всё таки расскажете первоклашке про интеграл. Да просто расскажите ему, что это возможно, вот и всё. Пусть ОПЫТА набирается, Вы правильно про свой опыт сказали, научиться без шишек на лбу ну никак. Согласен, он должен это понимать.

Re: Нестабильность из-за задержек

Вс апр 18, 2021 11:56:15

Sergbern, как именно ругается хоть?

Re: Нестабильность из-за задержек

Пн апр 19, 2021 07:31:40

Ivanoff-iv, да, конечно, картбланш.

Добавлено after 6 minutes 31 second:
dgrett, понятно, что можно такие штуки делать, не чета моим игрушкам. Просто у меня мышление материальное, виртуалка плохо всасывается, да и 55 не 20.

Добавлено after 9 minutes 51 second:
NStorm, invalid expression.

Re: Нестабильность из-за задержек

Пн апр 19, 2021 08:20:19

55 всего-то? ;)

Re: Нестабильность из-за задержек

Пн апр 19, 2021 09:35:33

а мне уже 70, но мышление не подводило ни разу.

Re: Нестабильность из-за задержек

Пн апр 19, 2021 09:50:53

NStorm, invalid expression.

А вы случаем строку #define сверху не забыли из моего примера?
#define T0VAL = 195 // переполнение на 195 тиках ~ 200мс

Или
char flag;
забыли видимо, что такую ошибку дает.

Добавлено after 30 seconds:
И не перепутайте, там цифра 0, а не буква О.

Re: Нестабильность из-за задержек

Пн апр 19, 2021 15:14:20

Попытался довести свой метод до ума... но так и не вышло... (хотел автоматизировать подстановку имени потока и номера задержки, но возможности кодевиженовского дефайна такой возможности не дали)
поэтому статью пока писать не стал.
в работу программы до конца не врубился... поэтому просто скопировал код, немного в нём прибрался (да простит меня автор :)) ), да скучумжил незначащие в данном аспекте строки.
Теперь моргалки не мешают работе остального кода.
_____
Для добавления потоков в имеющийся проект достаточено скопировать в его начало 5 дефайнов из этого файла, далее нужно выделить потоки и внутри заменить штатные программные задержки на задержки потоков.

Добавлено after 9 minutes 8 seconds:
Не знаю, работает ли программа так, как задумал автор... но она работает так, как бы работала с делаями, но на многопоточном процессоре...
ПС:20.04.2021 немного поправил код (нашел недочет)
Последний раз редактировалось Ivanoff-iv Вт апр 20, 2021 07:29:24, всего редактировалось 1 раз.

Re: Нестабильность из-за задержек

Пн апр 19, 2021 18:32:40

Я сейчас на вашем примере понял одну вещь. Есть две грани наших обсуждений. Одна сторона (вы) пытаетесь показать как можно просто решать КОНКРЕТНЫЕ примеры. Я же, со своей стороны, пытаюсь показать, что вы на каждом примере ломаете мозг, решаете эту конкретную задачу. Типа я не прав. Но на самом деле, все примеры, что вы показали, вы поломали голову, поломали моск, всегда решаете ОДИН конкретный пример. У которого нет будущего. Править программу, это в разы увеличивает умственные затраты. Мой же подход, он несколько не уверсален, нет, но смотрит в будущее. И дело не только в конечных автоматах. Вы не смотрите в будущее. Не думаете наперёд. Вот в чем проблема.
Технически, нет обработки дребезга контактов. С одной стороны, он не нужен. Ну выставили порты ещё раз. Да и хрен с ним. Технически ничего не изменилось. Но когда вам потребуется обработка дребезга, вот тогда вы все впухли на таких примерах. Ну как то так. Я делаю такой вывод... Да, у меня где то сложно, но мой подход можно применять как конструктор. У вас же всегда обработанная напильником уникальная вещь. Которую в случае чего проще выкинуть. И сделать заново новую.

Re: Нестабильность из-за задержек

Пн апр 19, 2021 18:53:57

не совсем...
я какраз, за универальность, потому и взял готовый пример и постарался скопировать его 1в1.
я пытался сделать максимально универсальную систему, позволяющую применить её в различных вариациях при этом сохранив понятность кода и получив минимальные накладные расходы (расход ОЗУ в 3 байта на процесс, думаю приемлем, а повторяющийся код дефайнов неплохо упаковывает оптимизатор).
антидребезг, кстати, добавить тоже совсем не проблема.
П.С.: завтра ещё покажу вытесняющую многозадачность с этим самым кодом... (оно и это умеет :) правда стек при этом расходует заметно)
П.С2.: программирование методом К.А. я тоже умею, уважаю и применяю :beer:
Последний раз редактировалось Ivanoff-iv Пн апр 19, 2021 18:57:23, всего редактировалось 1 раз.

Re: Нестабильность из-за задержек

Пн апр 19, 2021 18:57:03

Demiurg писал(а):И сделать заново новую.
Все верно, берем и делаем новую.
К примеру, вот обработка триггерной кнопки с дребезгом, полностью

Re: Нестабильность из-за задержек

Пн апр 19, 2021 18:57:39

Вытеснялку не надо. Мозги ещё свернем начинающим. Кооперативочка. Достаточно.
Dimon456. А теперь весь проект ТС-а... Вы так и не поняли. Ваш одностраничный подход, ммм, фигня, короче...

Re: Нестабильность из-за задержек

Пн апр 19, 2021 19:12:38

Demiurg писал(а):Ваш одностраничный подход, ммм, фигня, короче...
А ваш многостраничный еще хуже, нужен компилятор типа eclipse, который умеет строить так называемые зависимости, что бы собрать буквально весь многостраничный код воедино, на одну страницу, что бы можно было увидеть весь код одним взглядом, а не прыгать по страницам что за чем идет и для чего это существует. Ни должно быть ни чего лишнего, только то что требуется.
Ответить