找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 72|回复: 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  STM83 w% Q# q3 M& S1 L, G. u5 r
较以前版本将RaySRTOS主文件和不同CPU平台文件分开,形成了以下目录:( g3 _1 c8 _3 z1 ]* t2 |! L0 f
RaySRTOS(总体文件夹), P$ V% o6 Q" L1 F, g1 Y
                    |Kernel(文件夹)|RaySRTOS.c 系统平台无关主文件& m; j& @+ f3 W
                    |                |RaySRTOS.h 系统平台无关头文件
1 v/ c( z4 z1 |0 v$ m* r                    |
* x1 E8 s! x# r+ ^                    |CPU(文件夹)  |8051_KEIL(文件夹)|CPU.c          特定平台CPU相关c文件
, q/ s' E7 Y0 X) `0 n6 p                    |                |                |CPU_ASM.asm    特定平台调度代码% B1 x5 Z1 k' }, C$ @% |( }$ M( A
                    |                |                |CPU_CFG.h      特定平台数据定义以及系统配置
: q# y$ ?# B/ N% `' @                    |                |
5 ^1 c" H: `$ i7 u) Y$ J                    |                |AVR_GCC(文件夹)  |......4 k* s' H! h" @( f- B- t% R
                    |, Y5 O7 V0 V) Q+ o/ t
                    |
9 G+ [; n0 N+ _' e& _$ O# g                    |) n. E: _/ m6 Y) g& t6 \1 W0 P# I
                    |DEMO(文件夹)    |各种平台演示代码工程
/ O8 T. {+ t2 _# l2 K9 r4 T+ G4 Q, f; s2 }+ m+ w: b; ^! M
该实时操作系统具备以下几个优点:4 b3 Z. V' M1 u0 |  P

; Y1 n$ l: P! F) a: o9 p% }1:全抢占式优先级调度8 o. L% g* u3 `$ u3 g
2:小型化,适用于单片机
8 {7 [0 L' j+ v. x0 q  e! H' P+ q3 C+ |  U
1 }! _. T& y  I1 B  F
2 l% B& N; q9 M6 F4 @

) u; C  J( C5 J4 o5 K+ H51版本  % F3 T* b% `, \% Z( g5 \8 G
keil4编译版本,89c52单片机运行,仿真proteus7.5sp3  
7 L( S# M' Z/ u5 z由于是优先级抢占式调度,建立了两个任务,占用ram稍微较大,flash占用还可以,占用情况如下:  
" N- `' t: s( I6 H' J/ C) ?! LProgram Size: data=92.0 xdata=0 code=950  
, }7 U' }, E, l2 j2 {* P! D下面是系统函数声明  
4 ]3 V2 w# J: d0 \2 m7 I5 V$ ~5 ^/*--------------------------------------------------------------------------------------+  
9 h/ \7 G" V$ o2 z2 z% J$ O4 Y|系统函数声明    |  
2 R" @  ?  X8 ^4 S7 I( M+---------------------------------------------------------------------------------------*/  
- d( N3 q4 o7 v) A, U  \, j! ^void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务  6 S/ o$ p; @" I/ e7 Q6 g
void RAYS_Start(void); //系统启动函数  ; o3 X" g* J' M$ ]2 ?: F
void RAYS_TaskResume(INT8U prio);  //任务恢复函数  
7 W4 Y) |  @. v8 P0 c: @" ^void RAYS_TaskSuspend(INT8U prio); //任务挂起函数  
& {- k5 t! Y3 Evoid OSSched(void); //汇编调度函数  ; n7 _2 Y1 Y+ ^4 P6 a
void RAYS_TimeDelay(INT16U ticks);  //任务延时函数  % b7 t, F2 l4 s* D
void Idle_Task(void);  
: \1 X0 T/ \5 T, c1 @* K6 Z5 zvoid RAYS_Init(void); //系统初始化  
" p0 D; n& e( e/ v. }4 q( avoid TickIntHook(void);  //系统节拍钩子函数
8 N+ Q0 N5 m: O5 H8 G& N$ y; w% a7 ]6 \) D! T: w8 d
9 b6 ^* T; c# t) S. d. z

" Y' b0 ~: s$ Navr版本  - _1 \. L9 r0 m" S
用winavr20060421编译,ide选择的是avr studio,也可以用winavr编译,仿真同样是proteus7.5sp3,调度在16兆只用10us(avrstudio软测)
3 U* t( R7 K9 j+ k0 z6 p6 H4 a9 T0 u单片机型号分别测试了mega128 和mega8和mega88,都可以运行,但程序如果大于64k的话调度部分pc需要改动一下  
" D7 A1 P9 \1 E9 `* X! k' t由于是优先级抢占式调度,建立了3个任务,占用情况如下:  ( c% Z1 l6 n% W" N1 x8 }; x

