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只是一個內核任務,啟用了中斷並且可以睡覺,但在運行任務中的優先級最高。
同步原語,例如信號量,旋轉鎖等。