- C++ 65%
- C 32%
- Assembly 2.1%
- Makefile 0.5%
- Shell 0.4%
| kernel | ||
| lib | ||
| pins/standard | ||
| src | ||
| flash.sh | ||
| LICENSE | ||
| Makefile | ||
| monitor.sh | ||
| README.md | ||
Moon-OS-Arduino
RTOS for Arduino UNO R3
MoonOS - Це ОС на Arduino UNO R3 з витісняльною багатозадачністью, квантуванням і статичним виділенням пам'яті.
ОС створена для того, щоб розумно розподіляти процесорний час між різними задачами, керувати пам'ятью і створювати на її основі певні системи де треба робити декілька задач одночасно.
Вона складається з двох частин, простої та складної: Проста частина ОС це модифікований Arduino-core, який забезпечує базовий функціонал по типу digitalWrite(). А складна частина ОС це та сама частина яка додає асинхронність, queue, м'ютекси і так далі. Ці дві частини можна гарно побачити якщо подивитись директорію kernel, там вони дость чітко розділені.
В комплекті з системою ідуть скрипти компіляції написані під Linux а також деякі програми та драйвери які написані для цієї системи. (програми та драйвери можна знайти в директорії lib)
Система ще досить не стабільна і крива через фізичні обмеженні самої ардуїнки та через те що це найперша версія системи. Наприклад якщо її залишити працювати на 6-8 годин то система видасть критичну помилку і почне панікувати через збій в роботі з оперативною пам'ятью.
Але тим не менш вона гарно працює навіть під великим навантаженням і якщо виправити в системі всі помилки то вона буде досить таки гарною, особливо якщо враховувати що на Аруїно всього 2кб оперативної пам'яті, з яких чиста система без встановлених програм споживає лише 800-1000 байт. (Для кращого розуміння: Цей текст важить займає більше місця ніж потребує ця система оперативної пам'яті для запуску)
В цій системі немає поняття "процес". Тобто якщо в звичайних ОС(Linux/Windows) є процес та потік як різні поняття то тут процес один - це сама система, а програми для цієї системи це по факту окремі потоки. У API цієї системи немає навіть функції, яка б містила слово "process" в назві, зате є createThread().
Якщо є ще питання до того як система працює то в коді залишено дуже багато коментарів і можна почитати як все працює