| 
 | 
	
    
 
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册  
 
x
 
RaySRTOS0.3版本 支持三种平台:51  AVR  STM8 
( E6 y' F" R" T9 I* }* T" h较以前版本将RaySRTOS主文件和不同CPU平台文件分开,形成了以下目录:$ T6 d4 Z$ M6 Z, K% t1 l" D- S7 U2 G 
RaySRTOS(总体文件夹) 
$ k. g2 F! n8 ?' H0 Z                    |Kernel(文件夹)|RaySRTOS.c 系统平台无关主文件 
! e1 d* V8 G, K+ ?* E8 A& H* K                    |                |RaySRTOS.h 系统平台无关头文件% z% Q6 ]- K1 u 
                    | 
1 d- }) b" M# T% X0 v- M1 p, p                    |CPU(文件夹)  |8051_KEIL(文件夹)|CPU.c          特定平台CPU相关c文件5 r, {9 N5 R4 ^9 R8 H 
                    |                |                |CPU_ASM.asm    特定平台调度代码: f$ a1 u  i# K. @0 }- H' c0 |+ A 
                    |                |                |CPU_CFG.h      特定平台数据定义以及系统配置 
8 J+ R; E. A1 R) t3 d                    |                | 
( g. t* R4 _2 M& @7 h& F                    |                |AVR_GCC(文件夹)  |......( Z! K9 D" l2 q4 _5 ` 
                    |- }: _0 E4 r' k 
                    | 
# N  q; _+ v0 O$ S( Y! i4 x7 [2 T                    | 
+ R3 j5 E0 `8 v; D' U- u                    |DEMO(文件夹)    |各种平台演示代码工程. D( C# L) S9 k8 i* o$ J 
 
& R$ E$ Q9 s$ V) l* L$ N0 {9 ^该实时操作系统具备以下几个优点: 
/ Z+ K5 J/ i/ j: i2 C  Y$ ?( P# ^7 d9 g) D7 w 
1:全抢占式优先级调度! i+ C; f" f; r 
2:小型化,适用于单片机$ ]: s: w+ d- u8 j 
 
; B) P) E8 o4 t& K$ a1 e/ o6 P( L8 N& x" @2 }$ t 
% w  M5 u- {$ i) l6 n% n* Q 
 
2 G; Z( z: V6 f  e51版本   
5 C3 a; P6 y9 @0 Z$ Nkeil4编译版本,89c52单片机运行,仿真proteus7.5sp3   
7 }! e2 k9 ]" ]由于是优先级抢占式调度,建立了两个任务,占用ram稍微较大,flash占用还可以,占用情况如下:  9 G2 L" J: D' t 
Program Size: data=92.0 xdata=0 code=950  ! C" j6 q6 {2 H. [$ m3 e 
下面是系统函数声明  % v5 T; r" M3 g2 w* D5 ^4 y# r3 ? 
/*--------------------------------------------------------------------------------------+   
4 [5 g% e5 s! f, J$ b* X|系统函数声明    |   
: O" R9 z, p* ~& F; Q" c" Y# v+---------------------------------------------------------------------------------------*/   
2 T& M. _7 }9 y2 z/ Z6 r# evoid RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务  9 k3 G+ t- T* P$ S8 w 
void RAYS_Start(void); //系统启动函数  9 K' j0 \* }& o- b) Z+ R 
void RAYS_TaskResume(INT8U prio);  //任务恢复函数   
; M; F5 v$ W5 E/ [void RAYS_TaskSuspend(INT8U prio); //任务挂起函数   
1 e" q7 c$ @' `5 qvoid OSSched(void); //汇编调度函数   
. F! }: Z1 f/ ^, V! P0 E" s9 ]3 ^0 Svoid RAYS_TimeDelay(INT16U ticks);  //任务延时函数   
) w- U5 o* n! e- o: T1 Bvoid Idle_Task(void);  / k5 z9 n$ z( I8 M 
void RAYS_Init(void); //系统初始化  4 ^& U. o' K7 s# H# F5 ]  Y8 R 
void TickIntHook(void);  //系统节拍钩子函数  
& r& M1 r+ }$ ?% d2 p+ g, g: |/ A/ h2 x$ _( n 
 
/ e& a0 d, N  O6 D3 l0 S2 l7 ~9 u; ~7 N) M3 M* I/ V7 h8 {" m4 m 
avr版本  - {$ C; J) N7 b2 Z9 A# ~& V% w 
用winavr20060421编译,ide选择的是avr studio,也可以用winavr编译,仿真同样是proteus7.5sp3,调度在16兆只用10us(avrstudio软测) 3 `( g, w  o* f2 j# m 
单片机型号分别测试了mega128 和mega8和mega88,都可以运行,但程序如果大于64k的话调度部分pc需要改动一下  " }' ?2 |) R) D 
由于是优先级抢占式调度,建立了3个任务,占用情况如下:    Q4 c! A8 v. r; j& e" M 
 
) q. t- V4 c  _  n( y* eProgram:    1178 bytes  3 k. m9 Q0 w3 ~4 F 
(.text + .data + .bootloader)   
1 h" P4 x. x$ \2 t& J' S 
, B; u7 b5 f4 |# D8 gData:        225 bytes  0 P, d/ q" {. w 
(.data + .bss + .noinit)   
7 z$ L2 P2 O3 B默认优先级0s   
) Z. `1 y6 `7 p3 Y/*--------------------------------------------------------------------------------------+  $ X% C! p1 m! h8 f/ M& C 
|系统函数声明    |   
1 n& [5 G' B7 y+ F0 Q+---------------------------------------------------------------------------------------*/  . ?3 n! o) v/ ] 
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务  : I3 c. h4 n5 N8 {6 B 
void RAYS_Start(void); //系统启动函数  1 K, M( r1 A/ F8 Z2 O5 J4 ]- a 
void RAYS_TaskResume(INT8U prio);  //任务恢复函数   
* O* P" F1 e! g3 M, ?( vvoid RAYS_TaskSuspend(INT8U prio); //任务挂起函数   
$ Q. r( R8 {) }' c% pvoid OSSched(void); //汇编调度函数  ( ~* x, K3 K* Z5 l3 i* n 
void RAYS_TimeDelay(INT16U ticks);  //任务延时函数   
& o) y% ]9 W5 t' k+ Ivoid Idle_Task(void);  ( z- m/ _( C7 s; v$ n% b/ L( _ 
void RAYS_Init(void); //系统初始化   
2 a* b4 k  w1 l' [4 }! yvoid TickIntHook(void);  //系统节拍钩子函数   
. \7 m/ B: M- j8 j! T 
0 j/ B& G* i) {/ _; S; Y2 v, T+ `4 h  A) w2 E; o 
最后来stm8s105c6版本,本人手上只有这个小小的discovery板子,100块买的,所以先拿它做的测试,很稳定!   
! l& X& f1 t9 [/ V编译器选择的是IAR,因为它里边支持c语言是用的模拟寄存器!!!!stvd好像用的是堆栈,导致在stvd上做系统几乎不可能  0 d2 [% _$ o' j 
stm8工程,是stm8s105c6版本,仿真是硬件仿真,因为proteus不支持stm8STM8IAR.rar)  4 D8 k$ I" W; x& y! X7 |# y" c 
 
( p9 Y- B4 c* ~  Vflash和ram占用情况如下:  6 A; f7 ?1 y7 ^+ \4 V- B 
  941 bytes of readonly  code memory   
* _6 Q/ w( p4 a8 v0 {7 Y* w  132 bytes of readonly  data memory   
' p7 k$ d! M- f' [8 Z& T7 Q$ y  499 bytes of readwrite data memory   
- _  _, L: ^8 G7 c* t% N我感觉ram占用有点大,后来我编写了个什么都没有的main函数,ram占用是272B,所以本系统ram占用应该是499-272=227B  1 k" N& f! @7 i/ I# \ 
优化级别选则balance.   
& F% {* Z- g$ Q# a/*--------------------------------------------------------------------------------------+  0 @# ]+ V* ?/ j# Y 
|系统函数声明    |  : m5 I* y* {  M. w! g& j: w 
+---------------------------------------------------------------------------------------*/   
8 L5 O( e3 d6 G# Q1 B5 Hvoid RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务   
/ @/ w) p' x$ n) _8 e/ Uvoid RAYS_Start(void); //系统启动函数   
% ^" K$ c" x8 P* Nvoid RAYS_TaskResume(INT8U prio);  //任务恢复函数  / A9 j. Y* {$ w6 _! \+ A( P5 \2 F! Z 
void RAYS_TaskSuspend(INT8U prio); //任务挂起函数   
8 b& j+ r/ _- o' Z9 u2 A( xvoid OSSched(void); //汇编调度函数   
) \: Y; \# Z9 ]( T; u' Bvoid RAYS_TimeDelay(INT16U ticks);  //任务延时函数   
' g$ |' ^' ~/ X( v3 G- Qvoid Idle_Task(void);  6 p; ~8 q( q0 x# l$ O8 o 
void RAYS_Init(void); //系统初始化   
- e- L4 L$ b8 ]void TickIntHook(void);  //系统节拍钩子函数  : E1 l# G$ v2 ~3 K 
 
- l/ R0 ^0 o' N6 Z1 Z; S6 s! D  ( J; y; \. C% { 
欢迎大家测试,我是新手,难免有很多bug,三种版本90%代码都一样,与cpu最相关的RaysRTOS_ASM文件差异较大,不过格式也一样.  ) g) E& C; L* `' N 
我的qq 771992497 大家多多测试,有问题及时反馈 |   
 
 
 
 |