Не надо делать мне как лучше, оставьте мне как хорошо
-
- Вот мой эксперимент, но из серии "проще самому сделать, чем разобраться". 1) Задача - не цикл, а завершающийся блок, условно функция.2) Задачи могут активировать одна другую. 2.1) Задача всегда отрабатывает до конца( yeld() не нужен) . 3) Перебираются задачи начиная с первой, но старт активной всегда с наивысшего приоритета. 4) шедулер следует вызывать в цикле: и всякие спячки и прочее реализуются вне этого поделия. 5) Есть пример. 6) передаётся аргумент. но он не может быть Dingo(139 знак., 28.02.2025 12:58, ссылка)
- Берёшь любую RTOS и получаешь "биглуп с приоритетами" - =AlexD=(26.02.2025 10:17)
- есть такая хрень как coroutine, мне кааца это то что нужно. gcc на уровне языка поддерживает это. klen(1 знак., 26.02.2025 20:48, ссылка)
- Есть такая мысль. Когда-нибудь, в светлом будущем, я таки перенесу
все это наросшее безобразие под RTOS. - LightElf(26.02.2025 13:20)
- Для легаси ПО я обычно запускаю корку и выделяю весь биглуп в фоновую задачу, целиком. Потом смотрю что из этого биглупа можно вырезать безболезненно в отдельные треды. Как правило это достаточно тривиальный процесс, который весьма быстро заканчивается нулевым содержанием фонового треда. - =AlexD=(26.02.2025 14:05)
- А можно для тех, кто в танке: что такое big loop? Я только
superloop знаю… - Eddy_Em(25.02.2025 23:35)
- Это оно же самое, но другими словами. - _LightElf(26.02.2025 01:31,
)
- Да хоть залуперлуп - сущности разные. Есть пример: (Довлатов -
шутка) дядя зацикливыает в бесконечность демо-задачу, и
демонстрирует исполнение в лупе или стэйт-машине... Мэйн луп
работает невзирая на назначенный зависон! - Красиво. Но, так будет,
если созидатель ошибается в мизере кода, и расстраивается надолго,
но когда напортачил дохуа где (печаль моя чиста), то наверняка надо
открыть ящик стола (как в кинах)... Познание RTOS - очень полезное
достижение, наверное даже bnb62(526 знак., 26.02.2025 16:42 - 16:52)
- Системный тик 1mS удобный лишь для целей таймаутов средств
синхронизаций не мешает в принципе иметь события с любым таймингом
и будить таймерными прерываниями коих типично много любую задачу и
процесс. - =AlexD=(26.02.2025 16:43)
- Вот ей богу гении! Если работать "на грани"(что часто требуется
Заказчиком из тупой экономии), то даже нельзя "в принципе иметь события с любым таймингом". :) - bnb62(26.02.2025 19:07)
- Если задача не из "rocket science" то сейчас "работать на грани" - это эпический проеб PM и реальная перспектива краха проекта. Потому что заказчику нужно "сдать тему в срок" а все (все, Карл!) чипы включая процессор как правило стоят меньше чем все коннекторы платы если не считать сложный аналог от AD или TI. А еще есть корпус, затраты на сборку... В общем иканомия на процессоре это примерно как ловля блох. - 3m(27.02.2025 13:59)
- Сказки прошлого века :) Сейчас "экономия" это взять "млинку", с
двумя гигагерцами и Линуксом, и поморгать светиком. Cкpипaч(82 знак., 26.02.2025 20:24, youtube)
- Кремния в природе 75 % - так учили в советских школах. Не? И не
надо брать распберри в руки. Грязными, засратыми.... тем более...
Бегом к рукомойнику! Как говорил известный юморист: ... (напомнит
кто-нибудь к месту) - bnb62(26.02.2025 21:06)
- Этот? :-) il-2(1 знак., 27.02.2025 15:36, ссылка)
- Распберри только BIOSа в PC стиле не хватает, в остальном это
великолепный проект. - =AlexD=(27.02.2025 09:12)
- А зачем там биос? - SciFi(27.02.2025 09:14)
- Что-бы Device Tree Overlays не писать буковками и компилять компилятором, а натыкивать пальцем
в менюшечке прямо на живом устройстве наглядно и с
автоопределениями. - =AlexD=(27.02.2025 09:19)
- Это как "натыкивать в живом устройстве", если у него монитор некуда
воткнуть? Eddy_Em(305 знак., 27.02.2025 09:56)
- В малинке есть куда, но даже и в любой абстрактной плате есть как
правило debug uart который лехко потянет ncurses. UEFI - это не
дос, а загрузчик OS с Shell'ом . RTFM дбл блд - =AlexD=(27.02.2025 14:28)
- Ну, скажу я вам, запускать там даже mc — сомнительное удовольствие. Eddy_Em(301 знак., 27.02.2025 15:02)
- У меня через UART даже far2l худо-бедно, но работает. Я даже для МК
люблю делать uart интерфейсы в стиле norton commander , выглядит
офигительно, наглядность улётная. - =AlexD=(27.02.2025 15:47)
- Средствами МК? Тяжеловато. Eddy_Em(99 знак., 27.02.2025 16:23)
- Это потому что вы RTOSами не владеете. =AlexD=(797 знак., 28.02.2025 11:16)
- Предельно неудобно. А что если прибежал человек, с совсем другим компьютером? Отправлять ему "драйвер"? А что насчет версий? Cкpипaч(100 знак., 27.02.2025 16:30)
- У меня и есть обычный текстовый интерфейс. Eddy_Em(261 знак., 27.02.2025 16:59, картинка)
- У меня на atmega8 интерфейс поверх modbus. Регистр адреса, регистр
значения, регистр операции. И прямой доступ к памяти, по распечатке
map-файла. Cкpипaч(62 знак., 27.02.2025 17:14)
- Спасибо за идею, надо будет такой доступ по чтению к флешу сделать, к области данных и логов. - Andreas(27.02.2025 17:17)
- У меня на atmega8 интерфейс поверх modbus. Регистр адреса, регистр
значения, регистр операции. И прямой доступ к памяти, по распечатке
map-файла. Cкpипaч(62 знак., 27.02.2025 17:14)
- У меня и есть обычный текстовый интерфейс. Eddy_Em(261 знак., 27.02.2025 16:59, картинка)
- Средствами МК? Тяжеловато. Eddy_Em(99 знак., 27.02.2025 16:23)
- У меня через UART даже far2l худо-бедно, но работает. Я даже для МК
люблю делать uart интерфейсы в стиле norton commander , выглядит
офигительно, наглядность улётная. - =AlexD=(27.02.2025 15:47)
- Ну, скажу я вам, запускать там даже mc — сомнительное удовольствие. Eddy_Em(301 знак., 27.02.2025 15:02)
- В малинке есть куда, но даже и в любой абстрактной плате есть как
правило debug uart который лехко потянет ncurses. UEFI - это не
дос, а загрузчик OS с Shell'ом . RTFM дбл блд - =AlexD=(27.02.2025 14:28)
- Это как "натыкивать в живом устройстве", если у него монитор некуда
воткнуть? Eddy_Em(305 знак., 27.02.2025 09:56)
- Что-бы Device Tree Overlays не писать буковками и компилять компилятором, а натыкивать пальцем
в менюшечке прямо на живом устройстве наглядно и с
автоопределениями. - =AlexD=(27.02.2025 09:19)
- А зачем там биос? - SciFi(27.02.2025 09:14)
- Не нуди. Я уже столько раз оставлял, с его помощью, конкурентов в дураках, что тебя точно слушать не стану. - Cкpипaч(26.02.2025 22:38)
- Кремния в природе 75 % - так учили в советских школах. Не? И не
надо брать распберри в руки. Грязными, засратыми.... тем более...
Бегом к рукомойнику! Как говорил известный юморист: ... (напомнит
кто-нибудь к месту) - bnb62(26.02.2025 21:06)
- А кто мешает всё из него сделать? - Cкpипaч(26.02.2025 17:16)
- у меня там очень много. И кнопки, и моргание индикация, и масса таймаутов. - Лaгyнoв(26.02.2025 19:08)
- не-не-не, продолжение беседы должно быть в стиле bnb62 ;-) - =AlexD=(26.02.2025 17:21)
- А чо смеёшся-т, книгочей? изолированный штоле? 80 % выпускников не владеют проф навыками... bnb62(106 знак., 26.02.2025 19:19)
- Вот ей богу гении! Если работать "на грани"(что часто требуется
Заказчиком из тупой экономии), то даже нельзя "в принципе иметь события с любым таймингом". :) - bnb62(26.02.2025 19:07)
- Системный тик 1mS удобный лишь для целей таймаутов средств
синхронизаций не мешает в принципе иметь события с любым таймингом
и будить таймерными прерываниями коих типично много любую задачу и
процесс. - =AlexD=(26.02.2025 16:43)
- Ну я вот впервые встретил. До этого 15 лет называл его суперлупом,
что благозвучней. - Eddy_Em(26.02.2025 08:04)
- Main Loop! - SciFi(26.02.2025 08:08)
- Кто больше? ☺ - Eddy_Em(26.02.2025 08:44)
- while(1); - Cкpипaч(26.02.2025 08:55)
- А тело? Чисто на прерываниях мало что будет работать… - Eddy_Em(26.02.2025 09:32)
- А что заставляет вас так думать? :) На самом деле технических
ограничений нет, система вполне может быть построена чисто как
совокупность обработчиков прерываний. Любая. Cкpипaч(21 знак., 26.02.2025 09:54)
- Вообще не представляю себе, как! Уж больно замучишься приоритеты
расставлять в таком случае. Да и прерываний элементарно может не
хватить. Eddy_Em(131 знак., 26.02.2025 10:10)
- Одно радует - вы астроном, а не программист встраиваемых систем. В
принципе, достаточно ОДНОГО прерывания. От таймера. Cкpипaч(40 знак., 26.02.2025 16:24)
- Да я уж почти не астроном: забыл уже, когда последний раз
астрофизикой занимался. Eddy_Em(91 знак., 26.02.2025 16:54)
- Подучитесь! Я конечно понимаю то синдром Даннинга-Крюгера это самый
комфортный из возможных, но нельзя же позорить профессию. - Cкpипaч(26.02.2025 17:14)
- Ни времени, ни желания нет. Те более, RTOS мне однозначно никогда не понадобится. Eddy_Em(143 знак., 26.02.2025 17:35)
- Подучитесь! Я конечно понимаю то синдром Даннинга-Крюгера это самый
комфортный из возможных, но нельзя же позорить профессию. - Cкpипaч(26.02.2025 17:14)
- Да я уж почти не астроном: забыл уже, когда последний раз
астрофизикой занимался. Eddy_Em(91 знак., 26.02.2025 16:54)
- RTOS - это считай оно и есть, каждый тред можно рассматривать как
прерывание. - =AlexD=(26.02.2025 10:16)
- Если МК без ртоси не получается запрограммировать, то надо брать
уже полноценный одноплатник с линуксом на борту, а не пытаться
сделать невозможное! - Eddy_Em(26.02.2025 11:17)
- Бред Сивой Кобылы В Летнюю Ночь. Запрограммировать что угодно без чего угодно можно при достаточном
приложении сил. Хоть в битиках на тетради в клетку. Вопрос лишь в
удобстве, технологичности, модифицируемости и пр. Т.е. это вопрос
эффективности процесса разработки. - =AlexD=(26.02.2025 11:21)
- Ну, если "эффективности ради" начинают код генерить калокубом, то
это — просто финиш! Гнать такого "разработчика" ссаными тряпками
куда подальше! Eddy_Em(145 знак., 26.02.2025 11:49)
- Какая связь между RTOS и "калокубом"? Не нужно некомпетентность
выдавать за праведность ;-) - =AlexD=(26.02.2025 12:11)
- Кто-то в кубе код генерит, а кто-то вместо КА ртось заводит... - Eddy_Em(26.02.2025 13:22)
- ещё кто-то в Ардуине на асме кодит RTOS, чтобы в задаче в суперлупе
запускать КА из нестед-обработчика софт-прерывания - Vit(26.02.2025 14:13)
- И обязательно используя double ☺ - Eddy_Em(26.02.2025 14:17)
- Противопоставлять КА и RTOS - это всё равно что противопоставлять
биглуп и прерывания. Я же говорю, ты некомпетентен, не закапывай
себя глубже. - =AlexD=(26.02.2025 14:03)
- А мне нравится ☺ Eddy_Em(160 знак., 26.02.2025 14:14)
- Под RTOS делать развесистую клюкву сильно проще. И модульность
легче осуществляется. - LightElf(26.02.2025 14:17)
- Надо задачу придумать, которую невозможно решить без ртос (либо это
решение будет выполняться значительно дольше). - Eddy_Em(26.02.2025 14:27)
- Иногда правильно поставленный процесс важнее красивого разового результата. - LightElf(26.02.2025 15:54)
- Надо задачу придумать, которую невозможно решить без ртос (либо это
решение будет выполняться значительно дольше). - Eddy_Em(26.02.2025 14:27)
- Под RTOS делать развесистую клюкву сильно проще. И модульность
легче осуществляется. - LightElf(26.02.2025 14:17)
- А мне нравится ☺ Eddy_Em(160 знак., 26.02.2025 14:14)
- Настоящие мущщины кодят в хексе. А не этот ваш богомерзкий ассемблер, а тем более компилятор. - SciFi(26.02.2025 13:49)
- ещё кто-то в Ардуине на асме кодит RTOS, чтобы в задаче в суперлупе
запускать КА из нестед-обработчика софт-прерывания - Vit(26.02.2025 14:13)
- Кто-то в кубе код генерит, а кто-то вместо КА ртось заводит... - Eddy_Em(26.02.2025 13:22)
- Какая связь между RTOS и "калокубом"? Не нужно некомпетентность
выдавать за праведность ;-) - =AlexD=(26.02.2025 12:11)
- Ну, если "эффективности ради" начинают код генерить калокубом, то
это — просто финиш! Гнать такого "разработчика" ссаными тряпками
куда подальше! Eddy_Em(145 знак., 26.02.2025 11:49)
- Не редко программируя "МК без РТОС" вы незаметно для себя делаете очередную РТОС - AlexBi(26.02.2025 11:20)
- Бред Сивой Кобылы В Летнюю Ночь. Запрограммировать что угодно без чего угодно можно при достаточном
приложении сил. Хоть в битиках на тетради в клетку. Вопрос лишь в
удобстве, технологичности, модифицируемости и пр. Т.е. это вопрос
эффективности процесса разработки. - =AlexD=(26.02.2025 11:21)
- Если МК без ртоси не получается запрограммировать, то надо брать
уже полноценный одноплатник с линуксом на борту, а не пытаться
сделать невозможное! - Eddy_Em(26.02.2025 11:17)
- Одно радует - вы астроном, а не программист встраиваемых систем. В
принципе, достаточно ОДНОГО прерывания. От таймера. Cкpипaч(40 знак., 26.02.2025 16:24)
- чел в ДОС не играл:) - Vit(26.02.2025 10:01)
- Вообще не представляю себе, как! Уж больно замучишься приоритеты
расставлять в таком случае. Да и прерываний элементарно может не
хватить. Eddy_Em(131 знак., 26.02.2025 10:10)
- А что заставляет вас так думать? :) На самом деле технических
ограничений нет, система вполне может быть построена чисто как
совокупность обработчиков прерываний. Любая. Cкpипaч(21 знак., 26.02.2025 09:54)
- #define EVER ;; for(EVER) { ... } - SciFi(26.02.2025 08:58)
- А тело? Чисто на прерываниях мало что будет работать… - Eddy_Em(26.02.2025 09:32)
- while(1); - Cкpипaч(26.02.2025 08:55)
- Кто больше? ☺ - Eddy_Em(26.02.2025 08:44)
- Main Loop! - SciFi(26.02.2025 08:08)
- Да хоть залуперлуп - сущности разные. Есть пример: (Довлатов -
шутка) дядя зацикливыает в бесконечность демо-задачу, и
демонстрирует исполнение в лупе или стэйт-машине... Мэйн луп
работает невзирая на назначенный зависон! - Красиво. Но, так будет,
если созидатель ошибается в мизере кода, и расстраивается надолго,
но когда напортачил дохуа где (печаль моя чиста), то наверняка надо
открыть ящик стола (как в кинах)... Познание RTOS - очень полезное
достижение, наверное даже bnb62(526 знак., 26.02.2025 16:42 - 16:52)
- Это оно же самое, но другими словами. - _LightElf(26.02.2025 01:31,
- биглуп у меня давно обёрнут в очередь. но "задачи" сами просят поспать, и они до заказанного события выносятся из очереди (точнее сами себя помечают ожидающими/неактивными). те задачи, которые просят побудку чаще или вааще не засыпать, - те в приоритете. после появления события, совпадающего с заказанным, менеджер ставит "задачу" в ту же очередь (точнее помечает активной) - Vit(24.02.2025 21:30)
- Спасибо за идейки и рекомендации. Похоже, все-таки, придется кусок
процессинга уносить в отдельное прерывание и перекраивать всю
работу :-( - LightElf(24.02.2025 20:13)
- Ох не зря слово refactoring, на слух, состоит из fuck ^) - Cкpипaч(24.02.2025 20:26)
- По здравому размышлению - требуется задержка менее миллисекунды.
Что, в общем, не оставляет вариантов, кроме как разгребать IP
пакеты в прерывании. - LightElf(24.02.2025 20:28)
- Да. Это самый прямой путь. А значит самый короткий. Но миллисекунда
это довольно много, какая у вас тактовая? - Cкpипaч(24.02.2025 20:54)
- Прежде чем так инвазивно влезать, решил пока попробовать измерять
время, прошедшее от начала текущей итерации и если его уже много
набежало - выходить в начало цикла. Ну и еще несколько мелких
оптимизаций, типа: в итерации где была обработка принятого пакета -
не вызывать внутренние операции стека (ретрансмиты, arp и тыды). - _LightElf(26.02.2025 01:41,
)
- Надо обработать пакет в прерывании за время межпакетного интервала
10 Мбит ethernet, переслать посредством DMA в буфер, чтобы ничего
не терять. Cortex M0, 32 МГц. Посмотрел я на это дело, почесал репу
и как то интерес к CH579 угас слегка ;) Чип безусловно классный и
китайский стек вроде справляется, но с добавлением еще чего-нить
ресурсоемкого уже начнутся шаманские танцы с бубном... - Гyдвин(24.02.2025 21:51)
- С обычной работой по сети чипуля справляется норм, тут
специфическая задача вылезла - надо принять пакет, разобрать его,
сформировать другой пакет и его отправить. Критичный параметр -
стабильность задержки между приемом и отправкой. При первичной
отладке на столе вполне укладывалось, но в тесте на реальном железе
оказалось все не так весело. - _LightElf(24.02.2025 23:13,
)
- У меня подобное живёт на таймерах с наивысшим приоритетом. Аппаратный приём пакета с прерыванием высшего приоритета берёт текущее время из таймера. Затем планировщик рассчитывает время ответа так, чтобы оно было стабильным и чтобы данные были готовы к моменту отправки. Затем, по прерыванию таймера, инициируется отправка. И всё аппаратное, что связано с реальным временем и его точностью - имеет наивысший приоритет. Остальная обработка - поменьше, но всё равно выше, чем Nikolay_Po(11 знак., 24.02.2025 23:23)
- С обычной работой по сети чипуля справляется норм, тут
специфическая задача вылезла - надо принять пакет, разобрать его,
сформировать другой пакет и его отправить. Критичный параметр -
стабильность задержки между приемом и отправкой. При первичной
отладке на столе вполне укладывалось, но в тесте на реальном железе
оказалось все не так весело. - _LightElf(24.02.2025 23:13,
- Прежде чем так инвазивно влезать, решил пока попробовать измерять
время, прошедшее от начала текущей итерации и если его уже много
набежало - выходить в начало цикла. Ну и еще несколько мелких
оптимизаций, типа: в итерации где была обработка принятого пакета -
не вызывать внутренние операции стека (ретрансмиты, arp и тыды). - _LightElf(26.02.2025 01:41,
- Да. Это самый прямой путь. А значит самый короткий. Но миллисекунда
это довольно много, какая у вас тактовая? - Cкpипaч(24.02.2025 20:54)
- По здравому размышлению - требуется задержка менее миллисекунды.
Что, в общем, не оставляет вариантов, кроме как разгребать IP
пакеты в прерывании. - LightElf(24.02.2025 20:28)
- Ох не зря слово refactoring, на слух, состоит из fuck ^) - Cкpипaч(24.02.2025 20:26)
- Если есть событие и его обработка в задаче - на начало биглупа
потом перехожу. Чем ближе к началу по тексту - тем выше приоритет. - Andreas(24.02.2025 19:13)
- Ага, тож на такое думаю. Если что долгое выполнилось - то выполнять
continue. Тады ближе к началу цикла - выше приоритет. - LightElf(24.02.2025 19:17)
- А не боитесь получить гонки сигналов, в виде эпизодов,
длительностью полторы-две секунды, когда "почему-то" до
низкоприоритетной задачи вообще не доходит управление? - Cкpипaч(24.02.2025 19:25)
- Не, у меня таких длинных задач нет. Все долгое порублено на отдельные состояния и выполняется кусками в несколько проходов. - LightElf(24.02.2025 20:10)
- Так это не для высоконагруженных задач, так, уменьшить время
реакции на некоторые события. Нечасто применяю, но иногда удобно. - Andreas(24.02.2025 19:29)
- Не понимаю. Сколько у вас наихудшее ожидаемое полное время
выполнения цикла биглуп? - Cкpипaч(24.02.2025 19:33)
- Это что-то на умном. Есть 5...7..10 обработчиков флагов(в т.ч таймеров) по 50..100мкс и такая система позволяет каждые 100мкс опрашивать самое важное и чуть с большим разбросом менее важное. Например прием DMX RC5 и что-то еще подобное. Пропуски возможны, но нежелательны/ - Andreas(24.02.2025 19:43)
- Не понимаю. Сколько у вас наихудшее ожидаемое полное время
выполнения цикла биглуп? - Cкpипaч(24.02.2025 19:33)
- А у вас задачи не оформлены как функции? У меня, полный прогон
биглупа со всеми функциями укладывается в одну милисекунду (а может
быть и в сто раз меньше, давно не мерял). Cкpипaч(109 знак., 24.02.2025 19:22)
- Если надо быстро где-то не в прерывании и приоритеты важны, то идут
if по флагам и если флаг установлен и вызвана функция обработки, то
потом не дальше, а в начало. - Andreas(24.02.2025 19:26)
- Непонятно. Предполагается что "инкапсуляция данных" есть правильный
дзен и биглуп ничего не знает о флагах и прочей внутренней кухне
задач в нём. Или у вас "инкапсуляция - не догма"? - Cкpипaч(24.02.2025 19:31)
- Не, не догма, это для небольших проектов. Зато позволяет некоторые
прерывания поллингом заменить. - Andreas(24.02.2025 19:34)
- А зачем заменять прерывания поллингом? (я не зануда, но у меня тоже
очень небольшие проекты и очень интересен ваш опыт) - Cкpипaч(24.02.2025 19:37)
- Чтобы в приоритетах не запутаться, не на все прерывания есть. Это
не отменяет ессно прерывания, но позволяет сократить их число и
длительность. - Andreas(24.02.2025 19:46)
- Там где нет прерываний я использую прерывание от таймера. Одно.
Этакий "биглуп на выезде". - Cкpипaч(24.02.2025 19:54)
- А что это дает, кроме фиксированного кванта времени? - Andreas(24.02.2025 19:56)
- Ничего. Это единственная цель. - Cкpипaч(24.02.2025 19:59)
- А что это дает, кроме фиксированного кванта времени? - Andreas(24.02.2025 19:56)
- Там где нет прерываний я использую прерывание от таймера. Одно.
Этакий "биглуп на выезде". - Cкpипaч(24.02.2025 19:54)
- Чтобы в приоритетах не запутаться, не на все прерывания есть. Это
не отменяет ессно прерывания, но позволяет сократить их число и
длительность. - Andreas(24.02.2025 19:46)
- А зачем заменять прерывания поллингом? (я не зануда, но у меня тоже
очень небольшие проекты и очень интересен ваш опыт) - Cкpипaч(24.02.2025 19:37)
- Не, не догма, это для небольших проектов. Зато позволяет некоторые
прерывания поллингом заменить. - Andreas(24.02.2025 19:34)
- Непонятно. Предполагается что "инкапсуляция данных" есть правильный
дзен и биглуп ничего не знает о флагах и прочей внутренней кухне
задач в нём. Или у вас "инкапсуляция - не догма"? - Cкpипaч(24.02.2025 19:31)
- Оформлены как функции. Но иногда в одном проходе цикла срабатывают
несколько функций (у одной таймаут истек, у другой событие
пробуждающее появилось, у третьей еще какая шляпа). И задача,
сидящая в начале списка (конкретно - разбор принятых пакетов
Ethernet) очень долго ждет своей очереди. Происходит такое нечасто,
но очень неприятно. - LightElf(24.02.2025 19:24)
- Может быть проще между задачами всегда давать квант времени ethernet'у? - Cкpипaч(24.02.2025 19:28)
- Хорошая идея, спасибо! - LightElf(24.02.2025 19:31)
- Применяю для длительных операций пара-тройку программных "задержек"
в которых и выгребаю то, что пришло в ethernet. Что то срочное
выполняю сразу. Несрочное буферизуется/взводятся флаги. Ну а
"суперсрочное" - в прерываниях. Ну и до сих пор сижу на ENC28 с
аппаратным буфером пакетов - жрут немеряно, но сильно облегчают
жизнь ;) - Гyдвин(24.02.2025 19:47)
- А при использовании прототредов это получается "само". Если медленная задача чего-то ждёт - вызывает при этом xxx.Run() от быстрых. - Samx(25.02.2025 23:32)
- CH579, ептыть. Походу я достиг его пределов ;-) А то, что он
Cortex-M0 и в нем нет DWT->CYCCNT воздуха тоже не озонирует,
тому що профайлить непонятно как. - LightElf(24.02.2025 19:51)
- Да я в курсе откуда ноги растут :) - Гyдвин(24.02.2025 20:16)
- Да, не было бабе забот - завела порося ;-) - LightElf(24.02.2025 20:26)
- Да я в курсе откуда ноги растут :) - Гyдвин(24.02.2025 20:16)
- Применяю для длительных операций пара-тройку программных "задержек"
в которых и выгребаю то, что пришло в ethernet. Что то срочное
выполняю сразу. Несрочное буферизуется/взводятся флаги. Ну а
"суперсрочное" - в прерываниях. Ну и до сих пор сижу на ENC28 с
аппаратным буфером пакетов - жрут немеряно, но сильно облегчают
жизнь ;) - Гyдвин(24.02.2025 19:47)
- Хорошая идея, спасибо! - LightElf(24.02.2025 19:31)
- Какова ожидаемая худшая длительность цикла? Все же событие ethernet может не обязательно в начале биглуп произойти... - Cкpипaч(24.02.2025 19:27)
- Может быть проще между задачами всегда давать квант времени ethernet'у? - Cкpипaч(24.02.2025 19:28)
- Если надо быстро где-то не в прерывании и приоритеты важны, то идут
if по флагам и если флаг установлен и вызвана функция обработки, то
потом не дальше, а в начало. - Andreas(24.02.2025 19:26)
- А не боитесь получить гонки сигналов, в виде эпизодов,
длительностью полторы-две секунды, когда "почему-то" до
низкоприоритетной задачи вообще не доходит управление? - Cкpипaч(24.02.2025 19:25)
- Ага, тож на такое думаю. Если что долгое выполнилось - то выполнять
continue. Тады ближе к началу цикла - выше приоритет. - LightElf(24.02.2025 19:17)
- Но зачем, Карл? У меня часть задач в биг-луп вызывается не каждый
прогон, а с фильтрацией по времени. Например, не чаще раза в 100мс,
раза в 1секунду, в 10 секунд, etc. Это оно? - Cкpипaч(24.02.2025 19:05 - 19:11)
- +1 - Лaгyнoв(25.02.2025 08:15)
- Я тоже так делаю - scorpion(24.02.2025 19:06)
- Вкладываю задачи в прерывания. Назначаю прерываниям приоритеты. И
вызываю потом из биг лупа, их вызывает аппаратура или запускаются
друг-из-друга. Если есть несколько конкурирующих задач, то их
выполнение идёт согласно приоритетам их прерываний, с учётом групп
вытеснения. Nikolay_Po(248 знак., 24.02.2025 19:10)
- Думаю о перекладывании части обработки в прерывание, много поменять
придется. - LightElf(24.02.2025 19:26)
- Достаточно флаги вывешивать, когда обработка в прерывании закончена. И биг луп по флагам отработает дальше. Пусть крутится, пока не готово. А как будет готово - зайдёт в соответствующую ветвь кода. У меня в биглупе, в фоне, работает приборка, управление верхним уровнем SPI FLASH. Цепочка действий запускается командой из биг лупа, из биг лупа же контролируются этапы конечного автомата FLASH. При этом, работа с SPI - на прерываниях и с DMA. По окончании вывешивает флаги или Nikolay_Po(34 знак., 24.02.2025 22:21)
- Думаю о перекладывании части обработки в прерывание, много поменять
придется. - LightElf(24.02.2025 19:26)