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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
RaySRTOS0.3版本 支持三种平台:51  AVR  STM8
- e' ^* c+ F& I4 y较以前版本将RaySRTOS主文件和不同CPU平台文件分开,形成了以下目录:, B( W+ N8 v3 S
RaySRTOS(总体文件夹)
' I, l6 l, n+ Z6 l$ E                    |Kernel(文件夹)|RaySRTOS.c 系统平台无关主文件6 x( {5 K3 V. N' t: ^. }
                    |                |RaySRTOS.h 系统平台无关头文件
1 D9 g8 K7 x6 `, _1 T, H- i5 g; U0 w                    |9 J2 f: b4 |" H+ K- \' n3 K/ E
                    |CPU(文件夹)  |8051_KEIL(文件夹)|CPU.c          特定平台CPU相关c文件
5 y5 y3 K! g6 X. L+ r/ q* u; W, L                    |                |                |CPU_ASM.asm    特定平台调度代码
% T3 O  o( z' B0 L' V                    |                |                |CPU_CFG.h      特定平台数据定义以及系统配置
% }* Z& L, x& c: Y& X                    |                |
; X1 D  \& z' F, k  S5 D                    |                |AVR_GCC(文件夹)  |......5 L- O8 @* }' x+ {; N
                    |6 e' O8 E0 e- p0 |1 H) M
                    |$ ^' T7 ], Y$ [* F2 q
                    |; t7 B" ?9 F' u/ E& H; H
                    |DEMO(文件夹)    |各种平台演示代码工程: w8 I, _3 k% F: W. t7 ~6 m
3 s* t% M1 j: `( I" K
该实时操作系统具备以下几个优点:
, N/ u: ^; T3 V- P% n. }, v3 {3 z0 N% {( L
1:全抢占式优先级调度
7 b% S( |2 Q3 A4 H% Z5 w" o3 Y2:小型化,适用于单片机
' h" b( T4 _; K! E. h" T+ g+ m! q' i
' n- X2 m) r8 t% \% W8 F2 y
6 h, N( ~5 I: V5 }8 [% {9 q) [3 y. A

9 t7 h8 G, B6 M: p5 g1 b51版本  
$ m0 \/ O1 a: h2 Xkeil4编译版本,89c52单片机运行,仿真proteus7.5sp3  
1 [( `5 q5 p) v# G$ i+ T由于是优先级抢占式调度,建立了两个任务,占用ram稍微较大,flash占用还可以,占用情况如下:  ' O1 h8 D% ~: x) T
Program Size: data=92.0 xdata=0 code=950  " X9 z4 e! i! M9 R0 N7 H
下面是系统函数声明  ; g5 F" s/ {( P+ V6 P& S. q
/*--------------------------------------------------------------------------------------+  
8 n! }: _7 S1 @, ?' g|系统函数声明    |  
0 ]4 X  d# }0 M! p/ ~- D. P+---------------------------------------------------------------------------------------*/  8 U/ G) S$ m& Y1 t9 O( ^% ^
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务  ( _) f$ _- }* @- k* ?( W% r
void RAYS_Start(void); //系统启动函数  
+ f1 ^6 h% K, L! |8 ^8 I; bvoid RAYS_TaskResume(INT8U prio);  //任务恢复函数  
9 p) D( H: F+ `3 X0 Y6 {void RAYS_TaskSuspend(INT8U prio); //任务挂起函数  . Q# |) x' V3 D: |; d6 n: Z( U% @
void OSSched(void); //汇编调度函数  
; d/ Q2 {% b0 e/ `void RAYS_TimeDelay(INT16U ticks);  //任务延时函数  
$ ~1 R% A1 v0 ?* [9 J4 T; Mvoid Idle_Task(void);  3 }2 V( k6 c' V5 h* O: W+ n
void RAYS_Init(void); //系统初始化  
: R/ O; A7 j9 c1 rvoid TickIntHook(void);  //系统节拍钩子函数 ' z: n$ F0 o/ b9 g
2 F% H( s8 \7 j- x7 o
0 {5 N: c/ i6 S+ ]

& u! {- ~' ^, R8 C  xavr版本  
: `; W9 ]% ]' v& p/ q7 Z. u; A' _用winavr20060421编译,ide选择的是avr studio,也可以用winavr编译,仿真同样是proteus7.5sp3,调度在16兆只用10us(avrstudio软测)
$ H1 X7 t4 q- D, y- g" X单片机型号分别测试了mega128 和mega8和mega88,都可以运行,但程序如果大于64k的话调度部分pc需要改动一下  ( `7 c0 B& A. b( P% H% C( m- S
由于是优先级抢占式调度,建立了3个任务,占用情况如下:  ! `% Z, T! n2 K5 |- N- a6 o: P7 o5 Y- u
) {0 B  \3 Y& X/ [& E) c  |' V
Program:    1178 bytes  * |) A( A4 Z' a5 r4 \
(.text + .data + .bootloader)  * D& {$ x3 n7 E; H1 ~0 w5 e

& v$ y/ B4 J9 {2 X& L+ jData:        225 bytes  
8 ], _) m. N, h8 {7 X" p; v(.data + .bss + .noinit)  ! g0 }- g; P" A; B1 Z
默认优先级0s  
2 Y/ {5 k5 K, D! k/*--------------------------------------------------------------------------------------+  7 w" c: O( C5 J. A$ o. K
|系统函数声明    |  
3 p" ?& ^- Y3 |+---------------------------------------------------------------------------------------*/  8 c, D, t& P4 h" b0 w" x" `
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务  6 h8 z1 `1 G* B# I' E* E1 B- ?
void RAYS_Start(void); //系统启动函数  ' u6 `/ h6 A  ^# R1 q# W: n
void RAYS_TaskResume(INT8U prio);  //任务恢复函数  , A! Z& U' w7 |# p0 y: c1 R8 N8 n
void RAYS_TaskSuspend(INT8U prio); //任务挂起函数  3 [3 R1 J# o2 I4 q& q8 M1 W1 c
void OSSched(void); //汇编调度函数  # e% e* w4 e, l7 x: c8 |0 k
void RAYS_TimeDelay(INT16U ticks);  //任务延时函数  2 Y1 U- p) k3 K  z' A/ N5 b
void Idle_Task(void);  5 _" B3 _; D# d7 E
void RAYS_Init(void); //系统初始化  
. P& s7 q8 p: F; Nvoid TickIntHook(void);  //系统节拍钩子函数  - Y/ [" T4 M3 J: M7 E: z+ K5 J

; R/ [) c# y: I2 q! k. m
6 |! C8 U0 v5 b最后来stm8s105c6版本,本人手上只有这个小小的discovery板子,100块买的,所以先拿它做的测试,很稳定!  ) q7 M! j% L& g: f
编译器选择的是IAR,因为它里边支持c语言是用的模拟寄存器!!!!stvd好像用的是堆栈,导致在stvd上做系统几乎不可能  
7 E. V6 g2 f& g% H6 t1 f6 E; S# Istm8工程,是stm8s105c6版本,仿真是硬件仿真,因为proteus不支持stm8STM8IAR.rar)  
( x$ s  n$ T8 F7 x( [1 U. G( }  @) w) _& U
flash和ram占用情况如下:  
, p- y# t- J0 r0 ]' M! }* B: N$ v5 W) j  941 bytes of readonly  code memory  
/ D1 G' |9 D2 Z; z( a- Q5 f  132 bytes of readonly  data memory  + [5 `& X& [; D: N+ R, F3 ?+ k0 ?
  499 bytes of readwrite data memory  # W# _# B9 I: t) D: M; V) K
我感觉ram占用有点大,后来我编写了个什么都没有的main函数,ram占用是272B,所以本系统ram占用应该是499-272=227B  . s" L! b6 ?0 d( ^  G0 t
优化级别选则balance.  - x  N; M0 t9 E: z
/*--------------------------------------------------------------------------------------+  
$ {, s" u& Z4 j7 J2 \|系统函数声明    |  * i3 K2 g4 q3 v2 `" A7 j: Q
+---------------------------------------------------------------------------------------*/  
( e- M: b5 a/ O' C) p  U+ h& ?void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务  / Y! |9 Y: z0 q) c
void RAYS_Start(void); //系统启动函数  
3 K0 L; z% K$ o6 xvoid RAYS_TaskResume(INT8U prio);  //任务恢复函数  
. _4 z6 }8 d" j, M7 s6 Qvoid RAYS_TaskSuspend(INT8U prio); //任务挂起函数  # q3 p  X. x, j/ I8 }- B% |# K+ q
void OSSched(void); //汇编调度函数  
4 N  H: |1 e" m" m9 ~void RAYS_TimeDelay(INT16U ticks);  //任务延时函数  
8 C; O- i# W3 x0 S* Fvoid Idle_Task(void);  ' L0 c# N& O/ E" c* l# Q$ G
void RAYS_Init(void); //系统初始化  9 k( T; n% V: g+ g
void TickIntHook(void);  //系统节拍钩子函数  
. A6 Y* b6 U- G5 `4 g+ G
& p+ m4 w0 l3 b. \0 U  9 r' |* S3 i! }
欢迎大家测试,我是新手,难免有很多bug,三种版本90%代码都一样,与cpu最相关的RaysRTOS_ASM文件差异较大,不过格式也一样.  
: \4 H) T1 e9 M我的qq 771992497 大家多多测试,有问题及时反馈

RaySRTOS0.3版本.rar

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

该用户从未签到

2#
发表于 2016-7-4 14:24 | 只看该作者
谢谢楼主,一步步来,学习中……
2 a7 s+ h6 i7 {1 p* t

该用户从未签到

3#
发表于 2016-7-4 15:22 | 只看该作者
好资料哈,童鞋们有福咯!5 s2 r; Y8 T& h

该用户从未签到

4#
发表于 2016-7-4 15:55 | 只看该作者
感谢楼主分享!!!
3 n+ o4 |5 X! A% K5 V* D" }0 O
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-18 16:36 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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