EDA365电子工程师网
标题:
【开源】RaysRTOS(光芒实时系统),全抢占式优先级调度,我写了51,AVR,STM8三个版本,欢
[打印本页]
作者:
fish1352
时间:
2016-7-2 14:42
标题:
【开源】RaysRTOS(光芒实时系统),全抢占式优先级调度,我写了51,AVR,STM8三个版本,欢
RaySRTOS0.3版本 支持三种平台:51 AVR STM8
1 U7 \" }. a3 Z
较以前版本将RaySRTOS主文件和不同CPU平台文件分开,形成了以下目录:
4 }" Q" {) g+ F) |, K4 G
RaySRTOS(总体文件夹)
2 t7 w: ?) E9 N7 H% E/ y0 H
|Kernel(文件夹)|RaySRTOS.c 系统平台无关主文件
Z1 p3 A1 K5 u( ~ ~2 Y* c+ O
| |RaySRTOS.h 系统平台无关头文件
( W+ v7 M' g% J" s# y
|
' a8 I) O* P R
|CPU(文件夹) |8051_KEIL(文件夹)|CPU.c 特定平台CPU相关c文件
5 d$ u* E6 H8 `: z
| | |CPU_ASM.asm 特定平台调度代码
- F. {* \) K' \+ W/ x: y( O+ P
| | |CPU_CFG.h 特定平台数据定义以及系统配置
2 g! x+ e% w$ p$ ]) r+ c* E
| |
/ i* A1 c6 V+ I7 B* f
| |AVR_GCC(文件夹) |......
1 _' S! |- h3 D# }$ x
|
" h6 q5 p7 z' `' t& U; k8 w3 s
|
8 `' A6 H, d& t6 e' T% F
|
0 c+ ^* Y" }0 t6 `& h2 x
|DEMO(文件夹) |各种平台演示代码工程
" T. P# `7 ?4 A2 i
2 b! X# c0 p, x, r
该实时操作系统具备以下几个优点:
' g- s; G0 ]& v9 p- T5 n
+ M% Z1 ?' y5 r q7 M6 T( l
1:全抢占式优先级调度
. O& x$ B* K8 c |. z: K
2:小型化,适用于单片机
: b6 l. \7 L1 C4 z8 e
# h( C" s- w: a3 K+ U! ]
6 X1 D* k& }5 g3 ?" m6 E0 H
" K' X1 @/ l$ M& {
. `1 D, g6 z! v, P+ [5 G
51版本
3 C) R: I% A2 C- C" e
keil4编译版本,89c52单片机运行,仿真proteus7.5sp3
" S" o; O" I# K" I/ H7 |6 l ^
由于是优先级抢占式调度,建立了两个任务,占用ram稍微较大,flash占用还可以,占用情况如下:
2 S, p+ ^' i# O r5 H, b
Program Size: data=92.0 xdata=0 code=950
1 E& z2 a" l5 q- w& u6 ~9 n
下面是系统函数声明
& E z5 ^; m4 T! e
/*--------------------------------------------------------------------------------------+
0 k7 W+ f, `1 r. y: t" G
|系统函数声明 |
9 i6 N: E. P/ l* F# l8 K7 b& r& q
+---------------------------------------------------------------------------------------*/
8 T' }; K* V% A# Y+ ~+ }: [
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务
* S: j* o- x$ {& x. |2 s$ H" j
void RAYS_Start(void); //系统启动函数
& B! R5 S' i. ?4 B4 L. V5 Y
void RAYS_TaskResume(INT8U prio); //任务恢复函数
8 `! M8 a/ g; `( n
void RAYS_TaskSuspend(INT8U prio); //任务挂起函数
: U7 y) v4 W: L# x7 ?. m9 e9 n+ O
void OSSched(void); //汇编调度函数
! K0 {) Q" G( p+ e0 A; R9 Z B. @8 p
void RAYS_TimeDelay(INT16U ticks); //任务延时函数
; Q5 f. c1 U M: S8 y7 n
void Idle_Task(void);
' c4 q6 u8 Q! }
void RAYS_Init(void); //系统初始化
: B5 U" T a% c' ^: x, [. k
void TickIntHook(void); //系统节拍钩子函数
8 b$ v4 U6 t( S* W a
5 X& L) }5 H* J6 o6 E' ?
) `2 g$ c; R3 d8 [
1 J9 i' l3 e# p4 G3 @+ a3 r
avr版本
; M" }) a r2 ~0 R- e0 c' G
用winavr20060421编译,ide选择的是avr studio,也可以用winavr编译,仿真同样是proteus7.5sp3,调度在16兆只用10us(avrstudio软测)
' `1 i" y2 z( u" `" m& c8 f
单片机型号分别测试了mega128 和mega8和mega88,都可以运行,但程序如果大于64k的话调度部分pc需要改动一下
! b! d# J' C- r& R2 C/ T& U% r
由于是优先级抢占式调度,建立了3个任务,占用情况如下:
5 E6 C- {$ d' c# N8 Z! E' {
! o' F: W& y5 ^8 \2 {! j) o' v
Program: 1178 bytes
8 w# O6 H! N w. W0 j
(.text + .data + .bootloader)
& _. t1 `5 o8 {( r" U- b' _8 A
3 s" s' _5 A3 `
Data: 225 bytes
1 |, j* u. a* A! M6 C! Z( M- D7 f
(.data + .bss + .noinit)
: A: H+ O* ~3 j7 m) k
默认优先级0s
+ O$ B3 P( t( n; S+ R( R3 x
/*--------------------------------------------------------------------------------------+
( J, B; F& K* t. n3 L/ `& @6 S( S2 t
|系统函数声明 |
6 S; |, r! t( p v! a9 ^% O+ B8 F
+---------------------------------------------------------------------------------------*/
9 t4 M* \" ]$ `+ I# q: u; J/ s# x
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务
; X$ A2 c5 ?7 D) g* X" O
void RAYS_Start(void); //系统启动函数
: ]7 i o2 w" y- q; E" i
void RAYS_TaskResume(INT8U prio); //任务恢复函数
6 z, u( r, J$ a/ {; Q4 h
void RAYS_TaskSuspend(INT8U prio); //任务挂起函数
1 Y0 I! q& q8 p! D! w" }9 G
void OSSched(void); //汇编调度函数
1 d Y; o- V3 w, h n! z
void RAYS_TimeDelay(INT16U ticks); //任务延时函数
# n8 q& q- W/ C- J
void Idle_Task(void);
1 R q# @, Y2 O% m. a
void RAYS_Init(void); //系统初始化
$ S( V4 t8 P; l' H2 ]; x) j
void TickIntHook(void); //系统节拍钩子函数
: P" I2 |9 G& b
4 \: Y. T7 W. q% q' o& u- ]
8 U; `% j1 Y: u8 ^' P
最后来stm8s105c6版本,本人手上只有这个小小的discovery板子,100块买的,所以先拿它做的测试,很稳定!
8 n+ \$ |( a# B5 A7 ~1 z2 z$ N
编译器选择的是IAR,因为它里边支持c语言是用的模拟寄存器!!!!stvd好像用的是堆栈,导致在stvd上做系统几乎不可能
' c2 x: C9 H+ [ w4 d. i
stm8工程,是stm8s105c6版本,仿真是硬件仿真,因为proteus不支持stm8STM8IAR.rar)
2 C% l) K7 O3 b; l+ _
/ J0 ] a4 Q! @, |5 d
flash和ram占用情况如下:
, b' O, z2 x$ x# S
941 bytes of readonly code memory
- m7 d v# J$ N; e, Y2 N; G
132 bytes of readonly data memory
& ]" u1 D# O7 a" S P: v
499 bytes of readwrite data memory
9 Q# r- y, P- N7 D8 Y0 f/ v+ f2 n
我感觉ram占用有点大,后来我编写了个什么都没有的main函数,ram占用是272B,所以本系统ram占用应该是499-272=227B
5 f, M0 ?9 m% u1 w0 `' J( s
优化级别选则balance.
+ o! u7 n- h, h5 c E
/*--------------------------------------------------------------------------------------+
! v, k7 ]- F8 k
|系统函数声明 |
% c2 j( m8 Z- C0 z+ e
+---------------------------------------------------------------------------------------*/
. m; Z, ]7 j9 i4 I
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务
m8 v9 Q! V& z( [" z
void RAYS_Start(void); //系统启动函数
, G# ?6 p7 a3 l% \8 E! X) f. T
void RAYS_TaskResume(INT8U prio); //任务恢复函数
" X3 C6 ?8 z* b. P7 S1 A
void RAYS_TaskSuspend(INT8U prio); //任务挂起函数
5 U. I1 Y5 J1 `* a, Z* n& X
void OSSched(void); //汇编调度函数
, ]8 t% T4 g% C% T
void RAYS_TimeDelay(INT16U ticks); //任务延时函数
0 z) \& S. X9 Y1 ^4 W6 h; j
void Idle_Task(void);
9 N5 `8 V0 ~8 V9 h1 I% }
void RAYS_Init(void); //系统初始化
1 {. L1 R, z+ G" H7 b7 _
void TickIntHook(void); //系统节拍钩子函数
d" X5 g- l% m
' M& ^6 b( E; \' b a% w
) J: S2 j( N/ g# m/ k1 w
欢迎大家测试,我是新手,难免有很多bug,三种版本90%代码都一样,与cpu最相关的RaysRTOS_ASM文件差异较大,不过格式也一样.
. M5 Y+ Y) N" C: R5 J4 a; @3 ?* t# f
我的qq 771992497 大家多多测试,有问题及时反馈
RaySRTOS0.3版本.rar
2016-7-2 14:42 上传
点击文件名下载附件
下载积分: 威望 -5
139.82 KB, 下载次数: 1, 下载积分: 威望 -5
作者:
helendcany
时间:
2016-7-4 14:24
谢谢楼主,一步步来,学习中……
/ }. Q( u3 R1 H. V1 f) Q7 [# k
作者:
Dedy01
时间:
2016-7-4 15:22
好资料哈,童鞋们有福咯!
1 `8 K/ e/ ], c& ?
作者:
wu68aq
时间:
2016-7-4 15:55
感谢楼主分享!!!
4 h% N/ |4 ~. J
欢迎光临 EDA365电子工程师网 (http://bbs.elecnest.cn/)
Powered by Discuz! X3.2