Существует библиотека FreeRTOS для Arduino , предназначенная даже для запуска в UNO.
Я пытаюсь понять, как работает многозадачная операционная система на таком ограниченном оборудовании. Я понимаю принципы планирования / переключения задач, но как ядро фактически приостанавливает задачу, чтобы выполнить другую? Как он прерывает (а затем возобновляет) исполняемый в данный момент код?
Я предполагаю, что запланированный ISR (таймер) напрямую изменяет стек, чтобы изменить указатель инструкций, но если он делает это, ему нужно сделать копию стека и зарегистрироваться перед переключением задач, а затем восстановить стек текущей задачи. / регистрируется перед возобновлением выполнения. Мне не ясно, как это могло бы быть сделано.
Может ли ядро FreeRTOS переключать задачи, например, при вызове функции Serial.println()
(или при любом вызове, не включающем cli()
), и если да, то как он это делает?
Спасибо за любые разъяснения.