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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
RaySRTOS0.3版本 支持三种平台:51  AVR  STM8
" R: z5 m; U9 L; r6 ]$ z较以前版本将RaySRTOS主文件和不同CPU平台文件分开,形成了以下目录:
& m' k) P/ I4 ]& O9 IRaySRTOS(总体文件夹)4 D7 k8 S) u: C2 @
                    |Kernel(文件夹)|RaySRTOS.c 系统平台无关主文件1 Q9 R& Y$ V: b8 E/ ]' K7 o+ e
                    |                |RaySRTOS.h 系统平台无关头文件& O. l# S2 N+ ~  ?
                    |
0 ~0 k, b9 y% U8 b2 @- e+ p$ b2 {; L                    |CPU(文件夹)  |8051_KEIL(文件夹)|CPU.c          特定平台CPU相关c文件, Q  f9 c* i- h9 R3 Q, I0 ]' x
                    |                |                |CPU_ASM.asm    特定平台调度代码2 u; G% Y: s/ \0 l5 Z- i5 Z2 K0 O
                    |                |                |CPU_CFG.h      特定平台数据定义以及系统配置& Y5 Q5 I0 n+ r. L; s
                    |                |/ {3 }: |0 g0 B( K
                    |                |AVR_GCC(文件夹)  |......3 K$ F/ k1 _+ W# U, r* y
                    |1 O$ c, ?& E) t$ C* n, T, w! C8 l
                    |
! D; O! G# @% j0 J9 j- {) x% D6 P                    |8 V; C+ I6 @! M5 Z; z: B& y
                    |DEMO(文件夹)    |各种平台演示代码工程: K" e/ [  ^2 k1 q/ ~

" ~" O' u: K3 @+ h该实时操作系统具备以下几个优点:) f  m; B+ j( P4 b' I1 ]

- E" f% n3 v# w8 a2 D, U& l& v1:全抢占式优先级调度
& c" m, C4 t% x9 K" O8 Y2:小型化,适用于单片机% L+ d& t$ q+ U

