Этот проект представляет собой операционную систему для платформы Arduino, включающую планировщик задач, файловую систему в оперативной памяти, управление GPIO, системный таймер, логгер и системные вызовы. Система предназначена для микроконтроллеров AVR (например, Arduino Uno) и предоставляет базовые функции для многозадачности и управления ресурсами.
Проект организован в несколько модулей, каждый из которых отвечает за определённую функциональность:
- driver/: Драйверы для работы с аппаратным обеспечением (GPIO, таймер).
- fs/: Файловая система в оперативной памяти и логгер.
- kernel/: Планировщик задач и ядро системы.
- syscalls/: Интерфейс системных вызовов для взаимодействия с ядром и файловой системой.
- system/: Мониторинг системных ресурсов (память, напряжение).
- main.cpp: Основной файл, инициализирующий систему и пример задач.
- Arduino.h: Библиотека Arduino для работы с аппаратным обеспечением.
- Установите совместимую среду разработки.
- Скопируйте файлы проекта в папку проекта Arduino.
- Загрузите скетч на плату.
Система автоматически инициализируется при запуске. Основные функции:
- Планировщик задач: Управляет выполнением задач с заданным периодом и приоритетом.
- Файловая система: Хранит до 5 файлов (максимум 512 байт каждый) в оперативной памяти.
- Логгер: Записывает сообщения с временными метками в файл
log.txt. - GPIO: Управление пинами (ввод/вывод, PWM, прерывания).
- Таймер: Системный таймер с точностью 1 мс.
- Мониторинг: Отслеживание свободной памяти и напряжения питания.
blinkTask: Переключает состояние светодиода на пине 13.counterTask: Увеличивает счётчик и сохраняет его в файлcounter.txt.fsTask: Проверяет целостность файловой системы и читает конфигурацию.systemMonitorTask: Выводит статистику системы (задачи, файлы, память).ledStatusTask: Выводит значение счётчика в Serial.lcdTask: Обновляет информацию на LCD-дисплее (свободная память, счётчик).
- Описание: Управление пинами ввода-вывода Arduino.
- Функции:
- Установка режима пина (
GPIO_INPUT,GPIO_OUTPUT,GPIO_INPUT_PULLUP,GPIO_PWM). - Чтение/запись состояния пина.
- Переключение состояния пина (
toggle). - Управление PWM (0–255).
- Подключение обработчиков прерываний.
- Установка режима пина (
- Ограничения: Поддерживаются пины 0–13. Прерывания доступны для пинов 2–13.
- Описание: Системный таймер на базе Timer1 с частотой 1 кГц (1 мс).
- Функции:
- Инициализация таймера (
begin). - Получение текущего времени (
millis). - Задержка с выполнением задач (
delay). - Обновление счётчика времени (
update).
- Инициализация таймера (
- Ограничения: Использует прерывания Timer1, что может конфликтовать с другими библиотеками.
- Описание: Файловая система в оперативной памяти.
- Функции:
- Создание/чтение/запись/удаление текстовых и бинарных файлов.
- Проверка существования файлов и их списка.
- Валидация имени файла (макс. 16 символов) и размера (макс. 512 байт).
- Поддержка до 5 файлов одновременно.
- Ограничения: Ограниченный объём памяти для хранения файлов.
- Описание: Логгер для записи сообщений с временными метками.
- Функции:
- Инициализация (
begin) с созданием файлаlog.txt. - Запись сообщений в лог и Serial (
log).
- Инициализация (
- Ограничения: Лог обрезается при превышении 1024 байт.
- Описание: Планировщик задач с поддержкой приоритетов и семафоров.
- Функции:
- Добавление/удаление задач.
- Установка периода и приоритета задач.
- Управление семафорами.
- Аварийный дамп системы при сбоях.
- Поддержка сторожевого таймера.
- Ограничения: Задачи выполняются кооперативно, без вытеснения.
- Описание: Интерфейс системных вызовов для упрощения взаимодействия с ядром и ФС.
- Функции:
- Создание/удаление задач.
- Задержка выполнения.
- Работа с файлами (чтение, запись, удаление, проверка существования).
- Получение системной информации.
- Управление семафорами.
- Описание: Мониторинг системных ресурсов (только для AVR).
- Функции:
- Измерение свободной памяти (
freeMemory,freeMemoryPercent). - Проверка критического уровня памяти.
- Измерение напряжения питания (
getVccVoltage). - Проверка низкого напряжения.
- Измерение свободной памяти (
- Память: Система рассчитана на микроконтроллеры с ограниченной памятью (например, 2 КБ SRAM на Arduino Uno). Используйте
SystemMonitorдля контроля памяти. - Сторожевой таймер: Включён с таймаутом 8 секунд. Отключайте при отладке, если необходимо.
- Конфликты: Timer1 используется системным таймером, что может конфликтовать с библиотеками, использующими тот же таймер.
- Файловая система: Хранит данные в SRAM, что ограничивает размер и количество файлов.
- Логи выводятся в Serial и сохраняются в
log.txt. - Используйте
systemMonitorTaskдля получения статистики системы. - Аварийный дамп активируется при превышении времени выполнения задачи или таймауте Watchdog.