AVR и FreeRTOS (Многозадачность)

Здесь можно поболтать на отвлечённые темы. Реклама не допускается.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

AVR и FreeRTOS (Многозадачность)

#1

Сообщение Dryundel » 19.08.2022{, 18:23}

Обсуждаем все что связано с FreeRTOS на AVR
- Плюсы минусы FreeRTOS на AVR
- Проблемы
- Наработки
- Интеграция FreeRTOS в FLProg


Итак, начнем с того, как установить и пользоваться FreeRTOS на AVR.
- В Arduino IDE заходим в управление библиотеками
- Набираем в строке поиска FreeRTOS
- Устанавливаем FreeRTOS для AVR
1.jpg
.
Ну а теперь можно опробовать "Диспетчер задач" этого самого FreeRTOS
Пример с delay() 3 задачи (Blink) работающие параллельно и с выводом результатов в UART.
3_Task_AVR_FreeRTOS_Delay.ino
(1.01 КБ) 43 скачивания
Пример со специальным vTaskDelay(), те же 3 задачи (Blink) работающие параллельно и с выводом результатов в UART.
3_Task_AVR_FreeRTOS.ino
(1.17 КБ) 31 скачивание
Разницы не заметил. (Тестировал на NANO)
В чем фишка vTaskDelay(). я пока не понял, потому как только сегодня потрогал этот FreeRTOS за вымя. :)
Вероятно что-то там с таймингами связано, т.к. используются не мс, а какие то "попугаи". (будем разбираться).
.
Тут один наш товарищ artemka19, выдвигал теорию, что все это туфта и с общим UART работать не будет. Здесь
artemka19 писал(а):
19.08.2022{, 16:12}
когда будет пример - обсудим.
Теорию с uart я уже привел выше.
artemka19 писал(а):
19.08.2022{, 15:11}
простой пример:
-вывод в юарт
-две задачи
-в rtos для Каждой задачи нужно будет запускать Свой экземпляр Serial.begin
Так вот теория оказалась лишь теорией. Как бы все отлично работает.
Что скажешь, artemka19? Обсудим теперь?

artemka19
Лейтенант
Сообщения: 540
Зарегистрирован: 03.09.2020{, 15:41}
Репутация: 216
Откуда: Питер
Имя: Артем

AVR и FreeRTOS (Многозадачность)

#2

Сообщение artemka19 » 19.08.2022{, 18:56}

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

artemka19
Лейтенант
Сообщения: 540
Зарегистрирован: 03.09.2020{, 15:41}
Репутация: 216
Откуда: Питер
Имя: Артем

AVR и FreeRTOS (Многозадачность)

#3

Сообщение artemka19 » 19.08.2022{, 19:03}

вот оттуда еще опыт использования:

"...Пробовал я FreeRTOS на нане. Помигал диодиком. Вывел на экран ПРИВЕТ МИР. Здесь память кончилась. Ничего больше из задач добавить не получилось. Ушёл на STM32. Там получилось поднять 6 задач. В том числе сеть и CD карту и тачь. Меги у меня нет. Про неё ничего не скажу, но на более мелких FreeRTOS это игрушка. Отсутствие приоритетов прерываний сильно затрудняет применение RTOS. ..."

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

AVR и FreeRTOS (Многозадачность)

#4

Сообщение Phazz » 19.08.2022{, 19:03}

А подумайте почему этот Джо неуловим?

artemka19
Лейтенант
Сообщения: 540
Зарегистрирован: 03.09.2020{, 15:41}
Репутация: 216
Откуда: Питер
Имя: Артем

AVR и FreeRTOS (Многозадачность)

#5

Сообщение artemka19 » 19.08.2022{, 19:05}

Dryundel писал(а):
19.08.2022{, 18:23}
Обсудим теперь?
учитывая что эта тема с FreeRTOS так и не взлетела с 2017, то наверное и смысла нет "изобретать велосипед"

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

AVR и FreeRTOS (Многозадачность)

#6

Сообщение Phazz » 19.08.2022{, 19:08}

Это наверное нужно чтобы впихнуть невпихуемое. Но нам проще купить камушек помощнее. Подход Ecoins намного понятнее и то не сильно заходит основной массе.

