打印

我写的51迷你版RTOS可以运行在AT89C2051,望大家拍砖

[复制链接]
6782|39
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
singleywy|  楼主 | 2010-9-22 09:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我利用空闲时间,日夜赶工,花了三个星期写了一个实时操作系统即RTOS,因目标代码小,我称之为OS_MINI,我的RTOS有如下特点:

1)精简版的OS_MINI,目标代码系统代码只有430字节,系统所占内存约为30字节,
最大支持16个任务,(在AT89c2051上最大只支持8个,每个任务所占堆栈至少6个,用于保存ACC,PSW,R0,R1,以及任务返回地址两字节,其他寄存器没有保存,属于共享资源)
    本系统为优先级抢占式任务调度,当任务超时时,支持优先级反转,

2)使用任务为N个时,所占内存为30+6*N+(1+1bit)*n,其中n为每个任务定时模块的个数,可以根据需求加减,在AT89C2051中堆栈地址为50H,堆栈顶为7FH,共48字节,可以支持8个,不过最好不要超过8个,因为堆栈满了,就会造成堆栈溢出
同时每个任务可以设定一个定时模块,用于资源或时间等待,系统也占用一个定时模块,用于任务超时时系统自动切换任务

3)系统中的任务具有如下状态:运行、就绪、挂起,即Task_current,Task_ready,Task_wait,,每个任务就有不同的优先级,任务在挂起过程中支持系统唤起操作,任务唤起操作。
本系统有一个特点,在就绪队列中,各任务优先级相同,轮流运行,只有等待任务唤醒或超时情况下可以抢占CPU,【1.当等待任务唤起时,根据该任务优先级与当前任务比较来决定是否立即运行或切换】或者【2.当当前任务超时时,当前任务就会被抢占,避免每个任务占用过多的时间】,所以实时性比较好

4) 任务间通信可以采用Send(task_id,message,stat),Receive(message,stat),check(task_id,message,stat)方式通信,精简版的OS_mini不支持这些函数,采用全局变量通信,因为要占额外的内存

5)该系统支持动态堆栈功能,仿照的是RTX的堆栈管理方式,优先级高的在低地址,优先级低的在高地址,当下一个任务优先级高时,当前任务向高地址搬迁,反之,向低地址搬迁,中间空出一定的堆栈空间作为当前任务堆栈使用,所以内存的利用率很高

6)系统占用了一个定时器,为任务定时模块、系统定时模块提供时钟,调整范围为T0_INT=1MS-5MS,
任务超时时间为N*T0_INT,N可以设定超时时间长短最大255。

7) 该系统支持中断调用任务调度函数,同时,任务自己也可调用任务调度函数来放弃CPU,如果不自动放弃,任务会因超时,自动被系统剥夺CPU,然后插入就绪列表

以上的介绍是我写的精简版的OS_MINI,还有完整版的OS_mini_full,支持邮箱,优先级继承,信号量通信函数等,
所有的操作系统均用汇编来写的,所以结构精简,代码可以最大的优化,但移植性比较差,不过算法是同样的,同样的思想可以用于不同的单片机
作者:殷文跃, QQ:844721473
邮箱:[email=singleywy@qq]singleywy"at"qq[/email],com
本人大三,学单片机不久,欢迎拍砖,如有需要者可以附送

相关帖子

沙发
singleywy|  楼主 | 2010-9-22 09:23 | 只看该作者
本帖最后由 singleywy 于 2010-9-23 10:02 编辑

欢迎大家来拍砖,附件在25L

使用特权

评论回复
板凳
highgear| | 2010-9-22 10:30 | 只看该作者

使用特权

评论回复
地板
xiao陈| | 2010-9-22 11:03 | 只看该作者
源码咧  学习学习

使用特权

评论回复
5
原野之狼| | 2010-9-22 11:24 | 只看该作者
玩OS的人越来越多了

使用特权

评论回复
6
binghe41| | 2010-9-22 11:32 | 只看该作者
不错

使用特权

评论回复
7
singleywy|  楼主 | 2010-9-22 11:50 | 只看该作者
5# 原野之狼
纯属想深入学习而已,呵呵

使用特权

评论回复
8
singleywy|  楼主 | 2010-9-22 11:50 | 只看该作者
4# xiao陈
留邮箱

使用特权

评论回复
9
mcu_lover| | 2010-9-22 11:57 | 只看该作者
能否介绍思想。

使用特权

评论回复
10
singleywy|  楼主 | 2010-9-22 12:18 | 只看该作者
9# mcu_lover
我有一篇贴子“个人对单片机多任务系统的研究中有其思想”

使用特权

评论回复
11
wzlzh| | 2010-9-22 14:13 | 只看该作者

使用特权

评论回复
12
huaqun| | 2010-9-22 15:59 | 只看该作者
在哪? 1# singleywy

使用特权

评论回复
13
huaqun| | 2010-9-22 16:00 | 只看该作者

使用特权

评论回复
14
batsong| | 2010-9-22 17:37 | 只看该作者
:)

6335473@qq.com  楼主发给我学习一下

我最近正在看ucos源码,楼主大三就这么牛x,想我当年上学时连三极管都不认识

使用特权

评论回复
15
Quentin| | 2010-9-22 21:01 | 只看该作者
楼主何不上传个附件

使用特权

评论回复
16
singleywy|  楼主 | 2010-9-22 21:05 | 只看该作者
15# Quentin
我忘了加附件了,不过待会儿上,呵呵正在整理过程中

使用特权

评论回复
17
xuyiyi| | 2010-9-23 05:12 | 只看该作者
不错 ,  顶

使用特权

评论回复
18
kaih_007| | 2010-9-23 08:45 | 只看该作者
支持!请发我一份学习。
kaih_007@163.com

使用特权

评论回复
19
ayb_ice| | 2010-9-23 08:55 | 只看该作者
请问LZ
既然是抢先内核,但却不保存R2~R7,怎么保证重入问题

使用特权

评论回复
20
singleywy|  楼主 | 2010-9-23 09:48 | 只看该作者
19# ayb_ice
这是因为我开始针对的是小内存的而设计任务堆栈的,只保留了ACC,PSW,R0,R1一般情况下在加上全局变量,相对来说已经够用了,所以可以解决一定范围内的任务重入问题,不过我设计的版本是动态的,原本启动时6个字节任务堆栈,可以将R2-R7增加到里面,为12字节,只要改动一下,栈顶地址,以及push,pop的个数就可以了,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

295

帖子

3

粉丝