找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 71|回复: 3
打印 上一主题 下一主题

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

[复制链接]

193

主题

569

帖子

1397

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

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

EDA365欢迎您!

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

x
RaySRTOS0.3版本 支持三种平台:51  AVR  STM8" s: s5 t2 m/ R6 o) n/ b% O8 p& [7 w
较以前版本将RaySRTOS主文件和不同CPU平台文件分开,形成了以下目录:( l& c1 b/ |0 [6 h
RaySRTOS(总体文件夹)& w' _: `1 J8 i
                    |Kernel(文件夹)|RaySRTOS.c 系统平台无关主文件
5 `& O9 U9 C* ]" R8 w( ~! Z5 X' @                    |                |RaySRTOS.h 系统平台无关头文件6 x4 ]1 J# q$ D* t: A: G0 p
                    |
7 Q7 `$ d* a- y3 Z6 Q                    |CPU(文件夹)  |8051_KEIL(文件夹)|CPU.c          特定平台CPU相关c文件
( [& l) H0 [* O+ |' D3 n                    |                |                |CPU_ASM.asm    特定平台调度代码4 j! \$ r% t1 l0 ~% b# L/ k  a2 e# `
                    |                |                |CPU_CFG.h      特定平台数据定义以及系统配置
2 a+ [0 l4 }. P                    |                |
5 U( Q; t0 t; U* `& Q9 K# _5 a1 u                    |                |AVR_GCC(文件夹)  |......4 G0 r# ~3 G' s8 y& f9 W
                    |
+ U7 A  x- ?, j8 z+ |, N/ a                    |
$ w4 o* [/ y: g( u- }) c                    |
; B$ k) ^: S) D2 ?+ x1 ?                    |DEMO(文件夹)    |各种平台演示代码工程
3 ~7 n. L# |1 u0 H+ u3 c  L  S' O0 A+ U3 _6 t7 }
该实时操作系统具备以下几个优点:, X0 M/ F8 F. E. ?6 R8 p- }

# I7 B$ e$ r( T; a. c+ ^$ w. `1:全抢占式优先级调度' a' |5 t: ]  Q8 j5 H$ J
2:小型化,适用于单片机) M0 G  `" t7 q  r' ~+ J& t
) c( ^1 D7 k& {6 o1 g
1 f2 A1 X- X' s6 b* `, g# w# M
7 k7 t. D# a) B% K
4 M) h: J/ W! r4 m
51版本  " i" w7 q$ Z/ N+ o" i7 L- Z$ ?
keil4编译版本,89c52单片机运行,仿真proteus7.5sp3  
1 i# ?$ ?( L* q& _由于是优先级抢占式调度,建立了两个任务,占用ram稍微较大,flash占用还可以,占用情况如下:  % N& T& Y' p, j2 A$ w! D
Program Size: data=92.0 xdata=0 code=950  3 V! q& s1 O4 p& _  y5 n
下面是系统函数声明  / \$ d" V7 O5 Q9 U* ]
/*--------------------------------------------------------------------------------------+  $ c) y% @3 n$ h" J
|系统函数声明    |  2 n$ U7 y2 |/ c! l- f) v; |
+---------------------------------------------------------------------------------------*/  : B; j' J3 U, H' o# t
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务  
9 X! l( y7 `- m, {+ |void RAYS_Start(void); //系统启动函数  . t. r& k0 V. C# J) u" m
void RAYS_TaskResume(INT8U prio);  //任务恢复函数  + ^; {, i9 \) k0 c
void RAYS_TaskSuspend(INT8U prio); //任务挂起函数  
/ }6 O3 V( H7 Qvoid OSSched(void); //汇编调度函数  
$ o/ t, l6 k9 U7 g( u2 xvoid RAYS_TimeDelay(INT16U ticks);  //任务延时函数  2 i& [' p2 ^0 l) X2 W6 N) s6 @
void Idle_Task(void);  
4 d) A/ b$ s* h! b- Rvoid RAYS_Init(void); //系统初始化  
4 F7 x/ _' i( e0 ?+ n9 p1 ?void TickIntHook(void);  //系统节拍钩子函数 # ?( H7 k# Y/ H" l4 X# }
* i3 t+ k3 u( u' R
3 _% O- t) \: g! H$ K

4 A) h9 g, t4 X( wavr版本  
2 t, b5 g1 {2 @7 x# P用winavr20060421编译,ide选择的是avr studio,也可以用winavr编译,仿真同样是proteus7.5sp3,调度在16兆只用10us(avrstudio软测)
4 Y& L/ K9 M1 ^; o/ N  U单片机型号分别测试了mega128 和mega8和mega88,都可以运行,但程序如果大于64k的话调度部分pc需要改动一下  
8 _- p1 t' g- U" k8 `* I9 _% V9 G由于是优先级抢占式调度,建立了3个任务,占用情况如下:  
2 Q( P/ `2 p* E% W4 I9 N& V
9 p$ a9 E  @7 X; Q) LProgram:    1178 bytes  
' q: Y3 M4 \+ r4 L) d; M$ ~(.text + .data + .bootloader)  
; z+ N$ W5 n  L& a3 ?/ y
! o3 i6 |2 V8 j" m- a, ^! i% C9 AData:        225 bytes  
/ h+ v; ~5 K4 o7 g" Y# v% U(.data + .bss + .noinit)  2 k8 S5 G# P! B  h* z- x4 O* \+ q
默认优先级0s  8 n( t. s+ g- b# O
/*--------------------------------------------------------------------------------------+  9 A, v4 M! ?0 a4 L) Q# }0 m
|系统函数声明    |  2 T6 ~: k2 h2 ^4 Y7 S; ~6 ]# s
+---------------------------------------------------------------------------------------*/  ! c8 |* X6 C. Y2 L" @9 R. H
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务  2 u/ r: l# V7 R9 `0 q
void RAYS_Start(void); //系统启动函数  
+ R( B; f. X) s  S6 k9 T9 nvoid RAYS_TaskResume(INT8U prio);  //任务恢复函数  
( ]: i/ r5 M; [& K& fvoid RAYS_TaskSuspend(INT8U prio); //任务挂起函数  
9 B5 o" }% a! ]& q5 A' c4 Q8 X/ e( |void OSSched(void); //汇编调度函数  
' e2 X% [, P) u8 o6 P5 M, }. Mvoid RAYS_TimeDelay(INT16U ticks);  //任务延时函数  " t$ ?- K! M. X. n" u7 X
void Idle_Task(void);  
+ }' @  O& u5 Q! n) hvoid RAYS_Init(void); //系统初始化  
0 H* c! ^, }: G$ w, lvoid TickIntHook(void);  //系统节拍钩子函数  6 S' H2 ?3 q$ e( g! n, P

& D3 y" t  s" Z5 L- v! G- \3 x) w/ c% P4 C3 b
最后来stm8s105c6版本,本人手上只有这个小小的discovery板子,100块买的,所以先拿它做的测试,很稳定!  , a, n4 V  Z6 _$ e$ y  W2 {# p4 ^
编译器选择的是IAR,因为它里边支持c语言是用的模拟寄存器!!!!stvd好像用的是堆栈,导致在stvd上做系统几乎不可能  " p2 [$ S/ \$ M
stm8工程,是stm8s105c6版本,仿真是硬件仿真,因为proteus不支持stm8STM8IAR.rar)  
5 |& M- ?7 U3 Z; {  B6 h* M
' v" q) e5 D- z# \8 w9 g* B3 {3 yflash和ram占用情况如下:  
" Y! y# y& U" K  E; q  941 bytes of readonly  code memory  * |$ |3 @  P. y. {# I4 e
  132 bytes of readonly  data memory  
) |3 z" v# F$ Q$ t( L1 N- C  499 bytes of readwrite data memory  ' a/ R" P9 v6 Q; M6 I* Q( Q
我感觉ram占用有点大,后来我编写了个什么都没有的main函数,ram占用是272B,所以本系统ram占用应该是499-272=227B  
- T1 Y* J4 T& e" u% R3 Y7 J+ b优化级别选则balance.  
( q! [6 ]& j9 l' L. C' U3 M. Q/*--------------------------------------------------------------------------------------+  ) B3 H+ \& q+ d
|系统函数声明    |  ( w. m0 G: u2 |9 X
+---------------------------------------------------------------------------------------*/  
# ]2 \9 f$ V7 [* j  evoid RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务  
: @0 ]- b& K% c1 W9 i0 `* m$ O" Lvoid RAYS_Start(void); //系统启动函数  
. M: o6 ]) x  {$ T8 u  h4 Q7 ]; r: pvoid RAYS_TaskResume(INT8U prio);  //任务恢复函数  - l! w  u" e3 S7 m2 Y4 R- W
void RAYS_TaskSuspend(INT8U prio); //任务挂起函数  + h& s* f3 Y4 v% U  s/ D
void OSSched(void); //汇编调度函数  
) q- H! ^$ ?8 v1 m) mvoid RAYS_TimeDelay(INT16U ticks);  //任务延时函数  
: k" T' y& n: A( t9 Qvoid Idle_Task(void);  ; B& _9 |' k- N4 w4 P# u6 M2 _
void RAYS_Init(void); //系统初始化  
* {. y! E# j& {, M# o. Q- vvoid TickIntHook(void);  //系统节拍钩子函数  / N, ]7 D$ ]$ ?, e7 F& n' A. B

9 c: M+ C4 ~/ y( y; T! U% ^  
2 ^. k7 c$ k  c' a4 {: W. b欢迎大家测试,我是新手,难免有很多bug,三种版本90%代码都一样,与cpu最相关的RaysRTOS_ASM文件差异较大,不过格式也一样.  
/ u/ o6 ^  e% N5 Y我的qq 771992497 大家多多测试,有问题及时反馈

RaySRTOS0.3版本.rar

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

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

155

主题

662

帖子

1191

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1191
2#
发表于 2016-7-4 14:24 | 只看该作者
谢谢楼主,一步步来,学习中……2 O" [5 M: L+ G, F7 J( ^" l4 n7 N% Y

156

主题

543

帖子

1180

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1180
3#
发表于 2016-7-4 15:22 | 只看该作者
好资料哈,童鞋们有福咯!
+ z* s  f  \1 A. u

154

主题

485

帖子

1156

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1156
4#
发表于 2016-7-4 15:55 | 只看该作者
感谢楼主分享!!!6 k; r* c/ y9 |+ V# X
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-11-15 22:32 , Processed in 0.059591 second(s), 35 queries , Gzip On.

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

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

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