Страница 1 из 2
AVR и FreeRTOS (Многозадачность)
Добавлено: 19.08.2022{, 18:23}
Dryundel
Обсуждаем все что связано с FreeRTOS на AVR
- Плюсы минусы FreeRTOS на AVR
- Проблемы
- Наработки
- Интеграция FreeRTOS в FLProg
Итак, начнем с того, как установить и пользоваться FreeRTOS на AVR.
- В Arduino IDE заходим в управление библиотеками
- Набираем в строке поиска FreeRTOS
- Устанавливаем FreeRTOS для AVR
.
Ну а теперь можно опробовать "Диспетчер задач" этого самого FreeRTOS
Пример с delay() 3 задачи (Blink) работающие параллельно и с выводом результатов в UART.
Пример со специальным vTaskDelay(), те же 3 задачи (Blink) работающие параллельно и с выводом результатов в UART.
Разницы не заметил. (Тестировал на NANO)
В чем фишка vTaskDelay(). я пока не понял, потому как только сегодня потрогал этот FreeRTOS за вымя.
Вероятно что-то там с таймингами связано, т.к. используются не мс, а какие то "попугаи". (будем разбираться).
.
Тут один наш товарищ
artemka19, выдвигал теорию, что все это туфта и с общим UART работать не будет.
Здесь
artemka19 писал(а): ↑19.08.2022{, 16:12}
когда будет пример - обсудим.
Теорию с uart я уже привел выше.
artemka19 писал(а): ↑19.08.2022{, 15:11}
простой пример:
-вывод в юарт
-две задачи
-в rtos для Каждой задачи нужно будет запускать Свой экземпляр Serial.begin
Так вот теория оказалась лишь теорией. Как бы все отлично работает.
Что скажешь,
artemka19? Обсудим теперь?
AVR и FreeRTOS (Многозадачность)
Добавлено: 19.08.2022{, 18:56}
artemka19
Dryundel писал(а): ↑19.08.2022{, 18:23}
Что скажешь, artemka19? Обсудим теперь?
Dryundel писал(а): ↑19.08.2022{, 18:23}
Тут один наш товарищ artemka19, выдвигал теорию, что все это туфта и с общим UART работать не будет
вот так значит?)
туфта - это все верно. но только для мелких камней.
Почему?
да потому что нужно запускать для КАЖДОЙ задачи тот же самый Serial.begin.
А что произойдет, если это делать в каждой задаче и использовать что нибудь потяжелее? с память что будет?
Отправлено спустя 3 минуты 58 секунд:
Dryundel писал(а): ↑19.08.2022{, 18:23}
Как бы все отлично работает.
это до определенного момента:
"...нужно каждый раз вручную переконфигурировать интерфейс. Т.е., допустим, у вас есть два устройства на SPI, но работают они на разных скоростях. Вы должны перед использованием каждый раз настроить SPI (chip select тот же), т.е. сам класс не содержит в себе защиту насчёт использования "параллельно". Точно также обёртка над каким-то другим интерфейсом может содержать какие-то конфигурационные настройки, которые не предполагают совместное использование. Т.е. потоки могут обращаться к одной и той же памяти внутри класса-обёртки, а вы знать об этом не знаете, пока глюки не начнутся...."
Отправлено спустя 1 минуту 4 секунды:
вот тут уже приземляли подобные шальные мысли))))
https://arduino.ru/forum/programmirovan ... ibliotekam
AVR и FreeRTOS (Многозадачность)
Добавлено: 19.08.2022{, 19:03}
artemka19
вот оттуда еще опыт использования:
"...Пробовал я FreeRTOS на нане. Помигал диодиком. Вывел на экран ПРИВЕТ МИР. Здесь память кончилась. Ничего больше из задач добавить не получилось. Ушёл на STM32. Там получилось поднять 6 задач. В том числе сеть и CD карту и тачь. Меги у меня нет. Про неё ничего не скажу, но на более мелких FreeRTOS это игрушка. Отсутствие приоритетов прерываний сильно затрудняет применение RTOS. ..."
AVR и FreeRTOS (Многозадачность)
Добавлено: 19.08.2022{, 19:03}
Phazz
А подумайте почему этот Джо неуловим?
AVR и FreeRTOS (Многозадачность)
Добавлено: 19.08.2022{, 19:05}
artemka19
Dryundel писал(а): ↑19.08.2022{, 18:23}
Обсудим теперь?
учитывая что эта тема с FreeRTOS так и не взлетела с 2017, то наверное и смысла нет "изобретать велосипед"
AVR и FreeRTOS (Многозадачность)
Добавлено: 19.08.2022{, 19:08}
Phazz
Это наверное нужно чтобы впихнуть невпихуемое. Но нам проще купить камушек помощнее. Подход Ecoins намного понятнее и то не сильно заходит основной массе.
AVR и FreeRTOS (Многозадачность)
Добавлено: 19.08.2022{, 19:09}
artemka19
Dryundel писал(а): ↑19.08.2022{, 18:23}
с общим UART работать не будет
я кстати об этом не говорил)))
перечитай тот пост)
AVR и FreeRTOS (Многозадачность)
Добавлено: 19.08.2022{, 19:11}
artemka19
Phazz писал(а): ↑19.08.2022{, 19:08}
Но нам проще купить камушек помощнее
там во freeRtos вся засада в том, что все библиотеки (в ардуино ide) не заточены под многпоточность.
А вот у ecoins как раз с этим нет проблем
AVR и FreeRTOS (Многозадачность)
Добавлено: 19.08.2022{, 19:13}
Dryundel
artemka19 писал(а): ↑19.08.2022{, 19:00}
туфта - это все верно. но только для мелких камней.
Почему?
да потому что нужно запускать для КАЖДОЙ задачи тот же самый Serial.begin.
artemka19, Вы пример смотрели? Или тупо идете за пастухом?
Где Вы увидели
"нужно запускать для КАЖДОЙ задачи тот же самый Serial.begin" ?
.
artemka19 писал(а): ↑19.08.2022{, 19:00}
А что произойдет, если это делать в каждой задаче и использовать что нибудь потяжелее? с память что будет?
А что будет? Вы нам и расскажите, раз знаете. Я пока не в курсе. Что знал, то сказал. Только не теорию двигайте, а на практике аргументируйте пожалуйста.
artemka19 писал(а): ↑19.08.2022{, 19:00}
...нужно каждый раз вручную переконфигурировать интерфейс. Т.е., допустим, у вас есть два устройства на SPI, но работают они на разных скоростях. Вы должны перед использованием каждый раз настроить SPI (chip select тот же), т.е. сам класс не содержит в себе защиту насчёт использования "параллельно".
Вы это все реально знаете? Или копипастите откуда то?
Если это не голая теория, да еще чья нибудь чужая, тогда выложите пример с глюками пожалуйста, будем разбираться.
artemka19 писал(а): ↑19.08.2022{, 19:00}
Т.е. потоки могут обращаться к одной и той же памяти внутри класса-обёртки, а вы знать об этом не знаете, пока глюки не начнутся...."
А вот на этот случай и были придуманы мьютексы. Но об этом позже.
А пока, ждем примеров, обоснований и реальных (не теоретических) заключений.
AVR и FreeRTOS (Многозадачность)
Добавлено: 19.08.2022{, 19:15}
artemka19
Dryundel писал(а): ↑19.08.2022{, 19:13}
Только не теорию двигайте, а на практике аргументируйте пожалуйста.
не не не - дальше сами)))
*я пока что пересяду в зрительский зал)
AVR и FreeRTOS (Многозадачность)
Добавлено: 19.08.2022{, 19:20}
Dryundel
Теперь понятно откуда все попипасты.
artemka19 писал(а): ↑19.08.2022{, 19:15}
не не не - дальше сами)))
*я пока что пересяду в зрительский зал)
Слился. Слабак.
________________
Тока пожалуйста не обижайтесь. Я же шутя.
AVR и FreeRTOS (Многозадачность)
Добавлено: 19.08.2022{, 19:22}
artemka19
Dryundel писал(а): ↑19.08.2022{, 19:20}
Слился. Слабак
Скетч точно смотрел?
нужно ТРИ РАЗНЫХ СКОРОСТИ для юарта.
вот на них пример многопоточности был бы интересен.
А этот пример - это туфта.
Отправлено спустя 1 минуту 8 секунд:
artemka19 писал(а): ↑19.08.2022{, 19:01}
Т.е., допустим, у вас есть два устройства на SPI, но работают они на разных скоростях.
вот тут я об этом уже говорил
AVR и FreeRTOS (Многозадачность)
Добавлено: 19.08.2022{, 19:25}
artemka19
Таким образом нам нужно для ТРЕХ РАЗНЫХ СКОРОСТЕЙ, ЗАПУСТИТЬ ТРИ ЭКЗЕМПЛЯРА КЛАССА ИЗ БИБЛИОТЕКИ.
ну и в три раза больше выделить под это дело памяти)
и не забываем - что все должно быть на ОДНОМ юарте. (!)
AVR и FreeRTOS (Многозадачность)
Добавлено: 19.08.2022{, 19:27}
artemka19
Dryundel писал(а): ↑19.08.2022{, 19:20}
Тока пожалуйста не обижайтесь. Я же шутя.
да все
тема конечно заманчивая....но но но
AVR и FreeRTOS (Многозадачность)
Добавлено: 19.08.2022{, 19:32}
artemka19
Dryundel писал(а): ↑19.08.2022{, 19:20}
Теперь понятно откуда все попипасты.
а что там не так?)
там лгут?)
чтобы запустить отправить например в юарт на скорости 9600 - нам нужно:
1- "Serial.begin(9600)"
2-тут отправляем/принимаем
3-теперь нам в следующей задаче нам нужно сделать то же самое но на 115200.
А это значит что в шаге 3 нам нужно остановить Serial, чтобы в новой задаче сделать "Serial.begin(115200)"
Все верно?
AVR и FreeRTOS (Многозадачность)
Добавлено: 19.08.2022{, 19:35}
Dryundel
artemka19 писал(а): ↑19.08.2022{, 19:24}
Скетч точно смотрел?
нужно ТРИ РАЗНЫХ СКОРОСТИ для юарта.
вот на них пример многопоточности был бы интересен.
А как это Вы решаете в линейном коде? Задаете три разных скорости в одном Setup() ?
Очень интересно.
И в каких это случаях требуется на один UART задавать разные скорости в ходе исполнения программы? Я реально не знаю. Поясните пожалуйста.
artemka19 писал(а): ↑19.08.2022{, 19:24}
artemka19 писал(а): ↑22 минуты назад
Т.е., допустим, у вас есть два устройства на SPI, но работают они на разных скоростях.
...
вот тут я об этом уже говорил
Т.е. предлагаете теперь крутануться на пупе с SPI?
А покажите как Вы решаете эту задачу при линейном исполнении кода.
AVR и FreeRTOS (Многозадачность)
Добавлено: 19.08.2022{, 19:38}
artemka19
Dryundel писал(а): ↑19.08.2022{, 19:35}
А как это Вы решаете в линейном коде? Задаете три разных скорости в одном Setup() ?
вот в линейной это как раз и решается просто и в лоб:
1- "Serial.begin(9600)"
2-тут отправляем/принимаем
3-Serial.stop
3-Serial.begin(115200)
4-тут отправляем/принимаем
5-Serial.stop
И это прекрасно работает прямо из loop.
НО ведь мы же о другом сейчас?
Мы же про ОДНОВРЕМЕННО работающие Serial.begin НА ТРЕХ РАЗНЫХ скоростях для ОДНОГО юарта
AVR и FreeRTOS (Многозадачность)
Добавлено: 19.08.2022{, 19:43}
artemka19
Dryundel писал(а): ↑19.08.2022{, 19:35}
И в каких это случаях требуется на один UART задавать разные скорости в ходе исполнения программы?
вот пример:
Отправлено спустя 4 минуты 54 секунды:
а это реализация переключения скорости юарт на лету (в линейной версии):
AVR и FreeRTOS (Многозадачность)
Добавлено: 19.08.2022{, 20:47}
Dryundel
artemka19 писал(а): ↑19.08.2022{, 19:48}
а это реализация переключения скорости юарт на лету (в линейной версии):
нано-смена скорости юарт на лету.flp
Экзотика.
Пока ответа нет. Уел.
AVR и FreeRTOS (Многозадачность)
Добавлено: 19.08.2022{, 21:02}
ecoins
Имеющимися блоками UART от FLProg изменить скорость наверное не получится.
Перед новой Serialx.begin() вроде придется выполнять Serialx.end();