Anonymous
Не понял к чему это.
А я не понял каким боком вы термины синхронный и асинхронный прилепили к программному обеспечению
SetPf
Не я прилепил. =)
Anonymous
Так везде. Если два обработчика связаны у вас то это 'асинхронное ' у вас
SetPf
Так везде. Если два обработчика связаны у вас то это 'асинхронное ' у вас
Нет. Вы меня не верно понимаете, я это нигде не писал и не подразумевал. Если 2 обработчика в разных тасках то они асинхронны. Как то так.
Anonymous
Нет. Вы меня не верно понимаете, я это нигде не писал и не подразумевал. Если 2 обработчика в разных тасках то они асинхронны. Как то так.
Да, я вас не понимаю. Если у вас есть два связанных обработчика то это синхронно но если они передают друг другу данные то это асинхронно
Anonymous
Или наоборот,
SetPf
Это вопрос?
SetPf
Про вот связанные обработчики, обменивающиеся данными, синхронные. Как я понимаю это.
Anonymous
https://en.wikipedia.org/wiki/Asynchrony_(computer_programming)
А можно такую же статью про 'синхронное программирование'? А то как-то половина только
Anonymous
Судя по коду там не 'синхронный' а последовательный вызов функций.
Anonymous
Эмм программ каунтер?
И к чему программ каунтер синхронен?
Anonymous
Извините. Какой-то непонятный разговор непонятно о чём. Задача ваша мне не понятна. Слов много а смысл где-то потерялся.
SetPf
И к чему программ каунтер синхронен?
Вы пытаетесь по-моему железный термин натянуть. HandlerA синхронен с HandlerB, синхронизирует их последовательность выполнения кода, которая и задается PC
SetPf
Вот асинхронный вариант.
SetPf
Я повторюсь, я допускаю, что путаю терминологи, но тогда - ваша альтернатива.
Anonymous
Если уж применять слово 'синхронный' к программному обеспечению, то скорее это когда одновременно несколько задач начинают обработку по общему сигналу синхронизации
Anonymous
Что явно не похоже на вызов функций друг за дружкой
SetPf
https://habr.com/ru/post/453192/
SetPf
Вот как вариант.
SetPf
Что явно не похоже на вызов функций друг за дружкой
Синхронность != одновременность же.
Anonymous
https://habr.com/ru/post/453192/
Так вы сказали что у вас синхронно когда в одном таске? Зачем кидать ссылку на синхронность процессов?
Anonymous
Синхронность != одновременность же.
Как раз синхронность и означает одновременность. Потому я вас и не могу понять, что у вас синхроность означает что-то другое
SetPf
Вам в споре победить или истину я не понимаю? Там же есть термины ниже, синхронные действия процесса и асинхронные действия процесса.
SetPf
Я с вами не спорю. Я говорю что не понимаю ваших описаний
https://stackoverflow.com/questions/748175/asynchronous-vs-synchronous-execution-what-does-it-really-mean/748235 Ну я пользовался, как я считал общеизвестными и принятыми терминами. Сейчас я уже не уверен сам... Там по всему интернету срачи 1 в 1.
Andy
Возможно имеет смысл обновить понимание FreeRTOS вот отсюда: http://microsin.ru/content/view/1304/44/ и обсуждать конкретный вопрос в применении к конкретному решению, т.к. на общие вопросы есть только общие ответы :)
Andy
Да тут обсуждение сейчас конкретизировалось до определения терминов не порожденных самим фриртосом.
На мой взгляд наоборот - от конкретной ОС уехали к попыткам определения общих терминов. Либо взять какое-то определение терминов и договорится что вот это и есть асинхронность и двигаться дальше. Либо рассмотреть конкретную реализацию. Типа "сглаживание сигнала от АЦП на частоте 100 МГц с усреднением за 5 мс" :)
-=SS=-
ребят, выручайте. Имеется ESP8266 01, будет управлять реле, при этом нужно получать статусы с поплавка, использовать решил прошивку Tasmota. Все отлично, прошил настроил, поплавок к GPIO2+GND прицепил. НО! Есть косяк, если поплавок взведен, он замыкает GPIO2+GND, если в этот момент перезапустить esp, то он при загрузке запускается в режиме прошивки.
-=SS=-
Может я что-то неправильно подключил, или есть какие-то возможности сделать так, что бы я не терял связь с esp после перезапуска при взведенном поплавке.
-=SS=-
Очевидное решение - сменить вход датчика, например перекинуть на uart rx
Простите, не силен в этом пока. ПОдскажите, где взять uart на esp8266 01 и как
-=SS=-
Очевидное решение - сменить вход датчика, например перекинуть на uart rx
спасибо за наводку, сделал RX+GND, после рестарта не уходит в прошивку
Andy
Простите, не силен в этом пока. ПОдскажите, где взять uart на esp8266 01 и как
Uart rx это нога GPIO 3 в чипе. Т.е. надо выключить uart на ней и включить режим ввода-вывода
Alexey
Почитал диалог по фриртосу. Тема интересная и вопрос достаточно конкретный. Он в целом про организацию программ. На всякий случай напомню, вопрос про то, как лучше сделать: так на каждый модуль или у модуля метод Handle и его дергать из одного таска. Лично я использую и то и другое. Например опрос кнопок (со всякими антидребизгами, эвентами) выполняется просто через Handle. А некоторые модули, вроде телнет консоли, дисплея или чего-то относительно большого выполняются в своих потоках.
Alexey
Но я тоже до сих пор задаюсь вопросом как делать правильно...
Alexey
https://www.beningo.com/pdf/RTOS%20Best%20Practices2.pdf вот такая штука есть по TROS
SetPf
Почитал диалог по фриртосу. Тема интересная и вопрос достаточно конкретный. Он в целом про организацию программ. На всякий случай напомню, вопрос про то, как лучше сделать: так на каждый модуль или у модуля метод Handle и его дергать из одного таска. Лично я использую и то и другое. Например опрос кнопок (со всякими антидребизгами, эвентами) выполняется просто через Handle. А некоторые модули, вроде телнет консоли, дисплея или чего-то относительно большого выполняются в своих потоках.
Вообще с инфой по архитектуре в дребедендед какой то дефицит. Я так навскидку только доисторические статьи дихальта вспомню. Но они скорее вводные и очень общие. Я вот себе принципы вывел какие то, нахватав из других сфер, с миру по нитке и стараюсь их придерживаться. Но блин, видя чужие решения, каждый раз WTF происходит, и увидя мои думаю тоже самое произойдет.
Alexey
Телнет консоль для себя делал, очень быстро, просто чтобы отлаживать много плат не цепляя провода. Естественно реализация страшная. Консоль скорее ардуино стайл: ввел команду, она спросила аргументы, ввел их. Ну и лог дублирует в телнет. По причине страшности и костылей свой код пока выкладывать не буду, но выложу два примера из которых я это и сделал: 1) https://github.com/huming2207/esp-remote-log - тут типо либы, в описании пример 2) https://github.com/nkolban/esp32-snippets/tree/faf2839905c908777a7dbdefd7eb9f933b0f1716/networking/telnet
Alexey
Сначала хотел сделать телнет драйвер для esp console компонента, но по умолчанию телнет/неткат работают со строками, то есть чтобы были всякие подсказки команд и прочее надо менять режим. Это лишние действия + на разных платформах может работать по-разному. Поэтому оставил простую консоль. Это ведь в любом случае для дебага, а там супер консоль и не нужно
romanetz
есть ещё глобальные переменные
romanetz
часто с ними можно куда проще сделать, чем плодить семафоры, мютексы, очереди и прочую фриртосню
romanetz
сокеты если спецом в неблокирующий режим не переводить - вот тут, получается, асинхронщина и нужна. это в отдельный таск, ясен пень
Alexey
Ну да, такой момент тоже есть. А еще на esp слишком дохрена ресурсов, что порой просто не охото думать "как лучше", просто делаешь "по-тупому" и все
romanetz
ну и ещё - выделяю большие части программы в самомтоятельные таски, а разделяемые ресурсы обгораживаю семафором
Юрий
есть ещё глобальные переменные
Я тут недавно интересовался по поводу обмена данными между задачами, узнал что глобальные переменные это плохо, потом нашел причину падения моего кода, сейчас пока работает, никаких очередей пока не добавлял, жду вылезет косяк или нет😁
romanetz
АЦП - если мы это в инженерные величины переводим - то значит задача не шибко спешная ЦОСня требует максимума производительности всё же. Колбэки и указатели наше всё в таком случае
romanetz
можно для примера рассмотреть потоковое радио с i2s выходом, которое мп3 играет
romanetz
вот уж где многопоточность в полный рост напрашивается
Andy
Вопрос в цене : в плюс надежность (мы же про МК! ), возможность развития кода (не универсальность!), легко читаемость кода (меньше порог вхождения), в минус - затраты на переключение задач, затраты на кодирование.
romanetz
Вопрос в цене : в плюс надежность (мы же про МК! ), возможность развития кода (не универсальность!), легко читаемость кода (меньше порог вхождения), в минус - затраты на переключение задач, затраты на кодирование.
на чистом Си читаемость максимальная ну и развитие кода - да, но много аппаратно-специфичных вещей пример: usb стек "старый" на stm32f103 вместе с полезной нагрузкой влазит в 10 килобайт кода, а HAL - в 19
romanetz
HAL переносится на f4 серию спокойно, но нафига?...
Alexey
HAL переносится на f4 серию спокойно, но нафига?...
чтобы писать платформонезависимый код...
romanetz
чтобы писать платформонезависимый код...
ну если заказчик хочет этот продукт сделать на максимально дешёвом МК?
Alexey
ардуино либы таким страдают
SetPf
чтобы писать платформонезависимый код...
Ну оно на практике выливается скорее в то, что бы писать код легко подвергающийся рефакторингу. Это к слову минус по отношению к использованию глобальных переменных.
Alexey
ну если заказчик хочет этот продукт сделать на максимально дешёвом МК?
ну тыт либо платишь за разработку и экономишь на больших партиях, либо наоборот
romanetz
Andy
можешь почитать сырцы Qt, чтобы оценить глубину пиздеца на плюсах
опять же зависит от квалификации программиста, вроде кто-то тут хорошую мысль писал : "Написать код понятный машине может любой идиот, а написать код понятный другому программисту может только профессионал!" (с)
Anonymous
на чистом Си читаемость максимальная ну и развитие кода - да, но много аппаратно-специфичных вещей пример: usb стек "старый" на stm32f103 вместе с полезной нагрузкой влазит в 10 килобайт кода, а HAL - в 19
Какая знакомя ситуация. Взяли 'старый' код, запустили изделие в производство. Через полтора года проблема. Оказалось что 'старый' код не поддерживает флешки больше 4гигабайт. А в продаже меньше 8 уже не найти.
Anonymous
Только это на f205 было
Anonymous
При чем на HAL можно было бы обновить библиотеку и пересобрать. А 'старая' это куски кода в перемешку с другим кодом. Сэкономили, ну
romanetz
Странно
romanetz
С учётом того, что размер блока на флешке 512 байт
romanetz
И MSC работает с четырёхбайтным номером блока