|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
RaySRTOS0.3版本 支持三种平台:51 AVR STM80 j d1 r( ~1 w, }+ E5 \8 N
较以前版本将RaySRTOS主文件和不同CPU平台文件分开,形成了以下目录:2 N" C) C' }( z; ?' l. O
RaySRTOS(总体文件夹)
* X: c0 W G; ^ ^ C& [" P5 S( f |Kernel(文件夹)|RaySRTOS.c 系统平台无关主文件. s2 C9 u: y) T. u+ M" t
| |RaySRTOS.h 系统平台无关头文件
9 b) ^8 S6 B7 y, Q7 H% {- L0 Z |
) p: K! h9 `, g {! M: `/ X |CPU(文件夹) |8051_KEIL(文件夹)|CPU.c 特定平台CPU相关c文件
3 D4 e, z l6 f9 u8 J4 O5 I | | |CPU_ASM.asm 特定平台调度代码
* Y( H$ p2 u- o! R | | |CPU_CFG.h 特定平台数据定义以及系统配置
1 S. w/ H. ?3 \) H | |
5 ^' A) \5 C+ j5 I: f, d! R4 j | |AVR_GCC(文件夹) |......
! G0 \" M. j& W6 O+ a1 ^ |# \ V# |+ ^/ N& h
|- q5 c( m4 c( M( t# v& ~
|
3 j8 L) e1 [2 Q$ A0 C+ f- h |DEMO(文件夹) |各种平台演示代码工程
- z! g* _$ a3 K' g5 N
4 O5 \7 A2 n3 c! T$ j该实时操作系统具备以下几个优点:
) }8 H& k! A. `* F6 \6 H2 b" i3 S O% @4 F5 ~5 c/ M3 a- u
1:全抢占式优先级调度
9 W* G' A9 q5 I7 g0 C+ u' k5 I# O2:小型化,适用于单片机
% P; g1 S$ u6 E9 H) s* y
8 Q0 k& F x$ R8 \ C0 @0 {* r8 x. J7 |# Z/ N& i4 k; u& v; T
% D1 f: v5 t8 G/ m) o; w+ k" ?' Z& U( w1 F$ E" Y1 {, ]% L! G
51版本
% I$ `; D% c! T( U7 @! c, \% Rkeil4编译版本,89c52单片机运行,仿真proteus7.5sp3 1 D2 T, m) d; Z" T! d
由于是优先级抢占式调度,建立了两个任务,占用ram稍微较大,flash占用还可以,占用情况如下: 6 c/ j! Z$ l1 l M) E+ Y! W ?
Program Size: data=92.0 xdata=0 code=950 : r( W* Q! c6 g5 J6 c
下面是系统函数声明
# W/ s9 g6 s- [% y/*--------------------------------------------------------------------------------------+
9 M8 f4 P/ E0 o- X: {4 u|系统函数声明 | * o. s, O: J9 e+ t6 f, A- a
+---------------------------------------------------------------------------------------*/ 7 S3 t* D% e+ b- N3 T1 W
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务 $ _& C ~+ n4 L6 E. y" E+ |4 c
void RAYS_Start(void); //系统启动函数 ; u9 V& ^9 z0 D" c1 a R
void RAYS_TaskResume(INT8U prio); //任务恢复函数 & w2 z v) f- c7 k) }
void RAYS_TaskSuspend(INT8U prio); //任务挂起函数
' g0 y. d* L; s; x" [- G; ^void OSSched(void); //汇编调度函数 # R! ?: V* H- \4 v8 i- H
void RAYS_TimeDelay(INT16U ticks); //任务延时函数
% C# S/ {3 E u) \4 Bvoid Idle_Task(void);
6 h8 G) |5 F% Q4 Jvoid RAYS_Init(void); //系统初始化 5 h( M4 t1 F |9 y
void TickIntHook(void); //系统节拍钩子函数 / b6 s# q/ ^# B- h& V' Z6 W& g& H
! D$ F- ?3 k' F2 ~6 }- g: E9 G
" v( k* R/ M! e: w
0 L0 W; r& m3 I! ~( J3 W" ~( ]avr版本 : p, T. R; W0 |. Y9 g" w
用winavr20060421编译,ide选择的是avr studio,也可以用winavr编译,仿真同样是proteus7.5sp3,调度在16兆只用10us(avrstudio软测)
) H) O8 _( p8 |单片机型号分别测试了mega128 和mega8和mega88,都可以运行,但程序如果大于64k的话调度部分pc需要改动一下 8 V( y D# n: V8 m! B. P; A
由于是优先级抢占式调度,建立了3个任务,占用情况如下:
. j/ _0 S1 Y9 Y& Z, B1 {$ E' n
b* t( E2 I3 } Q) X) gProgram: 1178 bytes
% \: X X* |/ {: Z7 g* Q4 [% K(.text + .data + .bootloader) * C5 G6 u" I4 ?) w% o
4 t7 }: P3 e1 tData: 225 bytes ( G* z5 C( W2 d
(.data + .bss + .noinit)
" y6 z! z0 r6 d8 D6 R! c默认优先级0s
" Q: s! X: @$ s% K5 N/*--------------------------------------------------------------------------------------+
) K4 M0 z1 C" ~- v- F|系统函数声明 | ! o( f/ p- ?$ m. k
+---------------------------------------------------------------------------------------*/ : J$ V b, ]9 P+ w
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务 . s- H) v5 W. Q9 h4 H& U/ v
void RAYS_Start(void); //系统启动函数 * f: v4 _6 q5 u- c# w1 J8 j) ^
void RAYS_TaskResume(INT8U prio); //任务恢复函数 , p( e* P0 t% L7 N. D; @2 D
void RAYS_TaskSuspend(INT8U prio); //任务挂起函数
# o8 U, e! F, \! qvoid OSSched(void); //汇编调度函数 ( Z- ?8 a0 Z) e; F ~
void RAYS_TimeDelay(INT16U ticks); //任务延时函数
$ f- ?1 G; E9 I. ?. O7 |: ^void Idle_Task(void); + N' L+ d, O" h
void RAYS_Init(void); //系统初始化
1 ~ D; Z" g+ w$ D: @, f0 n$ ^void TickIntHook(void); //系统节拍钩子函数 ( t K' r6 [6 }5 ^# r, o7 J
, D7 J' y( g1 z, t1 |. `! a! ^8 K; Y; i; J
最后来stm8s105c6版本,本人手上只有这个小小的discovery板子,100块买的,所以先拿它做的测试,很稳定!
( V) K" ]4 c& x0 {4 v编译器选择的是IAR,因为它里边支持c语言是用的模拟寄存器!!!!stvd好像用的是堆栈,导致在stvd上做系统几乎不可能 ; v9 Z, g1 q2 [/ b
stm8工程,是stm8s105c6版本,仿真是硬件仿真,因为proteus不支持stm8STM8IAR.rar) 4 g" {8 q0 o+ V" O1 r2 W
; q0 C, P) h+ {) v2 H9 q# N
flash和ram占用情况如下:
2 j4 u3 V% v0 P. J; Q/ g* e- R 941 bytes of readonly code memory
; m! B4 P( R Z* ?, ~% u1 D 132 bytes of readonly data memory 8 L7 E B4 Y& Q
499 bytes of readwrite data memory
( m4 o M9 U5 a G6 [我感觉ram占用有点大,后来我编写了个什么都没有的main函数,ram占用是272B,所以本系统ram占用应该是499-272=227B
, s' }! T$ j4 d9 S* Z优化级别选则balance.
* n4 G& @# a# f/*--------------------------------------------------------------------------------------+
8 Z9 G( w+ `# f1 w2 E2 y: P|系统函数声明 | : C4 Q1 J' F+ ~8 D) N0 U; K5 G
+---------------------------------------------------------------------------------------*/ " C) f9 T1 M% x0 w/ h) k! L
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务 3 [# j4 P- m# P) a" \
void RAYS_Start(void); //系统启动函数 & H9 V: c3 c' W( C1 M7 [
void RAYS_TaskResume(INT8U prio); //任务恢复函数 + Z$ i( s5 G) t6 g( l& s2 g* S
void RAYS_TaskSuspend(INT8U prio); //任务挂起函数 + n- v4 g3 n- a% q
void OSSched(void); //汇编调度函数 q" p) K0 W! ~3 w+ ]- n
void RAYS_TimeDelay(INT16U ticks); //任务延时函数
% a8 G; B4 u& m1 gvoid Idle_Task(void);
- U4 Y+ t& g( r# x9 C6 Jvoid RAYS_Init(void); //系统初始化 3 \) J# C9 _5 {* I p
void TickIntHook(void); //系统节拍钩子函数 ' w# t' ~$ {+ ~" z0 H$ E
: L/ O" l9 Q7 V G4 |% `# x 0 N# g) U' ?: S# s: l1 V( O
欢迎大家测试,我是新手,难免有很多bug,三种版本90%代码都一样,与cpu最相关的RaysRTOS_ASM文件差异较大,不过格式也一样.
- P* y& M& I1 K3 `" j0 E7 P X7 ]: s我的qq 771992497 大家多多测试,有问题及时反馈 |
|