|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
RaySRTOS0.3版本 支持三种平台:51 AVR STM8
4 C6 Y0 J9 @& d% }较以前版本将RaySRTOS主文件和不同CPU平台文件分开,形成了以下目录:, Q$ p' ^1 w/ Q* H0 p$ i
RaySRTOS(总体文件夹)) Y. m# x9 B3 O& c9 ~4 b
|Kernel(文件夹)|RaySRTOS.c 系统平台无关主文件9 A" g+ b8 f$ z3 M; R% y& [" x
| |RaySRTOS.h 系统平台无关头文件- _" F, ~5 K: r+ H. Q: P: @2 f# k
|3 X& g/ U! D3 z% i& h* D1 z" }
|CPU(文件夹) |8051_KEIL(文件夹)|CPU.c 特定平台CPU相关c文件
* L* r+ B4 i+ Y8 o9 |0 j% o! n | | |CPU_ASM.asm 特定平台调度代码, M0 y; A3 e5 c/ y! F( y( x2 t* l v
| | |CPU_CFG.h 特定平台数据定义以及系统配置$ L/ t" X) T. w! p, h) w
| |0 D& x+ S4 U, Q0 M) H8 h l( W
| |AVR_GCC(文件夹) |......
* k4 k$ G) M r6 g& [* M, J. ^ |
9 h7 [' _! v$ a |2 Q# l+ ?& }: n! S' m
|7 x: A: k* ?1 v- |5 \, |
|DEMO(文件夹) |各种平台演示代码工程
1 \( G( l7 `; f" |1 W8 y1 F' z8 W5 B1 k* |' A- B! e# H
该实时操作系统具备以下几个优点:
/ l' w0 ?; F$ `9 q3 t
. B& e1 v# W! O3 u/ s* I2 i3 W1:全抢占式优先级调度
5 h, s; t r- H2:小型化,适用于单片机4 Y. ?2 i G j/ c+ j+ @/ l& \
, q7 e4 u$ ^% n+ [" R
9 ]) L7 i e: k! l a! o
! T$ J) a- K: f% K
+ h# z5 R& Q: h1 }8 Z& h
51版本
' n7 @/ ^# C1 v- k1 ]keil4编译版本,89c52单片机运行,仿真proteus7.5sp3 & d8 J, _$ V+ q+ m
由于是优先级抢占式调度,建立了两个任务,占用ram稍微较大,flash占用还可以,占用情况如下: 3 F: h: Q3 p: u$ a
Program Size: data=92.0 xdata=0 code=950 - ?5 C# u! V; a0 Y
下面是系统函数声明 " G* t, ?, x+ Y, H2 t2 [! \
/*--------------------------------------------------------------------------------------+
, ~: q4 Y, X3 O$ c% G, o|系统函数声明 | ; r5 Z3 S" B& |( n" S
+---------------------------------------------------------------------------------------*/
. D7 e: w P# T, {% c$ @# m# wvoid RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务
' V+ m( K; Q O* r& O5 Y+ v* x# Z6 Lvoid RAYS_Start(void); //系统启动函数
$ m) V7 V2 r, ?2 }2 ~' w1 u' H% kvoid RAYS_TaskResume(INT8U prio); //任务恢复函数
* H! L* i8 T2 ~3 j4 lvoid RAYS_TaskSuspend(INT8U prio); //任务挂起函数 + h5 a% f/ V4 P0 C4 W2 |
void OSSched(void); //汇编调度函数
# C/ G$ H5 t/ V8 o$ k: ~/ }- z& C( |void RAYS_TimeDelay(INT16U ticks); //任务延时函数
+ b- a) O: Y) Q! L8 Pvoid Idle_Task(void); / Z$ W9 u2 |' x5 h5 K/ ^
void RAYS_Init(void); //系统初始化
3 {5 u; ~; Z9 K$ X' B0 xvoid TickIntHook(void); //系统节拍钩子函数 + I7 I5 x) ^5 H$ I7 K w. z- v
E. v6 z$ O. G* s6 V
! u2 ^$ X% A! {9 |, {' C
2 o$ m" V' q6 Z! W: vavr版本 9 T% w: j% U3 M1 p4 W
用winavr20060421编译,ide选择的是avr studio,也可以用winavr编译,仿真同样是proteus7.5sp3,调度在16兆只用10us(avrstudio软测)
4 Y) A/ ?* s; W, n单片机型号分别测试了mega128 和mega8和mega88,都可以运行,但程序如果大于64k的话调度部分pc需要改动一下 8 Z" A4 j7 P" S! y9 q
由于是优先级抢占式调度,建立了3个任务,占用情况如下: ) d5 Y4 b9 a; J' e3 n
7 |. Q& R9 I+ A- N
Program: 1178 bytes
% w P/ V* K# ]8 Y! D: A7 F(.text + .data + .bootloader) ?1 S. W/ g" `/ V
$ E5 @! ?: N' x/ D- c7 RData: 225 bytes 4 \# f1 ~0 f+ n3 Q+ X
(.data + .bss + .noinit) 0 i0 Z! o; ~; O) j0 U# @& h5 s p
默认优先级0s
V8 D, u+ j; C$ N! _, N/*--------------------------------------------------------------------------------------+ / p0 B/ F# C! g0 ?/ \1 k2 N
|系统函数声明 | % X0 T# h% H5 Y- O$ B! s
+---------------------------------------------------------------------------------------*/
! v+ i% \* w( K& qvoid RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务 " w# i' t3 p2 y& V3 q7 F a
void RAYS_Start(void); //系统启动函数 * E. }) S) z5 c8 p+ ^, a) d
void RAYS_TaskResume(INT8U prio); //任务恢复函数 4 V# S2 w6 Y$ J8 o* u' S
void RAYS_TaskSuspend(INT8U prio); //任务挂起函数 S% }( p% b- `% C/ N0 d
void OSSched(void); //汇编调度函数
4 P6 U) S! x7 _& ^- g4 U. {% ivoid RAYS_TimeDelay(INT16U ticks); //任务延时函数 6 {$ a- p5 t. h6 M0 t9 V
void Idle_Task(void); 1 S9 q4 I( u0 `2 \9 @5 F" B
void RAYS_Init(void); //系统初始化
( i- Z% q8 x, ]; M+ E3 rvoid TickIntHook(void); //系统节拍钩子函数
7 c1 z3 h" K, [( m4 D( I- F
1 Z# C: T* s8 `
* b& \& x9 V# H最后来stm8s105c6版本,本人手上只有这个小小的discovery板子,100块买的,所以先拿它做的测试,很稳定! ( H+ w4 |1 q, i) Z: M2 Z$ F, \
编译器选择的是IAR,因为它里边支持c语言是用的模拟寄存器!!!!stvd好像用的是堆栈,导致在stvd上做系统几乎不可能
2 j& O# V- p& h2 f+ ]1 `2 `: U# Pstm8工程,是stm8s105c6版本,仿真是硬件仿真,因为proteus不支持stm8STM8IAR.rar)
# i& q# x* x! E( f- p/ U/ D) B
z, [0 M c% P; fflash和ram占用情况如下:
" f0 u) r* t/ V% O/ ]7 W 941 bytes of readonly code memory
/ _, U8 O6 M& k$ s) Y 132 bytes of readonly data memory
% \0 H- h( T& W 499 bytes of readwrite data memory : U% H# w# t9 o/ }# `0 K
我感觉ram占用有点大,后来我编写了个什么都没有的main函数,ram占用是272B,所以本系统ram占用应该是499-272=227B
1 r* n% M" ]( \; f* _; }优化级别选则balance. ' N) J" o3 C" F3 f
/*--------------------------------------------------------------------------------------+
/ v4 E$ h# \5 R- q+ d|系统函数声明 |
9 H7 o) X' o. r: ]- X# A( L G+---------------------------------------------------------------------------------------*/
1 R2 i, q$ p) s$ i( h. [# F' \void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务 * x! j. z1 `3 h8 X) }" U3 n
void RAYS_Start(void); //系统启动函数
1 j* r3 n; P" A; lvoid RAYS_TaskResume(INT8U prio); //任务恢复函数
( X8 V- p6 Q9 O& Yvoid RAYS_TaskSuspend(INT8U prio); //任务挂起函数 ! l. V- H# p* v- ]% k
void OSSched(void); //汇编调度函数
: O" C( T( T3 Q. ^, [void RAYS_TimeDelay(INT16U ticks); //任务延时函数 , |4 {2 u# I4 X# v% W4 Y
void Idle_Task(void);
) z9 {( ]# r- K/ s# \3 x+ Nvoid RAYS_Init(void); //系统初始化 ; M5 i% {7 @0 x
void TickIntHook(void); //系统节拍钩子函数
, X; @! z$ x" }" p+ f$ r+ P; E- S/ M3 z) @* _6 \$ E
1 Y8 i0 G3 ~$ x' T) j) P
欢迎大家测试,我是新手,难免有很多bug,三种版本90%代码都一样,与cpu最相关的RaysRTOS_ASM文件差异较大,不过格式也一样.
+ q2 c9 b' x* e$ O我的qq 771992497 大家多多测试,有问题及时反馈 |
|