|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
RaySRTOS0.3版本 支持三种平台:51 AVR STM84 c& i. \5 v" |, A
较以前版本将RaySRTOS主文件和不同CPU平台文件分开,形成了以下目录:
- d; v' r/ P- b% Y+ ^RaySRTOS(总体文件夹)) {% z9 f! P6 ]/ A
|Kernel(文件夹)|RaySRTOS.c 系统平台无关主文件% o7 |9 v6 V4 H V
| |RaySRTOS.h 系统平台无关头文件' o, M. b0 Q% [/ D6 `( @. P
|. ]0 W3 g- g1 d/ ]1 P8 M
|CPU(文件夹) |8051_KEIL(文件夹)|CPU.c 特定平台CPU相关c文件' w! V6 C1 J6 P$ }
| | |CPU_ASM.asm 特定平台调度代码
1 ?1 B5 }7 P; @, \- S | | |CPU_CFG.h 特定平台数据定义以及系统配置
) Z# v' S4 n. g9 W7 J; B: N | |7 ?9 @# |4 u3 n5 I
| |AVR_GCC(文件夹) |......
) `& o$ i% e Q4 u2 I |! H$ g( d8 A, L- r3 |$ N
|
. }! T0 U6 i( e6 s) j6 [; k |* K9 I# z3 g' K+ s% M/ P
|DEMO(文件夹) |各种平台演示代码工程
% A8 A# C4 U# t3 b. T& P/ u$ S3 @* S0 p0 r
该实时操作系统具备以下几个优点:
; z f& w* K. F& w, ]8 `1 d" l- S: K2 W, \' [
1:全抢占式优先级调度" K9 w1 Y4 l1 W
2:小型化,适用于单片机
# D" F% }( v/ p+ q! y" w
4 W5 R/ N+ l; B; P! H
& U9 _& m# g+ c+ d
; h2 V6 Q0 u2 ]. H+ f- m+ h7 D6 R! s: U9 \
51版本 $ q* D" D( G* Y7 I
keil4编译版本,89c52单片机运行,仿真proteus7.5sp3
( T0 m- M/ ?* O# `5 D! [由于是优先级抢占式调度,建立了两个任务,占用ram稍微较大,flash占用还可以,占用情况如下: 1 E, l- F+ S1 t2 u/ S3 g% E3 f
Program Size: data=92.0 xdata=0 code=950 6 C, ]6 v6 y |. b" J/ N3 k5 |
下面是系统函数声明
: b, n; B/ r9 D2 o1 B6 p/*--------------------------------------------------------------------------------------+ ( B' C$ W) M# z9 F
|系统函数声明 | 2 F1 a% g2 `- k* @; H" ^
+---------------------------------------------------------------------------------------*/
5 J- X% u. \. [ ^/ H! ivoid RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务
9 J6 t- |2 ?, h0 A, b9 I* Hvoid RAYS_Start(void); //系统启动函数 3 S: @! @) a& B- j( Z
void RAYS_TaskResume(INT8U prio); //任务恢复函数
) }) L% c5 {, q+ X9 C6 K6 evoid RAYS_TaskSuspend(INT8U prio); //任务挂起函数 9 F* k9 ]4 K: ^- V5 h, G. D; L; b
void OSSched(void); //汇编调度函数 . S% n B0 [) d0 a/ X/ I: ~
void RAYS_TimeDelay(INT16U ticks); //任务延时函数
( E0 t# u0 U" v& S. U, tvoid Idle_Task(void);
# H+ o7 U& z& P* ivoid RAYS_Init(void); //系统初始化
8 \2 B, I+ I0 @+ i. P3 W3 ^void TickIntHook(void); //系统节拍钩子函数 ) C/ L5 ?# d& S* ?! v; f* v
$ Z% s! [& j) g }+ W& F# ~! C1 v+ u" f
) R& b" @& P6 w8 l+ ~; ]avr版本 . ^+ z5 T: U' _8 m
用winavr20060421编译,ide选择的是avr studio,也可以用winavr编译,仿真同样是proteus7.5sp3,调度在16兆只用10us(avrstudio软测)
3 t* X+ ~& y/ m) {, Z5 a单片机型号分别测试了mega128 和mega8和mega88,都可以运行,但程序如果大于64k的话调度部分pc需要改动一下 " u& A5 M7 X, h
由于是优先级抢占式调度,建立了3个任务,占用情况如下: 5 ]( N# [4 K3 w8 ?
+ h; a: I. K, g' g% {' O8 b8 _
Program: 1178 bytes - I7 ^& A/ h6 i' B* z; B$ u
(.text + .data + .bootloader)
5 o+ T2 r' u* M0 r8 n' Y
$ j) C* \2 N4 R# M( \Data: 225 bytes * ^5 `* m: \7 _7 a
(.data + .bss + .noinit)
~& y/ E% \! Q7 O4 Q默认优先级0s
% H* Q6 ]+ k) G U/*--------------------------------------------------------------------------------------+ # J2 ^( m, V ]: q! C( Y5 z
|系统函数声明 | + ~1 I7 X8 z) w; z
+---------------------------------------------------------------------------------------*/ ' I) \& [; M( [# ?; h
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务
1 G; N- |' F- ?- c6 C4 g8 P# C) t, Ovoid RAYS_Start(void); //系统启动函数
J8 p5 m+ Z0 I/ e1 I! Z6 ovoid RAYS_TaskResume(INT8U prio); //任务恢复函数
1 Y6 P& _1 J/ Z" ^void RAYS_TaskSuspend(INT8U prio); //任务挂起函数 ; ?: ]5 }* ` {0 E5 K* E s
void OSSched(void); //汇编调度函数 0 I; F+ V- H7 m P4 P; w& }
void RAYS_TimeDelay(INT16U ticks); //任务延时函数
8 U5 _/ d' b1 I/ {void Idle_Task(void); . t1 E4 D. U% Q4 u/ M! ?" m
void RAYS_Init(void); //系统初始化
3 l" T Q& y; s* o) rvoid TickIntHook(void); //系统节拍钩子函数
3 R! P8 ?5 N% P- B, O( R: {
9 |/ ^* y4 @- S5 X \& ^ [; o- S" }, a6 O5 O0 b
最后来stm8s105c6版本,本人手上只有这个小小的discovery板子,100块买的,所以先拿它做的测试,很稳定! ; a; y. h. \- H5 h5 c$ G5 N. i, g
编译器选择的是IAR,因为它里边支持c语言是用的模拟寄存器!!!!stvd好像用的是堆栈,导致在stvd上做系统几乎不可能
+ H. t5 B, \, Gstm8工程,是stm8s105c6版本,仿真是硬件仿真,因为proteus不支持stm8STM8IAR.rar)
$ G- I& X+ G* {9 H _3 ^4 @
8 J5 g! o. X8 g, l+ Sflash和ram占用情况如下: . y% q0 z2 w& {/ v
941 bytes of readonly code memory
0 o" t, T6 r# m5 P, i: P 132 bytes of readonly data memory - Z0 u8 Y, I2 A5 T
499 bytes of readwrite data memory
1 e/ }3 `0 P9 v" n. y+ g, b9 X9 z我感觉ram占用有点大,后来我编写了个什么都没有的main函数,ram占用是272B,所以本系统ram占用应该是499-272=227B
& I. y( D9 ^& e优化级别选则balance.
% f, T5 Y7 ?$ E' r0 ]1 t9 G/*--------------------------------------------------------------------------------------+
: A4 ~6 E' v1 c% C/ \9 k, X) {" ]. k|系统函数声明 | , I1 z- g8 q& s6 Z
+---------------------------------------------------------------------------------------*/
$ P" `+ h7 K& R2 Z: vvoid RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务 % `5 R, O: n6 j
void RAYS_Start(void); //系统启动函数 / M/ O9 u7 {) ^" l4 [. U* w! f" O
void RAYS_TaskResume(INT8U prio); //任务恢复函数
& ]2 C1 Q- B6 C7 D" B9 qvoid RAYS_TaskSuspend(INT8U prio); //任务挂起函数 1 T, B& A9 {8 q/ `4 S5 o
void OSSched(void); //汇编调度函数 ' q. Q$ y; ~% s, X6 }& d: F
void RAYS_TimeDelay(INT16U ticks); //任务延时函数 + v/ s& } n9 w9 C; \2 P) U
void Idle_Task(void);
, m, n: q8 ~' k4 @1 zvoid RAYS_Init(void); //系统初始化
: b% |" F) [. y. u0 X5 r+ Rvoid TickIntHook(void); //系统节拍钩子函数 ; x/ B# U9 L* D+ @
8 A) p S4 R1 C5 L& t , d5 W8 A8 U+ `; x! R
欢迎大家测试,我是新手,难免有很多bug,三种版本90%代码都一样,与cpu最相关的RaysRTOS_ASM文件差异较大,不过格式也一样. ; i+ K( f/ @: A4 j' @# S6 |
我的qq 771992497 大家多多测试,有问题及时反馈 |
|