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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
RaySRTOS0.3版本 支持三种平台:51  AVR  STM89 T& @; l& s* D' m, B$ I0 c
较以前版本将RaySRTOS主文件和不同CPU平台文件分开,形成了以下目录:
$ P5 A9 [3 ~& E- w5 ^+ LRaySRTOS(总体文件夹)0 A$ {% H, G) A: m
                    |Kernel(文件夹)|RaySRTOS.c 系统平台无关主文件" i! Z3 j& \: Y! U
                    |                |RaySRTOS.h 系统平台无关头文件) ~2 w; C$ L! _0 s& }
                    |9 t, i& z6 T; t9 N7 X, s
                    |CPU(文件夹)  |8051_KEIL(文件夹)|CPU.c          特定平台CPU相关c文件3 B& U/ V3 N& m3 D$ _
                    |                |                |CPU_ASM.asm    特定平台调度代码. `5 T7 B6 n' U% A1 t
                    |                |                |CPU_CFG.h      特定平台数据定义以及系统配置
6 J1 ~5 h" d7 x% ?1 g% E. H                    |                |
5 O0 I6 l: O( ]# |0 t  e7 r# E5 k                    |                |AVR_GCC(文件夹)  |......8 J5 u% i" e! P( G
                    |& W: S# ~5 p' g
                    |" e: E& Y$ w% r+ |' K
                    |
- J5 b; b& K. K4 z. G7 T. w$ h" p) h                    |DEMO(文件夹)    |各种平台演示代码工程0 x; p* o7 q& ~, ^7 l: a
+ u! \4 P$ a# k6 d1 X
该实时操作系统具备以下几个优点:$ ^; ?' x6 u1 b6 O0 y

' T% v. `1 \# {1:全抢占式优先级调度. O0 E- @1 X8 D0 m& d* F
2:小型化,适用于单片机
; E: g- ]( O" J4 L1 N" i8 r2 X  k1 K$ y9 k& w
2 A* _0 X' Y8 A" `/ K2 J
6 k  S4 v9 K0 P) J2 u+ t  l

