分享一個簡潔易用的嵌入式操作系統(tǒng)內(nèi)核
KLite源碼
源碼鏈接:
https://gitee.com/kerndev/kliteKLite的作者是jiangxiaogang。我們之前分享的?實(shí)用 | 手頭上無LCD卻又急著開發(fā)UI?LCD模擬器了解一下中介紹的模擬器也是這位大佬的作品。
KLite簡介
KLite以MIT協(xié)議開放源代碼。它是一款入門級的小型搶占式操作系統(tǒng)內(nèi)核,以簡潔易用為設(shè)計(jì)目標(biāo),旨在降低學(xué)習(xí)嵌入式操作系統(tǒng)編程和入門的難度。
- 支持優(yōu)先級搶占
- 支持相同優(yōu)先級的線程
- 支持線程同步互斥
- 支持動態(tài)內(nèi)存管理
- 支持多編譯器GCC, IAR, MDK
KLite移植
KLite目前已經(jīng)為ARM Cortex-M0/M3/M4做好了底層適配,如果你的CPU平臺是基于以上平臺的,如STM32,GD32,NRF51,NRF52,F(xiàn)reescale K40等系列單片機(jī),那么可以直接使用預(yù)編譯的庫文件進(jìn)行開發(fā)。
KLite使用
1、KLite編譯
在build目錄下面有預(yù)設(shè)的工程文件,選擇你要使用的編譯器和目標(biāo)CPU平臺, 編譯完成后,會生成kernel.lib文件,將kernel.lib,kernel.h,emplate.c復(fù)制到你的項(xiàng)目源碼中,使用lib文件可以減少重復(fù)編譯時間,當(dāng)然你也可以選擇把全部源碼添加到你的工程中。
2、修改template.c
根據(jù)目標(biāo)CPU的編程手冊,實(shí)現(xiàn)template.c里面的2個空函數(shù)。
void cpu_sys_init(void);
這個函數(shù)被kernel_init調(diào)用,為用戶提供一個接口,用于實(shí)現(xiàn)那些必須在系統(tǒng)初始化之前的準(zhǔn)備工作,例如初始化CPU的時鐘,設(shè)置FLASH等。
void cpu_sys_idle(uint32_t time);
這個函數(shù)被kernel_idle調(diào)用,為用戶提供一個接口,用于實(shí)現(xiàn)系統(tǒng)休眠.例如調(diào)用WFI指令,或者什么都不做。
void SysTick_Handler(void);
這個函數(shù)是平臺相關(guān)的滴答時鐘中斷函數(shù),需要在滴答時鐘中斷中調(diào)用kernel_tick(n),n表示一次中斷的毫秒數(shù)。
3、在main函數(shù)里面添加初始化代碼
main函數(shù)的推薦寫法如下:
//只需要包含這一個頭文件即可
#include "kernel.h"
//用于初始化應(yīng)用程序的線程
void init(void *arg)
{
}
//空閑線程,只需調(diào)用kernel_idle即可
void idle(void *arg)
{
kernel_idle();
}
//C語言程序入口
void main(void)
{
static uint8_t heap[HEAP_SIZE];
kernel_init((uint32_t)heap, HEAP_SIZE);
thread_create(init, 0, 0);
thread_create(idle, 0, 0);
kernel_start();
}
說明:
-
kernel_init 用于初始化內(nèi)核;
-
thread_create 創(chuàng)建主線程init和idle;
-
kernel_start 用于啟動內(nèi)核;
-
init是一個線程函數(shù),在該函數(shù)中實(shí)現(xiàn)你的其它初始化代碼.
-
更多函數(shù)參數(shù)說明請參考API文檔。
往期推薦:
嵌入式設(shè)計(jì)模式:有限狀態(tài)自動機(jī)的C語言實(shí)現(xiàn)
不修車了!轉(zhuǎn)行做單片機(jī)開發(fā)
在公眾號聊天界面回復(fù)1024,可獲取嵌入式資源;回復(fù) m ,可查看文章匯總。
點(diǎn)擊閱讀原文,查看更多分享