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( l1:全抢占式优先级调度
. O& x$ B* K8 c  |. z: K2:小型化,适用于单片机: 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 G51版本  
3 C) R: I% A2 C- C" ekeil4编译版本,89c52单片机运行,仿真proteus7.5sp3  " S" o; O" I# K" I/ H7 |6 l  ^
由于是优先级抢占式调度,建立了两个任务,占用ram稍微较大,flash占用还可以,占用情况如下:  
2 S, p+ ^' i# O  r5 H, bProgram 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; `( nvoid 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 pvoid RAYS_TimeDelay(INT16U ticks);  //任务延时函数  
; Q5 f. c1 U  M: S8 y7 nvoid Idle_Task(void);  ' c4 q6 u8 Q! }
void RAYS_Init(void); //系统初始化  
: B5 U" T  a% c' ^: x, [. kvoid TickIntHook(void);  //系统节拍钩子函数
8 b$ v4 U6 t( S* W  a5 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' vProgram:    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" ivoid 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 Gvoid 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. avoid RAYS_Init(void); //系统初始化  $ S( V4 t8 P; l' H2 ]; x) j
void TickIntHook(void);  //系统节拍钩子函数  
: P" I2 |9 G& b4 \: 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 Ivoid RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务  
  m8 v9 Q! V& z( [" zvoid 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 Avoid 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

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