artemka19
Лейтенант
Сообщения: 540
Зарегистрирован: 03.09.2020{, 15:41}
Репутация: 216
Откуда: Питер
Имя: Артем

AVR и FreeRTOS (Многозадачность)

#7

Сообщение artemka19 » 19.08.2022{, 19:09}

Dryundel писал(а):
19.08.2022{, 18:23}
с общим UART работать не будет
я кстати об этом не говорил)))
перечитай тот пост)

artemka19
Лейтенант
Сообщения: 540
Зарегистрирован: 03.09.2020{, 15:41}
Репутация: 216
Откуда: Питер
Имя: Артем

AVR и FreeRTOS (Многозадачность)

#8

Сообщение artemka19 » 19.08.2022{, 19:11}

Phazz писал(а):
19.08.2022{, 19:08}
Но нам проще купить камушек помощнее
там во freeRtos вся засада в том, что все библиотеки (в ардуино ide) не заточены под многпоточность.

А вот у ecoins как раз с этим нет проблем

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

AVR и FreeRTOS (Многозадачность)

#9

Сообщение Dryundel » 19.08.2022{, 19:13}

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}
Т.е. потоки могут обращаться к одной и той же памяти внутри класса-обёртки, а вы знать об этом не знаете, пока глюки не начнутся...."
А вот на этот случай и были придуманы мьютексы. Но об этом позже. :)

А пока, ждем примеров, обоснований и реальных (не теоретических) заключений.

artemka19
Лейтенант
Сообщения: 540
Зарегистрирован: 03.09.2020{, 15:41}
Репутация: 216
Откуда: Питер
Имя: Артем

AVR и FreeRTOS (Многозадачность)

#10

Сообщение artemka19 » 19.08.2022{, 19:15}

Dryundel писал(а):
19.08.2022{, 19:13}
Только не теорию двигайте, а на практике аргументируйте пожалуйста.
не не не - дальше сами)))


*я пока что пересяду в зрительский зал)

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

AVR и FreeRTOS (Многозадачность)

#11

Сообщение Dryundel » 19.08.2022{, 19:20}

artemka19 писал(а):
19.08.2022{, 19:01}
вот тут уже приземляли подобные шальные мысли))))

https://arduino.ru/forum/programmirovan ... ibliotekam
Теперь понятно откуда все попипасты. :)
artemka19 писал(а):
19.08.2022{, 19:15}
не не не - дальше сами)))


*я пока что пересяду в зрительский зал)
Слился. Слабак. :D
________________
Тока пожалуйста не обижайтесь. Я же шутя.

artemka19
Лейтенант
Сообщения: 540
Зарегистрирован: 03.09.2020{, 15:41}
Репутация: 216
Откуда: Питер
Имя: Артем

AVR и FreeRTOS (Многозадачность)

#12

Сообщение artemka19 » 19.08.2022{, 19:22}

Dryundel писал(а):
19.08.2022{, 19:20}
Слился. Слабак
Скетч точно смотрел?
нужно ТРИ РАЗНЫХ СКОРОСТИ для юарта.

вот на них пример многопоточности был бы интересен.

А этот пример - это туфта.

Отправлено спустя 1 минуту 8 секунд:
artemka19 писал(а):
19.08.2022{, 19:01}
Т.е., допустим, у вас есть два устройства на SPI, но работают они на разных скоростях.
вот тут я об этом уже говорил

artemka19
Лейтенант
Сообщения: 540
Зарегистрирован: 03.09.2020{, 15:41}
Репутация: 216
Откуда: Питер
Имя: Артем

AVR и FreeRTOS (Многозадачность)

#13

Сообщение artemka19 » 19.08.2022{, 19:25}

Таким образом нам нужно для ТРЕХ РАЗНЫХ СКОРОСТЕЙ, ЗАПУСТИТЬ ТРИ ЭКЗЕМПЛЯРА КЛАССА ИЗ БИБЛИОТЕКИ.

ну и в три раза больше выделить под это дело памяти)

и не забываем - что все должно быть на ОДНОМ юарте. (!)

