#1 2018-05-12 12:24:02

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Исполняйте свои скетчи параллельно

https://github.com/slavaza/Thread Моя простая библиотека поддержки многозадачности для наименьших AVR моделей Ардуино. Реализует итеративную многозадачность с квантованием времени потоков и опросом состояния системы. Функция delay(ms) больше не блокируюшая а выполняет задержку только  одной задачи. Возможно, вскоре добавят поддержку многозадачности и в официальную библиотеку HardwareSerial, но можно это сделать и самому или взять отсюда https://github.com/slavaza/ArduinoCore-avr. Мой скромный вклад в проект Ардуино.

Неактивний

#2 2018-05-12 15:46:33

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: Исполняйте свои скетчи параллельно

Попробуем, пощупаем ...   smile

А в чем отличие от leOS ?   http://www.leonardomiliani.com/en/2012/ … r-arduino/

Неактивний

#3 2018-05-12 16:07:56

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: Исполняйте свои скетчи параллельно

renoshnik пише:

А в чем отличие от leOS?

smile В том, что leOS это таймер такой, запускающий подпрограммы по графику. А Thread реализует настоящую многозадачность (многопотоковость), хотя и очень упрощенно. Для Thread, накладные расходы процессорного времени на переключение задач (потоков) для AVR, при 1 мс кванте времени, составляет не больше 2%.

Неактивний

#4 2018-05-12 17:03:22

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: Исполняйте свои скетчи параллельно

Сейчас не в состоянии оценить ...  sad   
страницу в закладки, завтра с новыми силами буду разбираться ...   smile

Если не сложно, можете тут описать функции библиотеки рідною мовою ...  roll

Неактивний

#5 2018-05-13 10:21:29

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: Исполняйте свои скетчи параллельно

renoshnik пише:

Если не сложно, можете тут описать функции библиотеки рідною мовою ...

Да, пожалуйста. Детали и использование аргументов смотрите в заголовочном файле и примере. Подробности выполнения в файле реализации.

functions

spawn(..)    - создание (порождение) нового потока со своей структурой (стека-данных) состояния
                    и стартовой функцией
yield()         - немедленное переклюние исполненения программы на следующий поток в кольце
hold()          - запрещение исполенеия yield() и квантования времени выполнения потока 
schedule()    - разрешение функционирования yield()  (точек переключения контекста выполнения)
quantize()    - разрешение 1 мс-го квантования времени выполнения потока и функционирования yield()
grab(..)        - реализует баръер (семафор) взаимного исключения выполнения сегментов кода
loose(.)        - освобождает (устраняет) баръер, разрешая следующему потоку выйти из grab(..) 

constant

MAIN           - указатель на фиктивную структуру состояния корневого потока функции main()

variables

thread        - динамический указатель на локальные данные потока для реализации реентерабельности
                  кода потока и его идентификации

Неактивний

#6 2018-05-15 18:12:41

Green
Учасник
Зареєстрований: 2015-11-08
Повідомлень: 593

Re: Исполняйте свои скетчи параллельно

Вячеслав Азаров, ваша тема прибила на два дня активность на форуме.)))
Ибо всё закручено.) Для людЕй, попроще желательно, не?)

Неактивний

#7 2018-05-15 18:43:52

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: Исполняйте свои скетчи параллельно

smile Куда уже проще? Правда, примеров больше не помешало бы, да нет желания их делать самому. Может кто нибудь поучавствует. А на форуме застой еще до этой моей публикации начался. Да если бы только на форуме!  Везде!

Неактивний

#8 2018-05-16 17:12:43

Green
Учасник
Зареєстрований: 2015-11-08
Повідомлень: 593

Re: Исполняйте свои скетчи параллельно

Да просто параллелизьм не шибко популярен. Все выкручиваются простой кооперативкой в лупе.) Простенько в понимании, простенько в отладке. Не?

Неактивний

#9 2018-05-16 17:22:17

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: Исполняйте свои скетчи параллельно

Green пише:

Да просто параллелизьм не шибко популярен. Все выкручиваются простой кооперативкой в лупе.) Простенько в понимании, простенько в отладке. Не?

Всему свое время. Когда понадобится разберутся. Все это не очень простенько, однако, для множества микроконтроллерных задач, не требуется полноценная динамическая ОСРВ, типа Линукс.

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму