|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
RaySRTOS0.3版本 支持三种平台:51 AVR STM8" s: s5 t2 m/ R6 o) n/ b% O8 p& [7 w
较以前版本将RaySRTOS主文件和不同CPU平台文件分开,形成了以下目录:( l& c1 b/ |0 [6 h
RaySRTOS(总体文件夹)& w' _: `1 J8 i
|Kernel(文件夹)|RaySRTOS.c 系统平台无关主文件
5 `& O9 U9 C* ]" R8 w( ~! Z5 X' @ | |RaySRTOS.h 系统平台无关头文件6 x4 ]1 J# q$ D* t: A: G0 p
|
7 Q7 `$ d* a- y3 Z6 Q |CPU(文件夹) |8051_KEIL(文件夹)|CPU.c 特定平台CPU相关c文件
( [& l) H0 [* O+ |' D3 n | | |CPU_ASM.asm 特定平台调度代码4 j! \$ r% t1 l0 ~% b# L/ k a2 e# `
| | |CPU_CFG.h 特定平台数据定义以及系统配置
2 a+ [0 l4 }. P | |
5 U( Q; t0 t; U* `& Q9 K# _5 a1 u | |AVR_GCC(文件夹) |......4 G0 r# ~3 G' s8 y& f9 W
|
+ U7 A x- ?, j8 z+ |, N/ a |
$ w4 o* [/ y: g( u- }) c |
; B$ k) ^: S) D2 ?+ x1 ? |DEMO(文件夹) |各种平台演示代码工程
3 ~7 n. L# |1 u0 H+ u3 c L S' O0 A+ U3 _6 t7 }
该实时操作系统具备以下几个优点:, X0 M/ F8 F. E. ?6 R8 p- }
# I7 B$ e$ r( T; a. c+ ^$ w. `1:全抢占式优先级调度' a' |5 t: ] Q8 j5 H$ J
2:小型化,适用于单片机) M0 G `" t7 q r' ~+ J& t
) c( ^1 D7 k& {6 o1 g
1 f2 A1 X- X' s6 b* `, g# w# M
7 k7 t. D# a) B% K
4 M) h: J/ W! r4 m
51版本 " i" w7 q$ Z/ N+ o" i7 L- Z$ ?
keil4编译版本,89c52单片机运行,仿真proteus7.5sp3
1 i# ?$ ?( L* q& _由于是优先级抢占式调度,建立了两个任务,占用ram稍微较大,flash占用还可以,占用情况如下: % N& T& Y' p, j2 A$ w! D
Program Size: data=92.0 xdata=0 code=950 3 V! q& s1 O4 p& _ y5 n
下面是系统函数声明 / \$ d" V7 O5 Q9 U* ]
/*--------------------------------------------------------------------------------------+ $ c) y% @3 n$ h" J
|系统函数声明 | 2 n$ U7 y2 |/ c! l- f) v; |
+---------------------------------------------------------------------------------------*/ : B; j' J3 U, H' o# t
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务
9 X! l( y7 `- m, {+ |void RAYS_Start(void); //系统启动函数 . t. r& k0 V. C# J) u" m
void RAYS_TaskResume(INT8U prio); //任务恢复函数 + ^; {, i9 \) k0 c
void RAYS_TaskSuspend(INT8U prio); //任务挂起函数
/ }6 O3 V( H7 Qvoid OSSched(void); //汇编调度函数
$ o/ t, l6 k9 U7 g( u2 xvoid RAYS_TimeDelay(INT16U ticks); //任务延时函数 2 i& [' p2 ^0 l) X2 W6 N) s6 @
void Idle_Task(void);
4 d) A/ b$ s* h! b- Rvoid RAYS_Init(void); //系统初始化
4 F7 x/ _' i( e0 ?+ n9 p1 ?void TickIntHook(void); //系统节拍钩子函数 # ?( H7 k# Y/ H" l4 X# }
* i3 t+ k3 u( u' R
3 _% O- t) \: g! H$ K
4 A) h9 g, t4 X( wavr版本
2 t, b5 g1 {2 @7 x# P用winavr20060421编译,ide选择的是avr studio,也可以用winavr编译,仿真同样是proteus7.5sp3,调度在16兆只用10us(avrstudio软测)
4 Y& L/ K9 M1 ^; o/ N U单片机型号分别测试了mega128 和mega8和mega88,都可以运行,但程序如果大于64k的话调度部分pc需要改动一下
8 _- p1 t' g- U" k8 `* I9 _% V9 G由于是优先级抢占式调度,建立了3个任务,占用情况如下:
2 Q( P/ `2 p* E% W4 I9 N& V
9 p$ a9 E @7 X; Q) LProgram: 1178 bytes
' q: Y3 M4 \+ r4 L) d; M$ ~(.text + .data + .bootloader)
; z+ N$ W5 n L& a3 ?/ y
! o3 i6 |2 V8 j" m- a, ^! i% C9 AData: 225 bytes
/ h+ v; ~5 K4 o7 g" Y# v% U(.data + .bss + .noinit) 2 k8 S5 G# P! B h* z- x4 O* \+ q
默认优先级0s 8 n( t. s+ g- b# O
/*--------------------------------------------------------------------------------------+ 9 A, v4 M! ?0 a4 L) Q# }0 m
|系统函数声明 | 2 T6 ~: k2 h2 ^4 Y7 S; ~6 ]# s
+---------------------------------------------------------------------------------------*/ ! c8 |* X6 C. Y2 L" @9 R. H
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务 2 u/ r: l# V7 R9 `0 q
void RAYS_Start(void); //系统启动函数
+ R( B; f. X) s S6 k9 T9 nvoid RAYS_TaskResume(INT8U prio); //任务恢复函数
( ]: i/ r5 M; [& K& fvoid RAYS_TaskSuspend(INT8U prio); //任务挂起函数
9 B5 o" }% a! ]& q5 A' c4 Q8 X/ e( |void OSSched(void); //汇编调度函数
' e2 X% [, P) u8 o6 P5 M, }. Mvoid RAYS_TimeDelay(INT16U ticks); //任务延时函数 " t$ ?- K! M. X. n" u7 X
void Idle_Task(void);
+ }' @ O& u5 Q! n) hvoid RAYS_Init(void); //系统初始化
0 H* c! ^, }: G$ w, lvoid TickIntHook(void); //系统节拍钩子函数 6 S' H2 ?3 q$ e( g! n, P
& D3 y" t s" Z5 L- v! G- \3 x) w/ c% P4 C3 b
最后来stm8s105c6版本,本人手上只有这个小小的discovery板子,100块买的,所以先拿它做的测试,很稳定! , a, n4 V Z6 _$ e$ y W2 {# p4 ^
编译器选择的是IAR,因为它里边支持c语言是用的模拟寄存器!!!!stvd好像用的是堆栈,导致在stvd上做系统几乎不可能 " p2 [$ S/ \$ M
stm8工程,是stm8s105c6版本,仿真是硬件仿真,因为proteus不支持stm8STM8IAR.rar)
5 |& M- ?7 U3 Z; { B6 h* M
' v" q) e5 D- z# \8 w9 g* B3 {3 yflash和ram占用情况如下:
" Y! y# y& U" K E; q 941 bytes of readonly code memory * |$ |3 @ P. y. {# I4 e
132 bytes of readonly data memory
) |3 z" v# F$ Q$ t( L1 N- C 499 bytes of readwrite data memory ' a/ R" P9 v6 Q; M6 I* Q( Q
我感觉ram占用有点大,后来我编写了个什么都没有的main函数,ram占用是272B,所以本系统ram占用应该是499-272=227B
- T1 Y* J4 T& e" u% R3 Y7 J+ b优化级别选则balance.
( q! [6 ]& j9 l' L. C' U3 M. Q/*--------------------------------------------------------------------------------------+ ) B3 H+ \& q+ d
|系统函数声明 | ( w. m0 G: u2 |9 X
+---------------------------------------------------------------------------------------*/
# ]2 \9 f$ V7 [* j evoid RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务
: @0 ]- b& K% c1 W9 i0 `* m$ O" Lvoid RAYS_Start(void); //系统启动函数
. M: o6 ]) x {$ T8 u h4 Q7 ]; r: pvoid RAYS_TaskResume(INT8U prio); //任务恢复函数 - l! w u" e3 S7 m2 Y4 R- W
void RAYS_TaskSuspend(INT8U prio); //任务挂起函数 + h& s* f3 Y4 v% U s/ D
void OSSched(void); //汇编调度函数
) q- H! ^$ ?8 v1 m) mvoid RAYS_TimeDelay(INT16U ticks); //任务延时函数
: k" T' y& n: A( t9 Qvoid Idle_Task(void); ; B& _9 |' k- N4 w4 P# u6 M2 _
void RAYS_Init(void); //系统初始化
* {. y! E# j& {, M# o. Q- vvoid TickIntHook(void); //系统节拍钩子函数 / N, ]7 D$ ]$ ?, e7 F& n' A. B
9 c: M+ C4 ~/ y( y; T! U% ^
2 ^. k7 c$ k c' a4 {: W. b欢迎大家测试,我是新手,难免有很多bug,三种版本90%代码都一样,与cpu最相关的RaysRTOS_ASM文件差异较大,不过格式也一样.
/ u/ o6 ^ e% N5 Y我的qq 771992497 大家多多测试,有问题及时反馈 |
|