【開源】RaysRTOS(光芒實(shí)時(shí)系統(tǒng)),全搶占式優(yōu)先級(jí)調(diào)度,我寫了51,:
RaySRTOS0.3版本 支持三種平臺(tái):51 AVR STM8
較以前版本將RaySRTOS主文件和不同CPU平臺(tái)文件分開,形成了以下目錄:
RaySRTOS(總體文件夾)
|Kernel(文件夾)|RaySRTOS.c 系統(tǒng)平臺(tái)無(wú)關(guān)主文件
| |RaySRTOS.h 系統(tǒng)平臺(tái)無(wú)關(guān)頭文件
|
|CPU(文件夾) |8051_KEIL(文件夾)|CPU.c 特定平臺(tái)CPU相關(guān)c文件
| | |CPU_ASM.asm 特定平臺(tái)調(diào)度代碼
| | |CPU_CFG.h 特定平臺(tái)數(shù)據(jù)定義以及系統(tǒng)配置
| |
| |AVR_GCC(文件夾) |......
|
|
|
|DEMO(文件夾) |各種平臺(tái)演示代碼工程
該實(shí)時(shí)操作系統(tǒng)具備以下幾個(gè)優(yōu)點(diǎn):
1:全搶占式優(yōu)先級(jí)調(diào)度
2:小型化,適用于單片機(jī)
51版本
keil4編譯版本,89c52單片機(jī)運(yùn)行,仿真proteus7.5sp3
由于是優(yōu)先級(jí)搶占式調(diào)度,建立了兩個(gè)任務(wù),占用ram稍微較大,flash占用還可以,占用情況如下:
Program Size: data=92.0 xdata=0 code=950
下面是系統(tǒng)函數(shù)聲明
/*--------------------------------------------------------------------------------------+
|系統(tǒng)函數(shù)聲明 |
+---------------------------------------------------------------------------------------*/
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//創(chuàng)建任務(wù)
void RAYS_Start(void); //系統(tǒng)啟動(dòng)函數(shù)
void RAYS_TaskResume(INT8U prio); //任務(wù)恢復(fù)函數(shù)
void RAYS_TaskSuspend(INT8U prio); //任務(wù)掛起函數(shù)
void OSSched(void); //匯編調(diào)度函數(shù)
void RAYS_TimeDelay(INT16U ticks); //任務(wù)延時(shí)函數(shù)
void Idle_Task(void);
void RAYS_Init(void); //系統(tǒng)初始化
void TickIntHook(void); //系統(tǒng)節(jié)拍鉤子函數(shù)
avr版本
用winavr20060421編譯,ide選擇的是avr studio,也可以用winavr編譯,仿真同樣是proteus7.5sp3,調(diào)度在16兆只用10us(avrstudio軟測(cè))
單片機(jī)型號(hào)分別測(cè)試了mega128 和mega8和mega88,都可以運(yùn)行,但程序如果大于64k的話調(diào)度部分pc需要改動(dòng)一下
由于是優(yōu)先級(jí)搶占式調(diào)度,建立了3個(gè)任務(wù),占用情況如下:
Program: 1178 bytes
(.text + .data + .bootloader)
Data: 225 bytes
(.data + .bss + .noinit)
默認(rèn)優(yōu)先級(jí)0s
/*--------------------------------------------------------------------------------------+
|系統(tǒng)函數(shù)聲明 |
+---------------------------------------------------------------------------------------*/
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//創(chuàng)建任務(wù)
void RAYS_Start(void); //系統(tǒng)啟動(dòng)函數(shù)
void RAYS_TaskResume(INT8U prio); //任務(wù)恢復(fù)函數(shù)
void RAYS_TaskSuspend(INT8U prio); //任務(wù)掛起函數(shù)
void OSSched(void); //匯編調(diào)度函數(shù)
void RAYS_TimeDelay(INT16U ticks); //任務(wù)延時(shí)函數(shù)
void Idle_Task(void);
void RAYS_Init(void); //系統(tǒng)初始化
void TickIntHook(void); //系統(tǒng)節(jié)拍鉤子函數(shù)
最后來(lái)stm8s105c6版本,本人手上只有這個(gè)小小的discovery板子,100塊買的,所以先拿它做的測(cè)試,很穩(wěn)定!
編譯器選擇的是IAR,因?yàn)樗镞呏С謈語(yǔ)言是用的模擬寄存器!!!!stvd好像用的是堆棧,導(dǎo)致在stvd上做系統(tǒng)幾乎不可能
stm8工程,是stm8s105c6版本,仿真是硬件仿真,因?yàn)閜roteus不支持stm8STM8IAR.rar)
flash和ram占用情況如下:
941 bytes of readonly code memory
132 bytes of readonly data memory
499 bytes of readwrite data memory
我感覺ram占用有點(diǎn)大,后來(lái)我編寫了個(gè)什么都沒有的main函數(shù),ram占用是272B,所以本系統(tǒng)ram占用應(yīng)該是499-272=227B
優(yōu)化級(jí)別選則balance.
/*--------------------------------------------------------------------------------------+
|系統(tǒng)函數(shù)聲明 |
+---------------------------------------------------------------------------------------*/
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//創(chuàng)建任務(wù)
void RAYS_Start(void); //系統(tǒng)啟動(dòng)函數(shù)
void RAYS_TaskResume(INT8U prio); //任務(wù)恢復(fù)函數(shù)
void RAYS_TaskSuspend(INT8U prio); //任務(wù)掛起函數(shù)
void OSSched(void); //匯編調(diào)度函數(shù)
void RAYS_TimeDelay(INT16U ticks); //任務(wù)延時(shí)函數(shù)
void Idle_Task(void);
void RAYS_Init(void); //系統(tǒng)初始化
void TickIntHook(void); //系統(tǒng)節(jié)拍鉤子函數(shù)
歡迎大家測(cè)試,我是新手,難免有很多bug,三種版本90%代碼都一樣,與cpu最相關(guān)的RaysRTOS_ASM文件差異較大,不過(guò)格式也一樣.
我的qq 771992497 大家多多測(cè)試,有問題及時(shí)反饋