9 d* I# o+ x2 ~, P# ]+ m+ m0 j51版本  
5 Q% ^9 U! @1 @) p9 hkeil4编译版本,89c52单片机运行,仿真proteus7.5sp3  0 L3 y7 f8 v( ~' K" M( D- Q- R
由于是优先级抢占式调度,建立了两个任务,占用ram稍微较大,flash占用还可以,占用情况如下:  1 |5 Q2 T% s- [2 [, v+ d
Program Size: data=92.0 xdata=0 code=950  9 m$ Y% A$ Q) w$ W3 e2 d( L$ n
下面是系统函数声明  . b, Y! ^% x$ d  Z
/*--------------------------------------------------------------------------------------+  ( w4 g; G. V' j( v
|系统函数声明    |  
6 l. K. \/ k2 ?7 F+---------------------------------------------------------------------------------------*/  ! i- Z* R2 G0 ^
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务  
7 S% e$ _1 P3 Fvoid RAYS_Start(void); //系统启动函数  ; N9 h# S4 ]& G+ _+ [; M4 q
void RAYS_TaskResume(INT8U prio);  //任务恢复函数  
! w" b) D3 u5 P1 Svoid RAYS_TaskSuspend(INT8U prio); //任务挂起函数  # O+ ?' N# i/ m! i
void OSSched(void); //汇编调度函数  
7 f) v/ q8 U" q- \6 i- J$ n4 zvoid RAYS_TimeDelay(INT16U ticks);  //任务延时函数  ) U2 k' e( R' z" C7 X& F( N
void Idle_Task(void);  : }+ i$ K7 G5 Z; b  ?$ q9 c
void RAYS_Init(void); //系统初始化  5 I* Z4 R' p1 ~3 M/ K  ^- o) [% T
void TickIntHook(void);  //系统节拍钩子函数 $ E, b4 ?) o* e9 o4 q
; n+ U+ G( ^; P" v
. A% q+ ]  W9 v0 F
# ~6 F3 J0 b& {7 {  o" j. H
avr版本  
" R  f3 F/ M/ R& {" W7 e用winavr20060421编译,ide选择的是avr studio,也可以用winavr编译,仿真同样是proteus7.5sp3,调度在16兆只用10us(avrstudio软测)
: P: p+ C$ a  t2 v& [单片机型号分别测试了mega128 和mega8和mega88,都可以运行,但程序如果大于64k的话调度部分pc需要改动一下  
! ]5 c6 Y# Z5 {& s) Q) Y由于是优先级抢占式调度,建立了3个任务,占用情况如下:  
5 P- u/ F, g4 g' _' l
/ Q& I/ @) r5 U. Z# r0 iProgram:    1178 bytes  2 P% q& m! X3 t) e
(.text + .data + .bootloader)  # ?  o' R5 x- ~* i
3 L  {7 C1 J) u  d2 o/ h; v: j
Data:        225 bytes  9 R7 o+ o- ?1 q6 Y! i
(.data + .bss + .noinit)    k& u* n1 L: W+ D. C; i+ }
默认优先级0s  
9 E2 q$ ~7 H. H4 `2 Q/*--------------------------------------------------------------------------------------+  . [* @9 H$ z% m
|系统函数声明    |  
# h! j- G, ~$ }' q4 z+---------------------------------------------------------------------------------------*/  5 `; {' z1 j, n0 A; o# ^. I
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务  
5 V- q+ n. H8 T8 a( L9 r( wvoid RAYS_Start(void); //系统启动函数  
9 o" Y1 z3 O7 A' J5 _1 E( evoid RAYS_TaskResume(INT8U prio);  //任务恢复函数  
- c( e3 c9 m" S' A* a* wvoid RAYS_TaskSuspend(INT8U prio); //任务挂起函数  ! K2 c# S7 M5 ^- {& o! y* l
void OSSched(void); //汇编调度函数  
% o* {+ q* E9 c0 Y1 d; Gvoid RAYS_TimeDelay(INT16U ticks);  //任务延时函数  
; b% [. x7 z) ?% P  b+ u. O/ Cvoid Idle_Task(void);  
/ o7 g% j% a$ }/ T/ G1 Ovoid RAYS_Init(void); //系统初始化  
. m1 ~3 d" r$ c# g( S* q( `void TickIntHook(void);  //系统节拍钩子函数  . t0 d0 r# ?/ F( H

- B% \. ?& ^7 _: [
, G$ }# ^! ?% ]$ z3 f% c最后来stm8s105c6版本,本人手上只有这个小小的discovery板子,100块买的,所以先拿它做的测试,很稳定!  ! M* d1 i3 D/ }9 A' e9 n
编译器选择的是IAR,因为它里边支持c语言是用的模拟寄存器!!!!stvd好像用的是堆栈,导致在stvd上做系统几乎不可能  
9 H% s' K. q' U: Ustm8工程,是stm8s105c6版本,仿真是硬件仿真,因为proteus不支持stm8STM8IAR.rar)  5 z% g# h* d: n/ t% p! a1 I& ^

" z0 r' z" t9 g+ mflash和ram占用情况如下:  
8 F, k4 ~/ N- g( G8 N3 _  941 bytes of readonly  code memory  ; o6 \# X) c5 ]8 k( R# |
  132 bytes of readonly  data memory  
$ Z; A$ a$ G' Z* a  499 bytes of readwrite data memory  ! Z9 O8 [6 n+ J$ h/ W- O0 H, S8 Q
我感觉ram占用有点大,后来我编写了个什么都没有的main函数,ram占用是272B,所以本系统ram占用应该是499-272=227B  3 N; s4 p8 d! n$ m0 H
优化级别选则balance.  
  H2 M( r* t9 u! H/*--------------------------------------------------------------------------------------+  
- M* w. E- p, K7 H( L8 C& R5 N|系统函数声明    |  
5 D) p) h- }: |! n7 S+---------------------------------------------------------------------------------------*/  
) C: O9 z) c- @' }2 X+ Rvoid RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务  " }$ ^% i* y0 u9 u6 U# t6 L5 e
void RAYS_Start(void); //系统启动函数  6 C! k3 x& I  A" i$ {9 t/ o9 C
void RAYS_TaskResume(INT8U prio);  //任务恢复函数  6 [( \& {3 B# M! Y. P/ ]
void RAYS_TaskSuspend(INT8U prio); //任务挂起函数  4 O( x7 q# P" o. C  T( `
void OSSched(void); //汇编调度函数  
, M; t/ r' o% k; M8 bvoid RAYS_TimeDelay(INT16U ticks);  //任务延时函数  9 l4 k- i$ o# q: V+ @: v4 [
void Idle_Task(void);  8 u- w" ?: A, x5 d1 b9 F: L
void RAYS_Init(void); //系统初始化  
! |* W! D% r8 G: {. z" Lvoid TickIntHook(void);  //系统节拍钩子函数  
' A. O7 j& c% y/ o2 |$ d, c1 n. }6 ]7 N0 i
  ( M1 D) q/ z0 y1 ^7 v2 K8 L
欢迎大家测试,我是新手,难免有很多bug,三种版本90%代码都一样,与cpu最相关的RaysRTOS_ASM文件差异较大,不过格式也一样.  
7 L  Y2 {; m9 l/ o我的qq 771992497 大家多多测试,有问题及时反馈

RaySRTOS0.3版本.rar

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

该用户从未签到

2#
发表于 2016-7-4 14:24 | 只看该作者
谢谢楼主,一步步来,学习中……
# ?6 f# c% T1 n1 \7 c

该用户从未签到

3#
发表于 2016-7-4 15:22 | 只看该作者
好资料哈,童鞋们有福咯!
1 f# z: j: m$ ~9 ~

该用户从未签到

4#
发表于 2016-7-4 15:55 | 只看该作者
感谢楼主分享!!!
* n5 {9 j  A! ^
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-11 12:57 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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