找回密码
 注册
关于网站域名变更的通知
查看: 1496|回复: 3
打印 上一主题 下一主题

【开源】RaysRTOS(光芒实时系统),全抢占式优先级调度,我写了51,AVR,STM8三个版本,欢

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2016-7-2 14:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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 大家多多测试,有问题及时反馈

RaySRTOS0.3版本.rar

139.82 KB, 下载次数: 1, 下载积分: 威望 -5

该用户从未签到

2#
发表于 2016-7-4 14:24 | 只看该作者
谢谢楼主,一步步来,学习中……! ]9 |3 W. C+ I) J! t; [+ I5 W& x

该用户从未签到

3#
发表于 2016-7-4 15:22 | 只看该作者
好资料哈,童鞋们有福咯!' \& C# M- {( t0 }& q

该用户从未签到

4#
发表于 2016-7-4 15:55 | 只看该作者
感谢楼主分享!!!9 o/ q  ]  r8 L
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-12 17:25 , Processed in 0.156250 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表