O YAOS é um sistema operacional incorporado para dispositivos Internet das Coisas (IoT), especificamente para um processador de núcleo único sem virtualização da MMU. Ele foi projetado para eficiência energética e desenvolvimento independente de hardware.
Consulte /Documentation para obter mais informações, como compilação, portamento, APIs, etc.
Qualquer feedback é bem -vindo a [email protected] . E deixe -me saber se algum de vocês estiver interessado em portar para o New MCU para que eu possa lhe dar uma mão.
git clone git://github.com/onkwon/yaos
Obtenha um daqui se você ainda não tiver instalado. Ou você pode compilá -lo com o código -fonte, colocando mais esforço, o que não é recomendado, mas ainda vale a pena tentar.
make clean
make stm32f1 (or specify your board. e.g. mango-z1)
make
make burn
As placas suportadas no momento são:
- Mango-Z1
- MyCortex-STM32F4
- nrf52
- STM32F429I-DISCO
- STM32F469I-DISCO
- STM32-LCD
- UST-MPB-STM32F103
- STM32F1-MIN
No caso de obter mensagens de erro algo como undefined reference to __aeabi_uidiv , especifique o caminho da biblioteca quando você make a maneira abaixo:
make LD_LIBRARY_PATH=/usr/local/arm/lib/gcc/arm-none-eabi/4.9.2
O caminho depende do seu ambiente de desenvolvimento.
Deixe -me colocar um exemplo de piscar um LED para que você provesse como é o código.
As tarefas do usuário seriam colocadas em /tarefas (por exemplo, tarefas /meu primeiro 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);
Dois tipos de tarefas são tratados: tarefas normais e em tempo real. Scheduler Round-Robin para tarefas normais enquanto agendador prioritário para tarefas em tempo real. Cada tarefa recebe uma prioridade que pode ser alterada dinamicamente com set_task_pri() . Para tarefas em tempo real, uma tarefa de prioridade mais alta sempre prevê tarefas de prioridade mais baixa, enquanto as mesmas tarefas de prioridade ocorrem por sua vez sob a programação redonda-robin. O agendador pode ser parado para reduzir até a sobrecarga de agendamento em caso de uma tarefa crítica do tempo. Por outro lado, as tarefas normais têm a chance de executar pelo Significado Agendador Fair, que escolhe o valor mínimo do tempo de execução para a próxima tarefa a ser executada.
As tarefas estão sempre em um dos cinco estados: correndo, parado, esperando, dormindo ou zumbi. E uma tarefa pode ser criada estaticamente e dinamicamente em tempo de execução.
O recurso do sistema é acessado pela interface de chamada do sistema que entra no modo privilegiado como uma tarefa do usuário é executada no modo de usuário (sem privilégios).
O conceito de sistema de arquivos virtual (VFS) é implementado. A ROM flash incorporada no SOC pode ser montada como o sistema de arquivos raiz (incorporado), enquanto um RAMFS é montado como um devfs para um nó de dispositivo.
A memória flash vazia é registrada como incorporação para que o usuário possa usá -lo como o sistema de arquivos normal.
A página é unidade de gerenciamento de memória, mas o gerenciador de memória alternativo pode ser usado em um sistema de escassez de memória.
Buddy Alocator e alocador de primeiro ajuste são implementados.
A Softirqs antecipará qualquer trabalho, exceto a resposta a uma interrupção real, à medida que executam em alta prioridade. De fato, o Softirq é apenas uma tarefa do kernel que executa com interrupções ativadas e pode dormir, mas tem a maior prioridade entre as tarefas em execução.
Primitivos de sincronização, como semáforo, spinlock, etc.