6 @- `* w  y3 C/ K$ U
' M  y0 C  \5 L3 M# L9 Z; D! L' V5 r8 c/ C- h) V, V1 i/ t
; t: f! p% L8 s7 Q& x0 z
51版本  
7 ?, [$ ~3 h& t* h0 o6 ukeil4编译版本,89c52单片机运行,仿真proteus7.5sp3  4 ^3 E4 N- h. \4 ^( {/ D2 g. \
由于是优先级抢占式调度,建立了两个任务,占用ram稍微较大,flash占用还可以,占用情况如下:  
7 P  Q; p) z, i) m1 T1 w. t- OProgram Size: data=92.0 xdata=0 code=950  
1 e! a- `4 e. k0 f2 M% U+ ]4 Q下面是系统函数声明  9 f" q  d% i$ c! x4 w
/*--------------------------------------------------------------------------------------+  
, w$ y6 A) t4 T; S0 h|系统函数声明    |  5 ^* k! F: E$ R; m, @# x
+---------------------------------------------------------------------------------------*/  . E7 t4 p  V  e' ^/ E; O) ~
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务  
: C5 ^; c: O5 r, zvoid RAYS_Start(void); //系统启动函数  
6 s  f9 ~& i8 {9 C% y2 J& _: jvoid RAYS_TaskResume(INT8U prio);  //任务恢复函数  4 n+ O6 Z% i. H8 g- ^8 T' p
void RAYS_TaskSuspend(INT8U prio); //任务挂起函数  
9 @5 K9 Y5 p1 s( ovoid OSSched(void); //汇编调度函数  . t9 Y/ e- I* m2 s5 Y, \' j
void RAYS_TimeDelay(INT16U ticks);  //任务延时函数  8 A$ |% _& l- E: O& ^
void Idle_Task(void);  # ~- I3 q" \+ A& I+ [
void RAYS_Init(void); //系统初始化  
8 g8 n  {8 ^! {0 c0 g& u5 Uvoid TickIntHook(void);  //系统节拍钩子函数
5 ~9 C1 U" F, Y  `$ ?
, g& [5 y" }& H/ V8 `, ^: u- S$ f' |4 E& n& R/ f

4 N$ h- Z1 H1 u4 q4 F7 G) tavr版本  8 t$ Y8 ]7 R6 L$ ?/ j4 q
用winavr20060421编译,ide选择的是avr studio,也可以用winavr编译,仿真同样是proteus7.5sp3,调度在16兆只用10us(avrstudio软测)
: h9 C- Y" r2 `4 k. t( {单片机型号分别测试了mega128 和mega8和mega88,都可以运行,但程序如果大于64k的话调度部分pc需要改动一下  
, Y  s* {0 c$ ~( T1 W8 ~由于是优先级抢占式调度,建立了3个任务,占用情况如下:  
+ [$ f. P- N* C( x" ]+ t
' {$ |4 ?, s6 A: y. I2 I2 hProgram:    1178 bytes  " c; r: F3 v9 r  }) U) t! ?& \' v
(.text + .data + .bootloader)  
. H4 ~5 W' M& z! b3 Q' K/ B/ t( J: n/ D  p, E! f0 c- l
Data:        225 bytes  1 Z6 u: |0 `/ C# j
(.data + .bss + .noinit)  3 _% s" l9 J& _) N' A. e2 `
默认优先级0s  
8 y2 ~+ s4 t0 |/ T/*--------------------------------------------------------------------------------------+  
; A1 y7 Y7 l1 _8 i# J|系统函数声明    |  ) S# V  }# x! Q; ~2 H1 u) D
+---------------------------------------------------------------------------------------*/  # d2 N6 u& t- \2 ]7 Z' V: |
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务  / T/ n9 P! I/ z* i6 s% Q
void RAYS_Start(void); //系统启动函数  # A4 g: V. c1 K  n' I' f7 W* S+ ~
void RAYS_TaskResume(INT8U prio);  //任务恢复函数  
* B2 }. z' X. Z% P- N5 b8 fvoid RAYS_TaskSuspend(INT8U prio); //任务挂起函数  ) m) A( }! c8 a
void OSSched(void); //汇编调度函数  : R8 X$ _5 y3 C( z9 C
void RAYS_TimeDelay(INT16U ticks);  //任务延时函数  + d7 P( y1 R  w# }/ s& }/ Q
void Idle_Task(void);  
* b5 c6 D9 J7 ~1 a3 f* c; |8 ~3 Lvoid RAYS_Init(void); //系统初始化  / t* H* W  v2 @) l* h
void TickIntHook(void);  //系统节拍钩子函数  
$ m; E6 I2 {0 b" s* P$ ~0 D. \, g/ X. w0 `: {4 c- u) j% `/ O( R3 j

, b" ~$ ?0 l7 V最后来stm8s105c6版本,本人手上只有这个小小的discovery板子,100块买的,所以先拿它做的测试,很稳定!  
% Y& E8 k3 [8 z/ t% e8 x编译器选择的是IAR,因为它里边支持c语言是用的模拟寄存器!!!!stvd好像用的是堆栈,导致在stvd上做系统几乎不可能  ; v  h! H& J2 R  x4 q9 M
stm8工程,是stm8s105c6版本,仿真是硬件仿真,因为proteus不支持stm8STM8IAR.rar)  + w5 h0 D8 g7 K8 O$ S1 U6 d
4 g: c4 `. @+ G9 M1 A
flash和ram占用情况如下:  8 v- J8 G& S" J- [+ M$ w4 A: ?
  941 bytes of readonly  code memory  6 F% M2 o/ F  }6 w6 q2 T$ ^
  132 bytes of readonly  data memory  
' ~' T* R, H. j. y0 {5 k  499 bytes of readwrite data memory  $ s& U2 Z9 M+ P
我感觉ram占用有点大,后来我编写了个什么都没有的main函数,ram占用是272B,所以本系统ram占用应该是499-272=227B  $ {! v2 C- S1 N3 K+ h
优化级别选则balance.  ; u9 ]- s+ K. x8 R9 w
/*--------------------------------------------------------------------------------------+  
) P$ u3 |0 W& U1 c! E|系统函数声明    |  : W+ U/ S6 k8 V) H
+---------------------------------------------------------------------------------------*/  
6 b( j7 E  P; f, Tvoid RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务  ! ^3 H, ]9 G; n4 t6 H7 K* U
void RAYS_Start(void); //系统启动函数  
9 k* n. n4 x# T6 L6 `( X0 G: }+ _void RAYS_TaskResume(INT8U prio);  //任务恢复函数  
1 G6 }! T" m8 e+ Q  Q: g, f+ q! x: gvoid RAYS_TaskSuspend(INT8U prio); //任务挂起函数  
$ D- ^4 t6 B) G: Zvoid OSSched(void); //汇编调度函数  0 n# u+ ^! E/ U
void RAYS_TimeDelay(INT16U ticks);  //任务延时函数  
: c  y2 g5 Y2 mvoid Idle_Task(void);  - y, C( C6 j, D" _/ N9 ~
void RAYS_Init(void); //系统初始化  8 [' C2 p) Y' ~( O- Z" k- _, l' ~; l
void TickIntHook(void);  //系统节拍钩子函数  
% e1 N! e' J  j# O9 A3 i$ z
3 e/ H4 }" J3 h! z  ( Z6 N6 T0 c1 b
欢迎大家测试,我是新手,难免有很多bug,三种版本90%代码都一样,与cpu最相关的RaysRTOS_ASM文件差异较大,不过格式也一样.  9 i$ Y' T: B. Z1 K
我的qq 771992497 大家多多测试,有问题及时反馈

RaySRTOS0.3版本.rar

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

该用户从未签到

2#
发表于 2016-7-4 14:24 | 只看该作者
谢谢楼主,一步步来,学习中……
! K2 e. j) w/ b0 `8 J% _

该用户从未签到

3#
发表于 2016-7-4 15:22 | 只看该作者
好资料哈,童鞋们有福咯!! W: H4 e' Q$ _

该用户从未签到

4#
发表于 2016-7-4 15:55 | 只看该作者
感谢楼主分享!!!
" A" y9 _$ }* N3 v' W5 @( l1 j
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-6 13:15 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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