|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
RaySRTOS0.3版本 支持三种平台:51 AVR STM84 v# N4 x) @1 _( I
较以前版本将RaySRTOS主文件和不同CPU平台文件分开,形成了以下目录:
& a% R% S9 v; G. Z( h6 eRaySRTOS(总体文件夹)
% }2 Q- W3 s" ^' A |Kernel(文件夹)|RaySRTOS.c 系统平台无关主文件
5 E8 A. L }/ F: {' Q/ K | |RaySRTOS.h 系统平台无关头文件
b2 q& T' b. h- r, L* @9 S |
k3 @5 i# D: o |CPU(文件夹) |8051_KEIL(文件夹)|CPU.c 特定平台CPU相关c文件- U( E8 X; k8 o' R3 x. T( z+ L7 J
| | |CPU_ASM.asm 特定平台调度代码
8 B& N" G. g5 D; L3 @ | | |CPU_CFG.h 特定平台数据定义以及系统配置% ?2 F& V, N5 z& Q# s! ~" I( t1 Y
| |5 c4 ~1 G- D) A' o. Z; m: I
| |AVR_GCC(文件夹) |......: ~/ V2 V ^* D& y% I) R
|6 ^: q& T) a* w$ Z- Q' J" |
|
: C y5 h4 z2 X: }7 P4 v6 Q |; F8 p! U3 n- {' U
|DEMO(文件夹) |各种平台演示代码工程
! }& Z, Y* f3 I# w5 J& d
# j5 s& q* S2 H. p5 Z) C该实时操作系统具备以下几个优点:7 q5 `. Q. f2 n. Y
k, K: o5 C) y; f- ~( J" C1:全抢占式优先级调度
6 E, d0 X- v7 M+ V) ^* N2:小型化,适用于单片机* r4 N) `& B% B* g" h1 r) y. W
: ~/ l1 g2 c) B0 |; \8 |
9 c' ^& V6 a& a1 V. Z% F
+ ~# W( X5 M4 n) B
- ?: x$ E: ]( \1 a! ]- v9 M4 t5 Y51版本 2 Q9 x" U& m4 @0 j2 Q
keil4编译版本,89c52单片机运行,仿真proteus7.5sp3 ' n o5 Q" D* G. h: l6 h
由于是优先级抢占式调度,建立了两个任务,占用ram稍微较大,flash占用还可以,占用情况如下: 2 @( ^7 |+ q. n
Program Size: data=92.0 xdata=0 code=950
0 E8 `* _; c9 t+ `( r下面是系统函数声明 ; \; d9 Z5 p9 U7 v
/*--------------------------------------------------------------------------------------+
' L- q/ U* i% ?5 ]1 q+ c) k|系统函数声明 |
- h1 R. b( S) H1 M6 L+---------------------------------------------------------------------------------------*/ 1 o& L5 D K* O" N4 l
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务 / @% u; ?# h- w$ P' |8 ^& w
void RAYS_Start(void); //系统启动函数 5 H) f! F, ~& V7 R- D, M
void RAYS_TaskResume(INT8U prio); //任务恢复函数 0 D/ U/ j; D7 I7 G# g% n
void RAYS_TaskSuspend(INT8U prio); //任务挂起函数 $ N* S/ n0 I, ?7 \, ~0 n
void OSSched(void); //汇编调度函数 & H2 D4 r3 z3 G7 ~! D2 v, C3 p
void RAYS_TimeDelay(INT16U ticks); //任务延时函数 0 J7 |0 D, u' Z4 T) H9 `6 P
void Idle_Task(void); 0 Z- j$ {/ h0 Q# O: l
void RAYS_Init(void); //系统初始化 3 d! P4 F6 O" u) C: s( K
void TickIntHook(void); //系统节拍钩子函数 3 T6 E# e9 l& v: Q! e1 o+ z, v
2 Z1 t5 y ]; _- c+ s2 N
6 f1 h# u) b1 u$ D0 M
' w. w9 C* f7 javr版本
0 A, M& v) Y4 R用winavr20060421编译,ide选择的是avr studio,也可以用winavr编译,仿真同样是proteus7.5sp3,调度在16兆只用10us(avrstudio软测) $ c9 s) L+ a1 \ N
单片机型号分别测试了mega128 和mega8和mega88,都可以运行,但程序如果大于64k的话调度部分pc需要改动一下 * t* e' ^6 D' J
由于是优先级抢占式调度,建立了3个任务,占用情况如下:
% [9 A, a7 w' S5 U" k! g# P# P
% S+ Y6 K* P& | E! G& I: l( uProgram: 1178 bytes % A" ^* W* T, p6 s' a
(.text + .data + .bootloader)
- t9 q: o: n0 ^( E* \+ p% v
% h( C( y" D$ T* G+ u% }# [Data: 225 bytes : l8 X5 Q9 |: u( F" i( l2 [6 R
(.data + .bss + .noinit) - T# t/ S% ?; i/ |& Y
默认优先级0s 6 M; A+ m1 l) d$ S7 J
/*--------------------------------------------------------------------------------------+ . ^; a* s# V: r: X1 H* ^
|系统函数声明 |
% [1 Q0 C/ Y8 k3 A# ~) S7 j* h3 B/ R+---------------------------------------------------------------------------------------*/
. }8 @) e# n2 N; g# s2 ~& Jvoid RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务
) q+ l1 k( X# z* S! A- E+ s0 lvoid RAYS_Start(void); //系统启动函数 * G, y! P. V4 x0 }" t( f
void RAYS_TaskResume(INT8U prio); //任务恢复函数
( J5 t6 L) t7 Fvoid RAYS_TaskSuspend(INT8U prio); //任务挂起函数 ( b! a/ ]& d1 z/ b; i/ v
void OSSched(void); //汇编调度函数 3 l$ U- H- z/ }/ n
void RAYS_TimeDelay(INT16U ticks); //任务延时函数 ( P x; E# m F& U6 L& s- \
void Idle_Task(void); 2 o" r; _1 k" o3 D
void RAYS_Init(void); //系统初始化
0 V* A6 i1 D+ ovoid TickIntHook(void); //系统节拍钩子函数 0 D' v; a C8 H2 r3 n
" }) o' U0 L$ b$ m" J3 F' f( F3 Z
3 a* c1 R! \3 X' Y% x, F! W最后来stm8s105c6版本,本人手上只有这个小小的discovery板子,100块买的,所以先拿它做的测试,很稳定! 9 e6 x- C7 @3 g! A. x" T
编译器选择的是IAR,因为它里边支持c语言是用的模拟寄存器!!!!stvd好像用的是堆栈,导致在stvd上做系统几乎不可能 ; f# U# h. B9 }( O
stm8工程,是stm8s105c6版本,仿真是硬件仿真,因为proteus不支持stm8STM8IAR.rar) 5 \( w/ V; r4 `) ?8 j; g3 S
/ f3 C; g4 a2 x- f: x' ~flash和ram占用情况如下: / @+ X* V* H5 w6 V4 ~6 _8 P
941 bytes of readonly code memory
" o k F& Q" H! l2 ~/ Z1 @5 S 132 bytes of readonly data memory
' a& T' l$ D1 Z: ~% o 499 bytes of readwrite data memory
) U# x: G' l4 E2 z) w我感觉ram占用有点大,后来我编写了个什么都没有的main函数,ram占用是272B,所以本系统ram占用应该是499-272=227B
6 `7 Y; Q: _- g. v优化级别选则balance. / l" X9 s6 b# u q
/*--------------------------------------------------------------------------------------+
, s2 f3 G$ p, |, o( w9 A; ?|系统函数声明 |
" ]7 F4 g8 x8 y6 t9 ^" f+ X+---------------------------------------------------------------------------------------*/
5 w; [# L0 w+ S1 avoid RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务
- Z: m& t+ e1 s9 G) k1 i/ M& Uvoid RAYS_Start(void); //系统启动函数
& D* J8 y, ]( f8 l) `: B* D8 Z+ svoid RAYS_TaskResume(INT8U prio); //任务恢复函数 ; S. f6 P% y. K* O3 l
void RAYS_TaskSuspend(INT8U prio); //任务挂起函数 + j0 e2 Y* L; u5 ]) k
void OSSched(void); //汇编调度函数 7 n$ ?( x7 v) M; d) U- s/ \' Q, U
void RAYS_TimeDelay(INT16U ticks); //任务延时函数 % w9 K( q/ c4 w% _8 o
void Idle_Task(void);
0 k: ?. K* v! ivoid RAYS_Init(void); //系统初始化
) Y9 \. q; g1 b# A. }1 xvoid TickIntHook(void); //系统节拍钩子函数 + U) A+ T* ^$ F& D8 F: i
! u3 A% U. u4 F
$ R% k2 V# \3 }2 h! t; r欢迎大家测试,我是新手,难免有很多bug,三种版本90%代码都一样,与cpu最相关的RaysRTOS_ASM文件差异较大,不过格式也一样.
1 x; p1 v- p: v3 V我的qq 771992497 大家多多测试,有问题及时反馈 |
|