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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
RaySRTOS0.3版本 支持三种平台:51  AVR  STM8
( E6 y' F" R" T9 I* }* T" h较以前版本将RaySRTOS主文件和不同CPU平台文件分开,形成了以下目录:$ T6 d4 Z$ M6 Z, K% t1 l" D- S7 U2 G
RaySRTOS(总体文件夹)
$ k. g2 F! n8 ?' H0 Z                    |Kernel(文件夹)|RaySRTOS.c 系统平台无关主文件
! e1 d* V8 G, K+ ?* E8 A& H* K                    |                |RaySRTOS.h 系统平台无关头文件% z% Q6 ]- K1 u
                    |
1 d- }) b" M# T% X0 v- M1 p, p                    |CPU(文件夹)  |8051_KEIL(文件夹)|CPU.c          特定平台CPU相关c文件5 r, {9 N5 R4 ^9 R8 H
                    |                |                |CPU_ASM.asm    特定平台调度代码: f$ a1 u  i# K. @0 }- H' c0 |+ A
                    |                |                |CPU_CFG.h      特定平台数据定义以及系统配置
8 J+ R; E. A1 R) t3 d                    |                |
( g. t* R4 _2 M& @7 h& F                    |                |AVR_GCC(文件夹)  |......( Z! K9 D" l2 q4 _5 `
                    |- }: _0 E4 r' k
                    |
# N  q; _+ v0 O$ S( Y! i4 x7 [2 T                    |
+ R3 j5 E0 `8 v; D' U- u                    |DEMO(文件夹)    |各种平台演示代码工程. D( C# L) S9 k8 i* o$ J

& R$ E$ Q9 s$ V) l* L$ N0 {9 ^该实时操作系统具备以下几个优点:
/ Z+ K5 J/ i/ j: i2 C  Y$ ?( P# ^7 d9 g) D7 w
1:全抢占式优先级调度! i+ C; f" f; r
2:小型化,适用于单片机$ ]: s: w+ d- u8 j

; B) P) E8 o4 t& K$ a1 e/ o6 P( L8 N& x" @2 }$ t
% w  M5 u- {$ i) l6 n% n* Q

2 G; Z( z: V6 f  e51版本  
5 C3 a; P6 y9 @0 Z$ Nkeil4编译版本,89c52单片机运行,仿真proteus7.5sp3  
7 }! e2 k9 ]" ]由于是优先级抢占式调度,建立了两个任务,占用ram稍微较大,flash占用还可以,占用情况如下:  9 G2 L" J: D' t
Program Size: data=92.0 xdata=0 code=950  ! C" j6 q6 {2 H. [$ m3 e
下面是系统函数声明  % v5 T; r" M3 g2 w* D5 ^4 y# r3 ?
/*--------------------------------------------------------------------------------------+  
4 [5 g% e5 s! f, J$ b* X|系统函数声明    |  
: O" R9 z, p* ~& F; Q" c" Y# v+---------------------------------------------------------------------------------------*/  
2 T& M. _7 }9 y2 z/ Z6 r# evoid RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务  9 k3 G+ t- T* P$ S8 w
void RAYS_Start(void); //系统启动函数  9 K' j0 \* }& o- b) Z+ R
void RAYS_TaskResume(INT8U prio);  //任务恢复函数  
; M; F5 v$ W5 E/ [void RAYS_TaskSuspend(INT8U prio); //任务挂起函数  
1 e" q7 c$ @' `5 qvoid OSSched(void); //汇编调度函数  
. F! }: Z1 f/ ^, V! P0 E" s9 ]3 ^0 Svoid RAYS_TimeDelay(INT16U ticks);  //任务延时函数  
) w- U5 o* n! e- o: T1 Bvoid Idle_Task(void);  / k5 z9 n$ z( I8 M
void RAYS_Init(void); //系统初始化  4 ^& U. o' K7 s# H# F5 ]  Y8 R
void TickIntHook(void);  //系统节拍钩子函数
& r& M1 r+ }$ ?% d2 p+ g, g: |/ A/ h2 x$ _( n

/ e& a0 d, N  O6 D3 l0 S2 l7 ~9 u; ~7 N) M3 M* I/ V7 h8 {" m4 m
avr版本  - {$ C; J) N7 b2 Z9 A# ~& V% w
用winavr20060421编译,ide选择的是avr studio,也可以用winavr编译,仿真同样是proteus7.5sp3,调度在16兆只用10us(avrstudio软测) 3 `( g, w  o* f2 j# m
单片机型号分别测试了mega128 和mega8和mega88,都可以运行,但程序如果大于64k的话调度部分pc需要改动一下  " }' ?2 |) R) D
由于是优先级抢占式调度,建立了3个任务,占用情况如下:    Q4 c! A8 v. r; j& e" M

) q. t- V4 c  _  n( y* eProgram:    1178 bytes  3 k. m9 Q0 w3 ~4 F
(.text + .data + .bootloader)  
1 h" P4 x. x$ \2 t& J' S
, B; u7 b5 f4 |# D8 gData:        225 bytes  0 P, d/ q" {. w
(.data + .bss + .noinit)  
7 z$ L2 P2 O3 B默认优先级0s  
) Z. `1 y6 `7 p3 Y/*--------------------------------------------------------------------------------------+  $ X% C! p1 m! h8 f/ M& C
|系统函数声明    |  
1 n& [5 G' B7 y+ F0 Q+---------------------------------------------------------------------------------------*/  . ?3 n! o) v/ ]
void RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务  : I3 c. h4 n5 N8 {6 B
void RAYS_Start(void); //系统启动函数  1 K, M( r1 A/ F8 Z2 O5 J4 ]- a
void RAYS_TaskResume(INT8U prio);  //任务恢复函数  
* O* P" F1 e! g3 M, ?( vvoid RAYS_TaskSuspend(INT8U prio); //任务挂起函数  
$ Q. r( R8 {) }' c% pvoid OSSched(void); //汇编调度函数  ( ~* x, K3 K* Z5 l3 i* n
void RAYS_TimeDelay(INT16U ticks);  //任务延时函数  
& o) y% ]9 W5 t' k+ Ivoid Idle_Task(void);  ( z- m/ _( C7 s; v$ n% b/ L( _
void RAYS_Init(void); //系统初始化  
2 a* b4 k  w1 l' [4 }! yvoid TickIntHook(void);  //系统节拍钩子函数  
. \7 m/ B: M- j8 j! T
0 j/ B& G* i) {/ _; S; Y2 v, T+ `4 h  A) w2 E; o
最后来stm8s105c6版本,本人手上只有这个小小的discovery板子,100块买的,所以先拿它做的测试,很稳定!  
! l& X& f1 t9 [/ V编译器选择的是IAR,因为它里边支持c语言是用的模拟寄存器!!!!stvd好像用的是堆栈,导致在stvd上做系统几乎不可能  0 d2 [% _$ o' j
stm8工程,是stm8s105c6版本,仿真是硬件仿真,因为proteus不支持stm8STM8IAR.rar)  4 D8 k$ I" W; x& y! X7 |# y" c

( p9 Y- B4 c* ~  Vflash和ram占用情况如下:  6 A; f7 ?1 y7 ^+ \4 V- B
  941 bytes of readonly  code memory  
* _6 Q/ w( p4 a8 v0 {7 Y* w  132 bytes of readonly  data memory  
' p7 k$ d! M- f' [8 Z& T7 Q$ y  499 bytes of readwrite data memory  
- _  _, L: ^8 G7 c* t% N我感觉ram占用有点大,后来我编写了个什么都没有的main函数,ram占用是272B,所以本系统ram占用应该是499-272=227B  1 k" N& f! @7 i/ I# \
优化级别选则balance.  
& F% {* Z- g$ Q# a/*--------------------------------------------------------------------------------------+  0 @# ]+ V* ?/ j# Y
|系统函数声明    |  : m5 I* y* {  M. w! g& j: w
+---------------------------------------------------------------------------------------*/  
8 L5 O( e3 d6 G# Q1 B5 Hvoid RAYS_TaskCreate(void (*Task)(void),INT8U *Stack,INT8U t_Prio);//创建任务  
/ @/ w) p' x$ n) _8 e/ Uvoid RAYS_Start(void); //系统启动函数  
% ^" K$ c" x8 P* Nvoid RAYS_TaskResume(INT8U prio);  //任务恢复函数  / A9 j. Y* {$ w6 _! \+ A( P5 \2 F! Z
void RAYS_TaskSuspend(INT8U prio); //任务挂起函数  
8 b& j+ r/ _- o' Z9 u2 A( xvoid OSSched(void); //汇编调度函数  
) \: Y; \# Z9 ]( T; u' Bvoid RAYS_TimeDelay(INT16U ticks);  //任务延时函数  
' g$ |' ^' ~/ X( v3 G- Qvoid Idle_Task(void);  6 p; ~8 q( q0 x# l$ O8 o
void RAYS_Init(void); //系统初始化  
- e- L4 L$ b8 ]void TickIntHook(void);  //系统节拍钩子函数  : E1 l# G$ v2 ~3 K

- l/ R0 ^0 o' N6 Z1 Z; S6 s! D  ( J; y; \. C% {
欢迎大家测试,我是新手,难免有很多bug,三种版本90%代码都一样,与cpu最相关的RaysRTOS_ASM文件差异较大,不过格式也一样.  ) g) E& C; L* `' N
我的qq 771992497 大家多多测试,有问题及时反馈

RaySRTOS0.3版本.rar

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

该用户从未签到

2#
发表于 2016-7-4 14:24 | 只看该作者
谢谢楼主,一步步来,学习中……& |# E! l- l: A4 o+ A5 H% R) t  v: w

该用户从未签到

3#
发表于 2016-7-4 15:22 | 只看该作者
好资料哈,童鞋们有福咯!
; F( o" M; M+ G- u# Z( p

该用户从未签到

4#
发表于 2016-7-4 15:55 | 只看该作者
感谢楼主分享!!!
' B8 u* S5 N+ E4 x8 B' K& r6 p
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-4 22:31 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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