|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
RaySRTOS0.3版本 支持三种平台:51 AVR STM83 w% Q# q3 M& S1 L, G. u5 r
较以前版本将RaySRTOS主文件和不同CPU平台文件分开,形成了以下目录:( g3 _1 c8 _3 z1 ]* t2 |! L0 f
RaySRTOS(总体文件夹), P$ V% o6 Q" L1 F, g1 Y
|Kernel(文件夹)|RaySRTOS.c 系统平台无关主文件& m; j& @+ f3 W
| |RaySRTOS.h 系统平台无关头文件
1 v/ c( z4 z1 |0 v$ m* r |
* x1 E8 s! x# r+ ^ |CPU(文件夹) |8051_KEIL(文件夹)|CPU.c 特定平台CPU相关c文件
, q/ s' E7 Y0 X) `0 n6 p | | |CPU_ASM.asm 特定平台调度代码% B1 x5 Z1 k' }, C$ @% |( }$ M( A
| | |CPU_CFG.h 特定平台数据定义以及系统配置
: q# y$ ?# B/ N% `' @ | |
5 ^1 c" H: `$ i7 u) Y$ J | |AVR_GCC(文件夹) |......4 k* s' H! h" @( f- B- t% R
|, Y5 O7 V0 V) Q+ o/ t
|
9 G+ [; n0 N+ _' e& _$ O# g |) n. E: _/ m6 Y) g& t6 \1 W0 P# I
|DEMO(文件夹) |各种平台演示代码工程
/ O8 T. {+ t2 _# l2 K9 r4 T+ G4 Q, f; s2 }+ m+ w: b; ^! M
该实时操作系统具备以下几个优点:4 b3 Z. V' M1 u0 | P
; Y1 n$ l: P! F) a: o9 p% }1:全抢占式优先级调度8 o. L% g* u3 `$ u3 g
2:小型化,适用于单片机
8 {7 [0 L' j+ v. x0 q e! H' P+ q3 C+ | U
1 }! _. T& y I1 B F
2 l% B& N; q9 M6 F4 @
) u; C J( C5 J4 o5 K+ H51版本 % F3 T* b% `, \% Z( g5 \8 G
keil4编译版本,89c52单片机运行,仿真proteus7.5sp3
7 L( S# M' Z/ u5 z由于是优先级抢占式调度,建立了两个任务,占用ram稍微较大,flash占用还可以,占用情况如下:
" N- `' t: s( I6 H' J/ C) ?! LProgram Size: data=92.0 xdata=0 code=950
, }7 U' }, E, l2 j2 {* P! D下面是系统函数声明
4 ]3 V2 w# J: d0 \2 m7 I5 V$ ~5 ^/*--------------------------------------------------------------------------------------+
9 h/ \7 G" V$ o2 z2 z% J$ O4 Y|系统函数声明 |
2 R" @ ? X8 ^4 S7 I( M+---------------------------------------------------------------------------------------*/
- d( N3 q4 o7 v) A, U \, j! ^void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务 6 S/ o$ p; @" I/ e7 Q6 g
void RAYS_Start(void); //系统启动函数 ; o3 X" g* J' M$ ]2 ?: F
void RAYS_TaskResume(INT8U prio); //任务恢复函数
7 W4 Y) | @. v8 P0 c: @" ^void RAYS_TaskSuspend(INT8U prio); //任务挂起函数
& {- k5 t! Y3 Evoid OSSched(void); //汇编调度函数 ; n7 _2 Y1 Y+ ^4 P6 a
void RAYS_TimeDelay(INT16U ticks); //任务延时函数 % b7 t, F2 l4 s* D
void Idle_Task(void);
: \1 X0 T/ \5 T, c1 @* K6 Z5 zvoid RAYS_Init(void); //系统初始化
" p0 D; n& e( e/ v. }4 q( avoid TickIntHook(void); //系统节拍钩子函数
8 N+ Q0 N5 m: O5 H8 G& N$ y; w% a7 ]6 \) D! T: w8 d
9 b6 ^* T; c# t) S. d. z
" Y' b0 ~: s$ Navr版本 - _1 \. L9 r0 m" S
用winavr20060421编译,ide选择的是avr studio,也可以用winavr编译,仿真同样是proteus7.5sp3,调度在16兆只用10us(avrstudio软测)
3 U* t( R7 K9 j+ k0 z6 p6 H4 a9 T0 u单片机型号分别测试了mega128 和mega8和mega88,都可以运行,但程序如果大于64k的话调度部分pc需要改动一下
" D7 A1 P9 \1 E9 `* X! k' t由于是优先级抢占式调度,建立了3个任务,占用情况如下: ( c% Z1 l6 n% W" N1 x8 }; x
1 X+ j/ b5 h5 c0 g0 V+ D' uProgram: 1178 bytes - d4 y6 u# `" E% B! s5 H% B
(.text + .data + .bootloader) ( w6 Y3 B0 V& ` [- T1 m6 A
* v% J; p4 ~' a6 f
Data: 225 bytes % Y* B4 W# G n! r
(.data + .bss + .noinit) 6 I. \# u" m4 b" f
默认优先级0s 0 @( \8 m s$ g7 Y7 d3 q
/*--------------------------------------------------------------------------------------+
% z$ T+ ?, u9 e) b1 D; e4 ]# n|系统函数声明 | 4 c& u1 I( x( Z, l4 ?& |9 d
+---------------------------------------------------------------------------------------*/ ! d0 f1 A# r% `# R% u, _6 n. Z
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务
: t7 n9 [! D: b: x( nvoid RAYS_Start(void); //系统启动函数 - @7 {5 `/ ~1 g5 R; z. C# [2 w* }
void RAYS_TaskResume(INT8U prio); //任务恢复函数
( n1 O0 H' c* `- M9 bvoid RAYS_TaskSuspend(INT8U prio); //任务挂起函数
" `% f6 D0 t9 z( wvoid OSSched(void); //汇编调度函数
1 a7 M$ j3 D, R+ B; Dvoid RAYS_TimeDelay(INT16U ticks); //任务延时函数
4 d% j Z1 u0 J- c% x, |void Idle_Task(void);
' y4 c) a7 }* U3 _+ Tvoid RAYS_Init(void); //系统初始化
* f) |8 b, x# O9 |1 Svoid TickIntHook(void); //系统节拍钩子函数 7 M- |6 X; G& b1 p* ^9 ^/ _
; c* W3 w/ b. _8 x* E( M) M# A/ I2 t/ k: E
最后来stm8s105c6版本,本人手上只有这个小小的discovery板子,100块买的,所以先拿它做的测试,很稳定! 1 M/ m5 Y; Q8 \2 C
编译器选择的是IAR,因为它里边支持c语言是用的模拟寄存器!!!!stvd好像用的是堆栈,导致在stvd上做系统几乎不可能 3 |4 U# u& m- F' Y( u; K; l
stm8工程,是stm8s105c6版本,仿真是硬件仿真,因为proteus不支持stm8STM8IAR.rar) ' `4 O6 ? u w
) Q7 w! m$ M' g2 S. z3 R* D
flash和ram占用情况如下:
8 } V3 z3 o& W8 @- S+ x 941 bytes of readonly code memory ; j( ^% G0 h' D( W1 X. k
132 bytes of readonly data memory
% ~+ K) a* v# R& \* O* ^; A 499 bytes of readwrite data memory
3 R r! n1 J: o; z2 H/ U4 h我感觉ram占用有点大,后来我编写了个什么都没有的main函数,ram占用是272B,所以本系统ram占用应该是499-272=227B . i, O: F- N6 l" r; h) O* b2 F
优化级别选则balance.
% q% Z7 [% k0 ^. N; b7 a/*--------------------------------------------------------------------------------------+ 3 {/ J. ^9 `3 ]6 N* g ?+ B9 `
|系统函数声明 |
2 B% `& O( H$ B& D+---------------------------------------------------------------------------------------*/ 2 C3 V3 h/ X2 X9 z$ c* y
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务
4 L- C; j" ^: F& F$ ]% Wvoid RAYS_Start(void); //系统启动函数 0 q) }( m* s \6 t
void RAYS_TaskResume(INT8U prio); //任务恢复函数 . R$ v. F( p# I9 O# O# J6 ^
void RAYS_TaskSuspend(INT8U prio); //任务挂起函数
( U* \3 T1 R2 l! q( V0 ~void OSSched(void); //汇编调度函数 7 D) d$ C4 @( v7 k4 Y" q( K$ D. A
void RAYS_TimeDelay(INT16U ticks); //任务延时函数
/ C" A d; [' w9 D) v& Evoid Idle_Task(void);
( ?- U9 |* s4 b0 a( ?void RAYS_Init(void); //系统初始化
6 R6 L& c- e7 B/ O/ z2 dvoid TickIntHook(void); //系统节拍钩子函数
0 n2 |& C" U/ M. w) e/ G0 [( T: `3 k! c+ @
, `% H$ S4 P& c( B9 S
欢迎大家测试,我是新手,难免有很多bug,三种版本90%代码都一样,与cpu最相关的RaysRTOS_ASM文件差异较大,不过格式也一样. 4 B$ G) @: x' c! `9 O1 S
我的qq 771992497 大家多多测试,有问题及时反馈 |
|