Ви не увійшли.
Да просто параллелизьм не шибко популярен. Все выкручиваются простой кооперативкой в лупе.) Простенько в понимании, простенько в отладке. Не?
Всему свое время. Когда понадобится разберутся. Все это не очень простенько, однако, для множества микроконтроллерных задач, не требуется полноценная динамическая ОСРВ, типа Линукс.
Да просто параллелизьм не шибко популярен. Все выкручиваются простой кооперативкой в лупе.) Простенько в понимании, простенько в отладке. Не?
Куда уже проще? Правда, примеров больше не помешало бы, да нет желания их делать самому. Может кто нибудь поучавствует. А на форуме застой еще до этой моей публикации начался. Да если бы только на форуме! Везде!
Вячеслав Азаров, ваша тема прибила на два дня активность на форуме.)))
Ибо всё закручено.) Для людЕй, попроще желательно, не?)
Если не сложно, можете тут описать функции библиотеки рідною мовою ...
Да, пожалуйста. Детали и использование аргументов смотрите в заголовочном файле и примере. Подробности выполнения в файле реализации.
functions
spawn(..) - создание (порождение) нового потока со своей структурой (стека-данных) состояния
и стартовой функцией
yield() - немедленное переклюние исполненения программы на следующий поток в кольце
hold() - запрещение исполенеия yield() и квантования времени выполнения потока
schedule() - разрешение функционирования yield() (точек переключения контекста выполнения)
quantize() - разрешение 1 мс-го квантования времени выполнения потока и функционирования yield()
grab(..) - реализует баръер (семафор) взаимного исключения выполнения сегментов кода
loose(.) - освобождает (устраняет) баръер, разрешая следующему потоку выйти из grab(..)
constant
MAIN - указатель на фиктивную структуру состояния корневого потока функции main()
variables
thread - динамический указатель на локальные данные потока для реализации реентерабельности
кода потока и его идентификации
Сейчас не в состоянии оценить ...
страницу в закладки, завтра с новыми силами буду разбираться ...
Если не сложно, можете тут описать функции библиотеки рідною мовою ...
А в чем отличие от leOS?
В том, что leOS это таймер такой, запускающий подпрограммы по графику. А Thread реализует настоящую многозадачность (многопотоковость), хотя и очень упрощенно. Для Thread, накладные расходы процессорного времени на переключение задач (потоков) для AVR, при 1 мс кванте времени, составляет не больше 2%.
Попробуем, пощупаем ...
А в чем отличие от leOS ? http://www.leonardomiliani.com/en/2012/ … r-arduino/
https://github.com/slavaza/Thread Моя простая библиотека поддержки многозадачности для наименьших AVR моделей Ардуино. Реализует итеративную многозадачность с квантованием времени потоков и опросом состояния системы. Функция delay(ms) больше не блокируюшая а выполняет задержку только одной задачи. Возможно, вскоре добавят поддержку многозадачности и в официальную библиотеку HardwareSerial, но можно это сделать и самому или взять отсюда https://github.com/slavaza/ArduinoCore-avr. Мой скромный вклад в проект Ардуино.