1 X+ j/ b5 h5 c0 g0 V+ D' uProgram:    1178 bytes  - d4 y6 u# `" E% B! s5 H% B
(.text + .data + .bootloader)  ( w6 Y3 B0 V& `  [- T1 m6 A
* v% J; p4 ~' a6 f
Data:        225 bytes  % Y* B4 W# G  n! r
(.data + .bss + .noinit)  6 I. \# u" m4 b" f
默认优先级0s  0 @( \8 m  s$ g7 Y7 d3 q
/*--------------------------------------------------------------------------------------+  
% z$ T+ ?, u9 e) b1 D; e4 ]# n|系统函数声明    |  4 c& u1 I( x( Z, l4 ?& |9 d
+---------------------------------------------------------------------------------------*/  ! d0 f1 A# r% `# R% u, _6 n. Z
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务  
: t7 n9 [! D: b: x( nvoid RAYS_Start(void); //系统启动函数  - @7 {5 `/ ~1 g5 R; z. C# [2 w* }
void RAYS_TaskResume(INT8U prio);  //任务恢复函数  
( n1 O0 H' c* `- M9 bvoid RAYS_TaskSuspend(INT8U prio); //任务挂起函数  
" `% f6 D0 t9 z( wvoid OSSched(void); //汇编调度函数  
1 a7 M$ j3 D, R+ B; Dvoid RAYS_TimeDelay(INT16U ticks);  //任务延时函数  
4 d% j  Z1 u0 J- c% x, |void Idle_Task(void);  
' y4 c) a7 }* U3 _+ Tvoid RAYS_Init(void); //系统初始化  
* f) |8 b, x# O9 |1 Svoid TickIntHook(void);  //系统节拍钩子函数  7 M- |6 X; G& b1 p* ^9 ^/ _

; c* W3 w/ b. _8 x* E( M) M# A/ I2 t/ k: E
最后来stm8s105c6版本,本人手上只有这个小小的discovery板子,100块买的,所以先拿它做的测试,很稳定!  1 M/ m5 Y; Q8 \2 C
编译器选择的是IAR,因为它里边支持c语言是用的模拟寄存器!!!!stvd好像用的是堆栈,导致在stvd上做系统几乎不可能  3 |4 U# u& m- F' Y( u; K; l
stm8工程,是stm8s105c6版本,仿真是硬件仿真,因为proteus不支持stm8STM8IAR.rar)  ' `4 O6 ?  u  w
) Q7 w! m$ M' g2 S. z3 R* D
flash和ram占用情况如下:  
8 }  V3 z3 o& W8 @- S+ x  941 bytes of readonly  code memory  ; j( ^% G0 h' D( W1 X. k
  132 bytes of readonly  data memory  
% ~+ K) a* v# R& \* O* ^; A  499 bytes of readwrite data memory  
3 R  r! n1 J: o; z2 H/ U4 h我感觉ram占用有点大,后来我编写了个什么都没有的main函数,ram占用是272B,所以本系统ram占用应该是499-272=227B  . i, O: F- N6 l" r; h) O* b2 F
优化级别选则balance.  
% q% Z7 [% k0 ^. N; b7 a/*--------------------------------------------------------------------------------------+  3 {/ J. ^9 `3 ]6 N* g  ?+ B9 `
|系统函数声明    |  
2 B% `& O( H$ B& D+---------------------------------------------------------------------------------------*/  2 C3 V3 h/ X2 X9 z$ c* y
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务  
4 L- C; j" ^: F& F$ ]% Wvoid RAYS_Start(void); //系统启动函数  0 q) }( m* s  \6 t
void RAYS_TaskResume(INT8U prio);  //任务恢复函数  . R$ v. F( p# I9 O# O# J6 ^
void RAYS_TaskSuspend(INT8U prio); //任务挂起函数  
( U* \3 T1 R2 l! q( V0 ~void OSSched(void); //汇编调度函数  7 D) d$ C4 @( v7 k4 Y" q( K$ D. A
void RAYS_TimeDelay(INT16U ticks);  //任务延时函数  
/ C" A  d; [' w9 D) v& Evoid Idle_Task(void);  
( ?- U9 |* s4 b0 a( ?void RAYS_Init(void); //系统初始化  
6 R6 L& c- e7 B/ O/ z2 dvoid TickIntHook(void);  //系统节拍钩子函数  
0 n2 |& C" U/ M. w) e/ G0 [( T: `3 k! c+ @
  , `% H$ S4 P& c( B9 S
欢迎大家测试,我是新手,难免有很多bug,三种版本90%代码都一样,与cpu最相关的RaysRTOS_ASM文件差异较大,不过格式也一样.  4 B$ G) @: x' c! `9 O1 S
我的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 | 只看该作者
谢谢楼主,一步步来,学习中……
( L: w( z3 I3 W" N* O; M

156

主题

543

帖子

1180

积分

四级会员(40)

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

积分
1180
3#
发表于 2016-7-4 15:22 | 只看该作者
好资料哈,童鞋们有福咯!' j, I% t; @* ^+ w' @9 M

154

主题

485

帖子

1156

积分

四级会员(40)

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

积分
1156
4#
发表于 2016-7-4 15:55 | 只看该作者
感谢楼主分享!!!
& b# w3 [/ T$ ?6 Z
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-11-15 23:52 , Processed in 0.068204 second(s), 34 queries , Gzip On.

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

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

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