YAOS-это встроенная операционная система для устройств Internet of Things (IoT), особенно для одноядерного процессора без виртуализации MMU. Он предназначен для энергоэффективности и независимой для оборудования.
Обратитесь к каталогу /Documentation для получения дополнительной информации, такой как компиляция, портирование, API и т. Д.
Любые отзывы приветствуются по адресу [email protected] . И дайте мне знать, если кто -то из вас заинтересован в переносе в новый MCU, чтобы я мог дать вам руку.
git clone git://github.com/onkwon/yaos
Получите один отсюда, если у вас еще не установлен. Или вы можете скомпилировать его из исходного кода, прилагая больше усилий, которые не рекомендуются, но все же стоит попробовать.
make clean
make stm32f1 (or specify your board. e.g. mango-z1)
make
make burn
Поддерживаемые доски на данный момент:
- Манго-Z1
- mycortex-stm32f4
- NRF52
- STM32F429I-Disco
- STM32F469I-Disco
- STM32-LCD
- UST-MPB-STM32F103
- STM32F1-MIN
В случае получения сообщений об ошибках что -то вроде undefined reference to __aeabi_uidiv , укажите путь библиотеки, когда вы make это путь ниже:
make LD_LIBRARY_PATH=/usr/local/arm/lib/gcc/arm-none-eabi/4.9.2
Путь зависит от вашей среды разработки.
Позвольте мне поставить пример мигания светодиода, чтобы вы могли почувствовать, как выглядит код.
Пользовательские задачи будут размещены под /задачами (например, задачи /my-first-task.c):
void main()
{
int fd, led = 0;
if ((fd = open("/dev/gpio20", O_WRONLY)) <= 0) {
printf("can not open, %xn", fd);
return;
}
while (1) {
write(fd, &led, 1);
led ^= 1;
sleep(1);
}
close(fd);
}
REGISTER_TASK(main, 0, DEFAULT_PRIORITY, STACK_SIZE_DEFAULT);
Образуются два типа задачи: нормальные и задачи в реальном времени. Планировщик круговой робин для обычных задач в то время как приоритетный планировщик для задач в реальном времени. Каждому заданию дается приоритет, который может быть динамически изменен с помощью set_task_pri() . Для задач в режиме реального времени задача с более высоким приоритетом всегда препятствует приоритетным задачам, в то время как одни и те же приоритетные задачи происходят по очереди под границей в раунде. Планировщик может быть остановлен, чтобы уменьшить даже накладные расходы на расписание в случае критической задачи. С другой стороны, обычные задачи получают шанс запустить упрощенный справедливый планировщик, который выбирает минимальное значение времени выполнения для выполнения следующей задачи.
Задачи всегда в одном из пяти штатов: бег, остановка, ожидание, сна или зомби. И задача может быть создана как статически, так и динамически во время выполнения.
Системный ресурс доступ к интерфейсу системного вызова, введя привилегированный режим привилегированного режима, когда пользовательская задача работает в режиме пользователя (непривилегированного).
Концепция виртуальной файловой системы (VFS) реализована. Встроенный флэш -ПЗУ в SOC может быть установлен в качестве корневой файловой системы (ElcedFS), в то время как RAMFS монтируется в качестве DEVFS для узла устройства.
Пустая флэш -память зарегистрирована в качестве Embedfs, так что пользователь может использовать ее так же, как обычная файловая система.
Страница - это единица управления памятью, но альтернативный диспетчер памяти может использоваться в такой системе нехватки памяти.
Реализуйте Allocator и Allocator первого подхода.
SoftIRQS будет предотвратить любую работу, за исключением ответа на реальное прерывание, поскольку они работают с высоким приоритетом. На самом деле SoftIRQ - это всего лишь задача ядра, работающая с прерывами, включенными и может спать, но имеет самый высокий приоритет среди выполнения задач.
Примитивы синхронизации, такие как семафор, спинлок и т. Д.