|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
RaySRTOS0.3版本 支持三种平台:51 AVR STM8
" R: z5 m; U9 L; r6 ]$ z较以前版本将RaySRTOS主文件和不同CPU平台文件分开,形成了以下目录:
& m' k) P/ I4 ]& O9 IRaySRTOS(总体文件夹)4 D7 k8 S) u: C2 @
|Kernel(文件夹)|RaySRTOS.c 系统平台无关主文件1 Q9 R& Y$ V: b8 E/ ]' K7 o+ e
| |RaySRTOS.h 系统平台无关头文件& O. l# S2 N+ ~ ?
|
0 ~0 k, b9 y% U8 b2 @- e+ p$ b2 {; L |CPU(文件夹) |8051_KEIL(文件夹)|CPU.c 特定平台CPU相关c文件, Q f9 c* i- h9 R3 Q, I0 ]' x
| | |CPU_ASM.asm 特定平台调度代码2 u; G% Y: s/ \0 l5 Z- i5 Z2 K0 O
| | |CPU_CFG.h 特定平台数据定义以及系统配置& Y5 Q5 I0 n+ r. L; s
| |/ {3 }: |0 g0 B( K
| |AVR_GCC(文件夹) |......3 K$ F/ k1 _+ W# U, r* y
|1 O$ c, ?& E) t$ C* n, T, w! C8 l
|
! D; O! G# @% j0 J9 j- {) x% D6 P |8 V; C+ I6 @! M5 Z; z: B& y
|DEMO(文件夹) |各种平台演示代码工程: K" e/ [ ^2 k1 q/ ~
" ~" O' u: K3 @+ h该实时操作系统具备以下几个优点:) f m; B+ j( P4 b' I1 ]
- E" f% n3 v# w8 a2 D, U& l& v1:全抢占式优先级调度
& c" m, C4 t% x9 K" O8 Y2:小型化,适用于单片机% L+ d& t$ q+ U
6 @- `* w y3 C/ K$ U
' M y0 C \5 L3 M# L9 Z; D! L' V5 r8 c/ C- h) V, V1 i/ t
; t: f! p% L8 s7 Q& x0 z
51版本
7 ?, [$ ~3 h& t* h0 o6 ukeil4编译版本,89c52单片机运行,仿真proteus7.5sp3 4 ^3 E4 N- h. \4 ^( {/ D2 g. \
由于是优先级抢占式调度,建立了两个任务,占用ram稍微较大,flash占用还可以,占用情况如下:
7 P Q; p) z, i) m1 T1 w. t- OProgram Size: data=92.0 xdata=0 code=950
1 e! a- `4 e. k0 f2 M% U+ ]4 Q下面是系统函数声明 9 f" q d% i$ c! x4 w
/*--------------------------------------------------------------------------------------+
, w$ y6 A) t4 T; S0 h|系统函数声明 | 5 ^* k! F: E$ R; m, @# x
+---------------------------------------------------------------------------------------*/ . E7 t4 p V e' ^/ E; O) ~
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务
: C5 ^; c: O5 r, zvoid RAYS_Start(void); //系统启动函数
6 s f9 ~& i8 {9 C% y2 J& _: jvoid RAYS_TaskResume(INT8U prio); //任务恢复函数 4 n+ O6 Z% i. H8 g- ^8 T' p
void RAYS_TaskSuspend(INT8U prio); //任务挂起函数
9 @5 K9 Y5 p1 s( ovoid OSSched(void); //汇编调度函数 . t9 Y/ e- I* m2 s5 Y, \' j
void RAYS_TimeDelay(INT16U ticks); //任务延时函数 8 A$ |% _& l- E: O& ^
void Idle_Task(void); # ~- I3 q" \+ A& I+ [
void RAYS_Init(void); //系统初始化
8 g8 n {8 ^! {0 c0 g& u5 Uvoid TickIntHook(void); //系统节拍钩子函数
5 ~9 C1 U" F, Y `$ ?
, g& [5 y" }& H/ V8 `, ^: u- S$ f' |4 E& n& R/ f
4 N$ h- Z1 H1 u4 q4 F7 G) tavr版本 8 t$ Y8 ]7 R6 L$ ?/ j4 q
用winavr20060421编译,ide选择的是avr studio,也可以用winavr编译,仿真同样是proteus7.5sp3,调度在16兆只用10us(avrstudio软测)
: h9 C- Y" r2 `4 k. t( {单片机型号分别测试了mega128 和mega8和mega88,都可以运行,但程序如果大于64k的话调度部分pc需要改动一下
, Y s* {0 c$ ~( T1 W8 ~由于是优先级抢占式调度,建立了3个任务,占用情况如下:
+ [$ f. P- N* C( x" ]+ t
' {$ |4 ?, s6 A: y. I2 I2 hProgram: 1178 bytes " c; r: F3 v9 r }) U) t! ?& \' v
(.text + .data + .bootloader)
. H4 ~5 W' M& z! b3 Q' K/ B/ t( J: n/ D p, E! f0 c- l
Data: 225 bytes 1 Z6 u: |0 `/ C# j
(.data + .bss + .noinit) 3 _% s" l9 J& _) N' A. e2 `
默认优先级0s
8 y2 ~+ s4 t0 |/ T/*--------------------------------------------------------------------------------------+
; A1 y7 Y7 l1 _8 i# J|系统函数声明 | ) S# V }# x! Q; ~2 H1 u) D
+---------------------------------------------------------------------------------------*/ # d2 N6 u& t- \2 ]7 Z' V: |
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务 / T/ n9 P! I/ z* i6 s% Q
void RAYS_Start(void); //系统启动函数 # A4 g: V. c1 K n' I' f7 W* S+ ~
void RAYS_TaskResume(INT8U prio); //任务恢复函数
* B2 }. z' X. Z% P- N5 b8 fvoid RAYS_TaskSuspend(INT8U prio); //任务挂起函数 ) m) A( }! c8 a
void OSSched(void); //汇编调度函数 : R8 X$ _5 y3 C( z9 C
void RAYS_TimeDelay(INT16U ticks); //任务延时函数 + d7 P( y1 R w# }/ s& }/ Q
void Idle_Task(void);
* b5 c6 D9 J7 ~1 a3 f* c; |8 ~3 Lvoid RAYS_Init(void); //系统初始化 / t* H* W v2 @) l* h
void TickIntHook(void); //系统节拍钩子函数
$ m; E6 I2 {0 b" s* P$ ~0 D. \, g/ X. w0 `: {4 c- u) j% `/ O( R3 j
, b" ~$ ?0 l7 V最后来stm8s105c6版本,本人手上只有这个小小的discovery板子,100块买的,所以先拿它做的测试,很稳定!
% Y& E8 k3 [8 z/ t% e8 x编译器选择的是IAR,因为它里边支持c语言是用的模拟寄存器!!!!stvd好像用的是堆栈,导致在stvd上做系统几乎不可能 ; v h! H& J2 R x4 q9 M
stm8工程,是stm8s105c6版本,仿真是硬件仿真,因为proteus不支持stm8STM8IAR.rar) + w5 h0 D8 g7 K8 O$ S1 U6 d
4 g: c4 `. @+ G9 M1 A
flash和ram占用情况如下: 8 v- J8 G& S" J- [+ M$ w4 A: ?
941 bytes of readonly code memory 6 F% M2 o/ F }6 w6 q2 T$ ^
132 bytes of readonly data memory
' ~' T* R, H. j. y0 {5 k 499 bytes of readwrite data memory $ s& U2 Z9 M+ P
我感觉ram占用有点大,后来我编写了个什么都没有的main函数,ram占用是272B,所以本系统ram占用应该是499-272=227B $ {! v2 C- S1 N3 K+ h
优化级别选则balance. ; u9 ]- s+ K. x8 R9 w
/*--------------------------------------------------------------------------------------+
) P$ u3 |0 W& U1 c! E|系统函数声明 | : W+ U/ S6 k8 V) H
+---------------------------------------------------------------------------------------*/
6 b( j7 E P; f, Tvoid RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务 ! ^3 H, ]9 G; n4 t6 H7 K* U
void RAYS_Start(void); //系统启动函数
9 k* n. n4 x# T6 L6 `( X0 G: }+ _void RAYS_TaskResume(INT8U prio); //任务恢复函数
1 G6 }! T" m8 e+ Q Q: g, f+ q! x: gvoid RAYS_TaskSuspend(INT8U prio); //任务挂起函数
$ D- ^4 t6 B) G: Zvoid OSSched(void); //汇编调度函数 0 n# u+ ^! E/ U
void RAYS_TimeDelay(INT16U ticks); //任务延时函数
: c y2 g5 Y2 mvoid Idle_Task(void); - y, C( C6 j, D" _/ N9 ~
void RAYS_Init(void); //系统初始化 8 [' C2 p) Y' ~( O- Z" k- _, l' ~; l
void TickIntHook(void); //系统节拍钩子函数
% e1 N! e' J j# O9 A3 i$ z
3 e/ H4 }" J3 h! z ( Z6 N6 T0 c1 b
欢迎大家测试,我是新手,难免有很多bug,三种版本90%代码都一样,与cpu最相关的RaysRTOS_ASM文件差异较大,不过格式也一样. 9 i$ Y' T: B. Z1 K
我的qq 771992497 大家多多测试,有问题及时反馈 |
|