找回密码
 注册
查看: 1450|回复: 3
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
RaySRTOS0.3版本 支持三种平台:51  AVR  STM8
1 q3 V; q( {7 e+ N6 i' Y' Q6 _较以前版本将RaySRTOS主文件和不同CPU平台文件分开,形成了以下目录:
6 B- Y/ v0 l2 C3 VRaySRTOS(总体文件夹)! S$ J  b" G' ?5 P2 m# c
                    |Kernel(文件夹)|RaySRTOS.c 系统平台无关主文件
- q- M% C, \- B/ f" e3 p                    |                |RaySRTOS.h 系统平台无关头文件
( O! E- F' V2 z( X: y& F                    |
) b! T$ ~- Z# F$ B( u& q                    |CPU(文件夹)  |8051_KEIL(文件夹)|CPU.c          特定平台CPU相关c文件2 r! G6 P% ]0 c/ g
                    |                |                |CPU_ASM.asm    特定平台调度代码. [# t. r: E8 Z/ f" \3 O
                    |                |                |CPU_CFG.h      特定平台数据定义以及系统配置
7 s, w  b" B& c. L. W                    |                |3 e8 }9 z" z& s
                    |                |AVR_GCC(文件夹)  |......
5 _: |5 ]3 r! }: {7 R( B7 |                    |  l: Y8 J  |. x5 J- P- f
                    |
2 E( Y" F/ E* a3 S9 N                    |
4 ^" i4 o' T+ u4 u4 s" n                    |DEMO(文件夹)    |各种平台演示代码工程1 P7 x$ D+ @) c# Q' U9 [: e+ h  n
- n( P/ \. M: c+ Y/ q' N# u
该实时操作系统具备以下几个优点:* o% v* Z; X0 D, G* w
5 U* U5 _- W( m8 @+ c/ `: X
1:全抢占式优先级调度
7 Z) s. j5 ]. L& W! n7 B2:小型化,适用于单片机
. ]) s" Q& y" e, N$ L% s7 t" W3 M2 F. X5 o4 C
! U4 U+ g( z3 N& w6 S

, s, Q$ S# L8 q; O5 p1 ]% q6 D1 `. t( N, |) b0 D8 ?
51版本  : {) `5 X1 s" A7 I0 a0 y
keil4编译版本,89c52单片机运行,仿真proteus7.5sp3  8 f  H% j3 [8 p: w/ D: s
由于是优先级抢占式调度,建立了两个任务,占用ram稍微较大,flash占用还可以,占用情况如下:  
$ c) v: @* n: u# e, m! XProgram Size: data=92.0 xdata=0 code=950  
2 M; |; {2 [. w下面是系统函数声明  
3 }2 o* g* }9 J) }/*--------------------------------------------------------------------------------------+  ! _( F! D3 u* n6 X. k, i. s4 i; J" b
|系统函数声明    |  ) T: ?5 y9 f" ]. U. U
+---------------------------------------------------------------------------------------*/  ; T# H# I" G/ j
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务  
9 a7 M7 U) `6 E+ O! ivoid RAYS_Start(void); //系统启动函数  
1 l; D4 L+ d& s( Q2 C# jvoid RAYS_TaskResume(INT8U prio);  //任务恢复函数  $ v& u7 d9 A; M* T3 t
void RAYS_TaskSuspend(INT8U prio); //任务挂起函数  & m1 G. {; U: ?) A
void OSSched(void); //汇编调度函数  
7 @4 P% v2 H+ L2 @9 Avoid RAYS_TimeDelay(INT16U ticks);  //任务延时函数  ! J# O+ A1 ^+ n+ W) U  F: W# T
void Idle_Task(void);  * c1 i8 E" ?8 G1 F0 \8 o3 ]
void RAYS_Init(void); //系统初始化  
& M2 o" }* T# Z* V3 T2 [void TickIntHook(void);  //系统节拍钩子函数 9 O; i: f4 Y* i0 N9 z  n
. Y. D/ q, f5 p, y2 k1 d; \, H
1 w+ z& h4 T/ L

" B) N' G+ S; x, X* B: M% ?$ iavr版本  
6 ^8 N  `6 E3 N$ B用winavr20060421编译,ide选择的是avr studio,也可以用winavr编译,仿真同样是proteus7.5sp3,调度在16兆只用10us(avrstudio软测)
# |' D8 V% ~' l' g9 p0 u- k单片机型号分别测试了mega128 和mega8和mega88,都可以运行,但程序如果大于64k的话调度部分pc需要改动一下  # T. I6 i4 Z9 o# Q4 p
由于是优先级抢占式调度,建立了3个任务,占用情况如下:  2 M6 b+ L9 M* h6 j+ m

$ k" s7 v. \$ r$ yProgram:    1178 bytes  
! k5 `1 [  `2 N! d: p$ [  d/ [(.text + .data + .bootloader)  
9 S+ P3 {! p6 R  F1 O, ^
( x% C( n: |9 \# i8 _  ?$ v# PData:        225 bytes  
3 m7 `2 k6 l9 V(.data + .bss + .noinit)  
! x! P% h8 c% }* G默认优先级0s  8 _( B1 M4 _6 h3 E1 e) m' _% t
/*--------------------------------------------------------------------------------------+  * l; M0 z0 W3 @. R
|系统函数声明    |  
; e8 B! w( Y: e5 l( b+---------------------------------------------------------------------------------------*/  
- _; E- o/ n/ Q. G& [  l. Tvoid RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务  
3 R" c! H2 p' [. b' R4 Q# yvoid RAYS_Start(void); //系统启动函数  8 [& z* G" o* Y- N# u, ]* _$ i
void RAYS_TaskResume(INT8U prio);  //任务恢复函数  
7 W" Y6 K: p% N/ u+ Vvoid RAYS_TaskSuspend(INT8U prio); //任务挂起函数  8 W% [6 m' A8 `* a; M$ S% P2 @
void OSSched(void); //汇编调度函数  
, D0 T& R( A# v; E, B5 W' ]+ A# |void RAYS_TimeDelay(INT16U ticks);  //任务延时函数  
( Y1 o9 _% D: \. S* X9 I# [( Yvoid Idle_Task(void);  
5 c+ e5 M' t7 `6 }4 nvoid RAYS_Init(void); //系统初始化  6 D6 m" m# D1 p
void TickIntHook(void);  //系统节拍钩子函数  
5 A" u8 _/ M) g, w4 M6 s4 [8 D+ e# @6 M
2 M" t: n( a. d
最后来stm8s105c6版本,本人手上只有这个小小的discovery板子,100块买的,所以先拿它做的测试,很稳定!  
4 ~& [; f/ y) M% V. ~; ?编译器选择的是IAR,因为它里边支持c语言是用的模拟寄存器!!!!stvd好像用的是堆栈,导致在stvd上做系统几乎不可能  
9 K: \7 x  V: O" Rstm8工程,是stm8s105c6版本,仿真是硬件仿真,因为proteus不支持stm8STM8IAR.rar)  
8 Z1 r1 T: Q6 U8 e) Z0 j9 a9 Z
% Q. O  p+ m) F4 bflash和ram占用情况如下:  
7 u' y# b6 ^  Q6 B! u2 ~$ z  941 bytes of readonly  code memory  : f( A$ a# K. i
  132 bytes of readonly  data memory  ! z" L7 n: C2 R* |
  499 bytes of readwrite data memory  
" |" e2 l" q& O, ~我感觉ram占用有点大,后来我编写了个什么都没有的main函数,ram占用是272B,所以本系统ram占用应该是499-272=227B  
7 D6 H/ `) A1 |+ ^) C% G优化级别选则balance.  
2 S8 O4 q  l( u( U, Z) i  C; m/*--------------------------------------------------------------------------------------+  7 Z& }9 B. N) s7 g9 k" }  u
|系统函数声明    |  
4 y) k9 h  W  R- A* L: n! Z- F( z, |0 F+---------------------------------------------------------------------------------------*/  6 p" t6 @: q! |3 z  g0 R5 W' D. n5 R
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务  
- ^$ P. G8 o3 b! z0 Evoid RAYS_Start(void); //系统启动函数  * V* O) |1 r. R' A! B$ y
void RAYS_TaskResume(INT8U prio);  //任务恢复函数  
& b- s, M+ G" [void RAYS_TaskSuspend(INT8U prio); //任务挂起函数  
3 X6 {; ]1 E5 c6 f# |8 O, Svoid OSSched(void); //汇编调度函数  
# _! S) z2 X) H1 i$ J3 ^void RAYS_TimeDelay(INT16U ticks);  //任务延时函数  
5 z" r/ W0 [( f8 bvoid Idle_Task(void);  
* x% i: R, j. T2 R4 {; G0 Wvoid RAYS_Init(void); //系统初始化  2 p0 b4 X. d6 R+ u( K
void TickIntHook(void);  //系统节拍钩子函数  ( e4 G. v) ]* Z& U9 Y; _
' U: B" d4 R* V' [; E$ H9 k3 y
  ) V- T5 ^# x0 \# M2 ^+ T" G! R
欢迎大家测试,我是新手,难免有很多bug,三种版本90%代码都一样,与cpu最相关的RaysRTOS_ASM文件差异较大,不过格式也一样.  4 c0 _* e" y$ G" C. {& @
我的qq 771992497 大家多多测试,有问题及时反馈

RaySRTOS0.3版本.rar

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

该用户从未签到

2#
发表于 2016-7-4 14:24 | 只看该作者
谢谢楼主,一步步来,学习中……
9 n6 e1 v) E$ ^- L9 B

该用户从未签到

3#
发表于 2016-7-4 15:22 | 只看该作者
好资料哈,童鞋们有福咯!* y0 p9 U9 D7 r/ D& \6 c

该用户从未签到

4#
发表于 2016-7-4 15:55 | 只看该作者
感谢楼主分享!!!4 {. X" D9 i# ~; d0 `, H1 X8 a( g; Q2 r
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-3 02:13 , Processed in 0.093750 second(s), 26 queries , Gzip On.

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

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

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