YAOS是用于物联网(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分钟
如果获取错误消息诸如undefined reference to __aeabi_uidiv类的内容, make在以下方式中指定库路径:
make LD_LIBRARY_PATH=/usr/local/arm/lib/gcc/arm-none-eabi/4.9.2
该路径取决于您的开发环境。
让我举一个眨眼的LED示例,让您想想代码的外观。
用户任务将被放置在 /任务下(例如任务 /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中的嵌入式闪存ROM可以将其作为根文件系统(Embedfs)安装在RAMFS作为设备节点的DEVF时。
空闪存被寄存为embedfs,因此用户可以像普通文件系统一样使用它。
页面是内存管理的单位,但可以在这种内存短缺系统中使用替代内存管理器。
实施了好友分配器和首先分配器。
SoftiRQS将在高度重点运行的情况下对真正中断的响应除外。实际上,SoftIRQ只是一个内核任务,启用了中断并且可以睡觉,但在运行任务中的优先级最高。
同步原语,例如信号量,旋转锁等。