artemka19
Лейтенант
Сообщения: 540
Зарегистрирован: 03.09.2020{, 15:41}
Репутация: 216
Откуда: Питер
Имя: Артем

AVR и FreeRTOS (Многозадачность)

#14

Сообщение artemka19 » 19.08.2022{, 19:27}

Dryundel писал(а):
19.08.2022{, 19:20}
Тока пожалуйста не обижайтесь. Я же шутя.
да все :smile9:

тема конечно заманчивая....но но но

artemka19
Лейтенант
Сообщения: 540
Зарегистрирован: 03.09.2020{, 15:41}
Репутация: 216
Откуда: Питер
Имя: Артем

AVR и FreeRTOS (Многозадачность)

#15

Сообщение artemka19 » 19.08.2022{, 19:32}

Dryundel писал(а):
19.08.2022{, 19:20}
Теперь понятно откуда все попипасты.
а что там не так?)
там лгут?)

чтобы запустить отправить например в юарт на скорости 9600 - нам нужно:

1- "Serial.begin(9600)"
2-тут отправляем/принимаем
3-теперь нам в следующей задаче нам нужно сделать то же самое но на 115200.
А это значит что в шаге 3 нам нужно остановить Serial, чтобы в новой задаче сделать "Serial.begin(115200)"

Все верно?

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

AVR и FreeRTOS (Многозадачность)

#16

Сообщение Dryundel » 19.08.2022{, 19:35}

artemka19 писал(а):
19.08.2022{, 19:24}
Скетч точно смотрел?
нужно ТРИ РАЗНЫХ СКОРОСТИ для юарта.

вот на них пример многопоточности был бы интересен.
А как это Вы решаете в линейном коде? Задаете три разных скорости в одном Setup() ?
Очень интересно.
И в каких это случаях требуется на один UART задавать разные скорости в ходе исполнения программы? Я реально не знаю. Поясните пожалуйста.
artemka19 писал(а):
19.08.2022{, 19:24}
artemka19 писал(а): ↑22 минуты назад
Т.е., допустим, у вас есть два устройства на SPI, но работают они на разных скоростях.
...
вот тут я об этом уже говорил
Т.е. предлагаете теперь крутануться на пупе с SPI?

А покажите как Вы решаете эту задачу при линейном исполнении кода.

artemka19
Лейтенант
Сообщения: 540
Зарегистрирован: 03.09.2020{, 15:41}
Репутация: 216
Откуда: Питер
Имя: Артем

AVR и FreeRTOS (Многозадачность)

#17

Сообщение artemka19 » 19.08.2022{, 19:38}

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 НА ТРЕХ РАЗНЫХ скоростях для ОДНОГО юарта
Последний раз редактировалось artemka19 19.08.2022{, 19:50}, всего редактировалось 2 раза.

artemka19
Лейтенант
Сообщения: 540
Зарегистрирован: 03.09.2020{, 15:41}
Репутация: 216
Откуда: Питер
Имя: Артем

AVR и FreeRTOS (Многозадачность)

#18

Сообщение artemka19 » 19.08.2022{, 19:43}

Dryundel писал(а):
19.08.2022{, 19:35}
И в каких это случаях требуется на один UART задавать разные скорости в ходе исполнения программы?
вот пример:
Screenshot_20220819-194031_Telegram.jpg
Отправлено спустя 4 минуты 54 секунды:
а это реализация переключения скорости юарт на лету (в линейной версии):

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

AVR и FreeRTOS (Многозадачность)

#19

Сообщение Dryundel » 19.08.2022{, 20:47}

artemka19 писал(а):
19.08.2022{, 19:48}
а это реализация переключения скорости юарт на лету (в линейной версии):
нано-смена скорости юарт на лету.flp
Экзотика. :) Пока ответа нет. Уел. :D

ecoins
Полковник
Сообщения: 2921
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

AVR и FreeRTOS (Многозадачность)

#20

Сообщение ecoins » 19.08.2022{, 21:02}

Имеющимися блоками UART от FLProg изменить скорость наверное не получится.
Перед новой Serialx.begin() вроде придется выполнять Serialx.end();

Ответить

Вернуться в «Просто поболтать (На свободную тему)»