凌阳科技大学计划论坛

首页 » 16位应用专题 » OS应用专区 » 编写了抢先式的os for 61
xupengfeii - 2007-8-14 20:00:00

一直不喜欢ucOS,觉得它很多缺点,并且是非抢占式的os,任务必须调用系统函数,好多问题留给了用户,所以立志要自己编写一个os。

第一天 编写了不带中断处理的os for 61

第2天 编写了带中断处理的os for 61

第3天 编写了xpf os for 61 的堆栈检查和系统延时函数

第4天 编写了优化汇编的任务切换算法//不太会61的汇编,完全是猜着编写的,所以花的时间太长了。

第5天 测试xpf os for 61的运行效率,某种情况数值非法,后来测算出来>=0.75秒时测量数据非法的,才知道线程1没有清狗引起系统复位。

。。。。。。。。。。

还有很多没有写完呢,欢迎和我联系北航徐老师,87235213。

leajian - 2007-8-15 14:01:00

niu

xupengfeii - 2007-8-15 15:54:00

今天出了点问题,总是意外复位,反复研究,认为由于两种切换方式发生了嵌套,从而导致了当前和下一个任务指针指向相同的堆栈,做了互锁处理后,连续运行一上午,运行正确,并且发现了61的硬件的一些特性。

今天编写了mutex,sem,和mailbox处理。

hzh007 - 2007-8-19 16:03:00


引用:
原帖由 xupengfeii 于 2007-8-14 20:00:00 发表
<p>一直不喜欢ucOS,觉得它很多缺点,并且是非抢占式的os,任务必须调用系统函数,好多问题留给了用户,所以立志要自己编写一个os。</p><p>第一天 编写了不带中断处理的os for 61</p><p>第2天 编写了带中断处理的os f......


不知道楼主是从哪点得出的uC/OS不是“非抢占式的os”的结论的?

优先级最高的任务一旦就绪,就会发生调度。不能抢占,还叫什么RTOS?Labrosse花了一章的时间介绍前后台系统,可剥夺与非可剥夺OS的区别。这些基础知识远比OS的源码重要。

OS种类繁多,万变不离其中。
xupengfeii - 2007-8-24 16:54:00
我说的意思是高优先级的任务如果不主动退出,那么低优先级的任务无法加载,如果低优先级的任务有串口A\D等有时间要求的任务,而高优先级的任务不能主动退出,//某一次处理时间过长,会引起低优先级任务丢失数据,//比如串口超过一定时间就会丢失接收数据。
慢慢理解你就明白了。写操作系统的人理解得更透彻。根据我的研究好像ucOS-II还有一个问题没有解决,还没有论证。
example
Task1 高优先级
{do data ....//如果时间过长,别的任务就会一直处于堵塞状态,从而引发问题。
systimedly...必须,否则后台无法切换任务,
}
Task2
{Wait Uart and Send data
systimedly...不是必须,可以被高优先级任务抢先,
}

我针对此作了改进,和Windows的任务调度类似,就是每一个任务都可以随机切换,后台自动切换,前台只作自己的事情,比如
Task1 {wait rec uart and send data} //no systimedly
Task2 {Scan Keyboard} //no call systimedly
调度方式://没有优先级,可以不用调用任何系统函数,只需要操作系统初始化就行了。
Task1--->Task2------>Task1------>Task2------>Task1------>Task2------>Task1//调度时间间隔是固定的。

XPF_OS:

看Arm的结构 花费 2天时间。
上午:ArmTDMI 不带中断的任务调度完成。
下午:ArmTDMI 带中断的任务调度完成。
好多疑问:int和main不是一个堆栈,enter int ,before int's sp,lr=>svc.sp svc.lr
如果在中断中进入中断,SVC.sp svc.lr 会不会被后一个中断冲掉?
Arm真复杂,APTS协议很多情况下不用堆栈,不得不考虑寄存器如何保护。
hzh007 - 2007-8-25 10:34:00
我考虑更多的是实时性的问题,频繁的任务切换会使OS占用较多的CPU使用率,影响用户程序的执行。

你的OS的机制实际上更像Linux,考虑的是各个进程之间的公平性问题,这里说进程,因为所有的线程在Linux下面的表现形式和进程一样,只是同一进程创建的线程可以直接共享数据。一般Linux运行在非实时状态下,所以你的OS应该是非实时的。

对于“高优先级的任务如果不主动退出,那么低优先级的任务无法加载”的问题,我有如下疑问:
你的IO相关的操作(串口,AD)为什么不用中断?OS里面基本不用查询了,如果用查询,那OS还能干什么事情?
不是uC/OS没有论证这个问题,而是他觉得根本不应该这样用。有问题的应该是优先级反转的问题,低优先的任务占用CPU导致高优先的任务不能运行。
zhenli24 - 2008-2-17 19:38:00
我都找不到  自己的 立足点
和目标了 大四的文盲的苦脑
 1 
查看完整版本: 编写了抢先式的os for 61