|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
RaySRTOS0.3版本 支持三种平台:51 AVR STM89 T& @; l& s* D' m, B$ I0 c
较以前版本将RaySRTOS主文件和不同CPU平台文件分开,形成了以下目录:
$ P5 A9 [3 ~& E- w5 ^+ LRaySRTOS(总体文件夹)0 A$ {% H, G) A: m
|Kernel(文件夹)|RaySRTOS.c 系统平台无关主文件" i! Z3 j& \: Y! U
| |RaySRTOS.h 系统平台无关头文件) ~2 w; C$ L! _0 s& }
|9 t, i& z6 T; t9 N7 X, s
|CPU(文件夹) |8051_KEIL(文件夹)|CPU.c 特定平台CPU相关c文件3 B& U/ V3 N& m3 D$ _
| | |CPU_ASM.asm 特定平台调度代码. `5 T7 B6 n' U% A1 t
| | |CPU_CFG.h 特定平台数据定义以及系统配置
6 J1 ~5 h" d7 x% ?1 g% E. H | |
5 O0 I6 l: O( ]# |0 t e7 r# E5 k | |AVR_GCC(文件夹) |......8 J5 u% i" e! P( G
|& W: S# ~5 p' g
|" e: E& Y$ w% r+ |' K
|
- J5 b; b& K. K4 z. G7 T. w$ h" p) h |DEMO(文件夹) |各种平台演示代码工程0 x; p* o7 q& ~, ^7 l: a
+ u! \4 P$ a# k6 d1 X
该实时操作系统具备以下几个优点:$ ^; ?' x6 u1 b6 O0 y
' T% v. `1 \# {1:全抢占式优先级调度. O0 E- @1 X8 D0 m& d* F
2:小型化,适用于单片机
; E: g- ]( O" J4 L1 N" i8 r2 X k1 K$ y9 k& w
2 A* _0 X' Y8 A" `/ K2 J
6 k S4 v9 K0 P) J2 u+ t l
9 d* I# o+ x2 ~, P# ]+ m+ m0 j51版本
5 Q% ^9 U! @1 @) p9 hkeil4编译版本,89c52单片机运行,仿真proteus7.5sp3 0 L3 y7 f8 v( ~' K" M( D- Q- R
由于是优先级抢占式调度,建立了两个任务,占用ram稍微较大,flash占用还可以,占用情况如下: 1 |5 Q2 T% s- [2 [, v+ d
Program Size: data=92.0 xdata=0 code=950 9 m$ Y% A$ Q) w$ W3 e2 d( L$ n
下面是系统函数声明 . b, Y! ^% x$ d Z
/*--------------------------------------------------------------------------------------+ ( w4 g; G. V' j( v
|系统函数声明 |
6 l. K. \/ k2 ?7 F+---------------------------------------------------------------------------------------*/ ! i- Z* R2 G0 ^
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务
7 S% e$ _1 P3 Fvoid RAYS_Start(void); //系统启动函数 ; N9 h# S4 ]& G+ _+ [; M4 q
void RAYS_TaskResume(INT8U prio); //任务恢复函数
! w" b) D3 u5 P1 Svoid RAYS_TaskSuspend(INT8U prio); //任务挂起函数 # O+ ?' N# i/ m! i
void OSSched(void); //汇编调度函数
7 f) v/ q8 U" q- \6 i- J$ n4 zvoid RAYS_TimeDelay(INT16U ticks); //任务延时函数 ) U2 k' e( R' z" C7 X& F( N
void Idle_Task(void); : }+ i$ K7 G5 Z; b ?$ q9 c
void RAYS_Init(void); //系统初始化 5 I* Z4 R' p1 ~3 M/ K ^- o) [% T
void TickIntHook(void); //系统节拍钩子函数 $ E, b4 ?) o* e9 o4 q
; n+ U+ G( ^; P" v
. A% q+ ] W9 v0 F
# ~6 F3 J0 b& {7 { o" j. H
avr版本
" R f3 F/ M/ R& {" W7 e用winavr20060421编译,ide选择的是avr studio,也可以用winavr编译,仿真同样是proteus7.5sp3,调度在16兆只用10us(avrstudio软测)
: P: p+ C$ a t2 v& [单片机型号分别测试了mega128 和mega8和mega88,都可以运行,但程序如果大于64k的话调度部分pc需要改动一下
! ]5 c6 Y# Z5 {& s) Q) Y由于是优先级抢占式调度,建立了3个任务,占用情况如下:
5 P- u/ F, g4 g' _' l
/ Q& I/ @) r5 U. Z# r0 iProgram: 1178 bytes 2 P% q& m! X3 t) e
(.text + .data + .bootloader) # ? o' R5 x- ~* i
3 L {7 C1 J) u d2 o/ h; v: j
Data: 225 bytes 9 R7 o+ o- ?1 q6 Y! i
(.data + .bss + .noinit) k& u* n1 L: W+ D. C; i+ }
默认优先级0s
9 E2 q$ ~7 H. H4 `2 Q/*--------------------------------------------------------------------------------------+ . [* @9 H$ z% m
|系统函数声明 |
# h! j- G, ~$ }' q4 z+---------------------------------------------------------------------------------------*/ 5 `; {' z1 j, n0 A; o# ^. I
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务
5 V- q+ n. H8 T8 a( L9 r( wvoid RAYS_Start(void); //系统启动函数
9 o" Y1 z3 O7 A' J5 _1 E( evoid RAYS_TaskResume(INT8U prio); //任务恢复函数
- c( e3 c9 m" S' A* a* wvoid RAYS_TaskSuspend(INT8U prio); //任务挂起函数 ! K2 c# S7 M5 ^- {& o! y* l
void OSSched(void); //汇编调度函数
% o* {+ q* E9 c0 Y1 d; Gvoid RAYS_TimeDelay(INT16U ticks); //任务延时函数
; b% [. x7 z) ?% P b+ u. O/ Cvoid Idle_Task(void);
/ o7 g% j% a$ }/ T/ G1 Ovoid RAYS_Init(void); //系统初始化
. m1 ~3 d" r$ c# g( S* q( `void TickIntHook(void); //系统节拍钩子函数 . t0 d0 r# ?/ F( H
- B% \. ?& ^7 _: [
, G$ }# ^! ?% ]$ z3 f% c最后来stm8s105c6版本,本人手上只有这个小小的discovery板子,100块买的,所以先拿它做的测试,很稳定! ! M* d1 i3 D/ }9 A' e9 n
编译器选择的是IAR,因为它里边支持c语言是用的模拟寄存器!!!!stvd好像用的是堆栈,导致在stvd上做系统几乎不可能
9 H% s' K. q' U: Ustm8工程,是stm8s105c6版本,仿真是硬件仿真,因为proteus不支持stm8STM8IAR.rar) 5 z% g# h* d: n/ t% p! a1 I& ^
" z0 r' z" t9 g+ mflash和ram占用情况如下:
8 F, k4 ~/ N- g( G8 N3 _ 941 bytes of readonly code memory ; o6 \# X) c5 ]8 k( R# |
132 bytes of readonly data memory
$ Z; A$ a$ G' Z* a 499 bytes of readwrite data memory ! Z9 O8 [6 n+ J$ h/ W- O0 H, S8 Q
我感觉ram占用有点大,后来我编写了个什么都没有的main函数,ram占用是272B,所以本系统ram占用应该是499-272=227B 3 N; s4 p8 d! n$ m0 H
优化级别选则balance.
H2 M( r* t9 u! H/*--------------------------------------------------------------------------------------+
- M* w. E- p, K7 H( L8 C& R5 N|系统函数声明 |
5 D) p) h- }: |! n7 S+---------------------------------------------------------------------------------------*/
) C: O9 z) c- @' }2 X+ Rvoid RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务 " }$ ^% i* y0 u9 u6 U# t6 L5 e
void RAYS_Start(void); //系统启动函数 6 C! k3 x& I A" i$ {9 t/ o9 C
void RAYS_TaskResume(INT8U prio); //任务恢复函数 6 [( \& {3 B# M! Y. P/ ]
void RAYS_TaskSuspend(INT8U prio); //任务挂起函数 4 O( x7 q# P" o. C T( `
void OSSched(void); //汇编调度函数
, M; t/ r' o% k; M8 bvoid RAYS_TimeDelay(INT16U ticks); //任务延时函数 9 l4 k- i$ o# q: V+ @: v4 [
void Idle_Task(void); 8 u- w" ?: A, x5 d1 b9 F: L
void RAYS_Init(void); //系统初始化
! |* W! D% r8 G: {. z" Lvoid TickIntHook(void); //系统节拍钩子函数
' A. O7 j& c% y/ o2 |$ d, c1 n. }6 ]7 N0 i
( M1 D) q/ z0 y1 ^7 v2 K8 L
欢迎大家测试,我是新手,难免有很多bug,三种版本90%代码都一样,与cpu最相关的RaysRTOS_ASM文件差异较大,不过格式也一样.
7 L Y2 {; m9 l/ o我的qq 771992497 大家多多测试,有问题及时反馈 |
|