搜索
bottom↓
回复: 21

大家来讨论下UCOSII在51单片机上的移植(已经跑起来了)

[复制链接]

出0入54汤圆

发表于 2008-5-31 16:54:24 | 显示全部楼层 |阅读模式
最近在看UCOSII的书,以前写程序一直是用前后台的模式,一般的程序都能应付,我比较常用的一种模式就是
while(1)
{
if(flag_ms)
{
   flag_ms = 0;
   ...         //要执行的函数
   ..
}
}
flag_ms是用定时器中断产生的,定时器中断里只对其置1
这种模式我经常用在有数码管和有按键处理的程序里面,比较好用
但如果显示处理和按键处理程序太长,超过了定时器中断一次的时间,则会出现一些问题,比如显示的话有的显示时间长一点等
如果这样也可以用特别的方法处理,比如把一件事情分成二个中断时间来处理

现在想改改模式,特别是又在学ARM,得上个操作系统才好,手头有本51移植UCOSII的书,买了好久,一开始看看不明白,最近静下心来好好看
虽然还没有出实际的效果,但只是想讨论一下UCOSII实现的原理。以下是我对它的理解

UCOSII里也有个时间基准,这个基准是用定时器中断来产生的,任务的切换也是在这里完成,在我们看来,任务就是一个一个的函数
在这里就考虑普通函数,不考虑有其他中断发生。
每个时间片都有一个任务在执行,等到时间片时间到,即任务被定时器所中断,在定时器中断里面就会判断是否有更高优先级的任务需要执行,如果有,就切换到新的任务(后面再理讨论切换原理)然后退出定时器中断,开始新的任务的执行,每个任务都是一个死循环的形式,后面会跟一个延时几个时间片,每个任务都保存有自己的时间片,在定时器中断里会对每个任务的时间片减1,当减到0的时候任务就满足进入就绪状态的一个条件

下面讨论任务的切换原理:
每个任务都有自己的一个栈,当定时器中断到需要进行任务切换时,需要先把当前执行的任务的一些数据保存起来,比如任务入口地址,寄存器等,51因为有系统栈,所以是把系统栈复制到任务栈,这里的复制的目的就是要让当前正在执行的任务像刚被中断一样,因为等到下次轮到这个任务执行时,把它的栈复制到硬件栈,然后执行中断返回指令,就可以运行了,好象UCOSII各个任务栈的目的就是保持着该任务像被刚中断的状态,当要执行该任务的时候用一条中断返回指令就可以了,所以才会看到每个任务都是一个死循环的模式。

以上是个人对UCOSII原理的一些理解,有什么理解错误大家指出,欢迎大家讨论。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入54汤圆

 楼主| 发表于 2008-6-3 15:09:23 | 显示全部楼层
今天终于把UCOS跑起来了,用的是STC89C54RD+做实验,外部有1K的RAM。
原来在启动文件里也有几个选项要设置
如下:

XDATALEN        EQU     0400H      ; the length of XDATA memory in bytes.

XBPSTACK        EQU     1       ; set to 1 if large reentrant is used.
XBPSTACKTOP     EQU     03FFH+1; set top of stack to highest location+1.

建5个任务用了560B RAM和4K多程序存储器。

出0入0汤圆

发表于 2009-1-9 14:19:41 | 显示全部楼层
顶一个哈!

出0入0汤圆

发表于 2009-5-26 12:38:50 | 显示全部楼层
你好我也在学UCOS ii现在在移植到STC单片机上
可以给我发一个移植程序吗?
zhangxinyuan523@126.com

出0入0汤圆

发表于 2009-5-26 23:09:18 | 显示全部楼层
问一下

出0入0汤圆

发表于 2009-5-26 23:10:17 | 显示全部楼层
我的程序 设置了编译完了RAM
还是超过 400H

出0入0汤圆

发表于 2009-5-27 15:56:56 | 显示全部楼层
mark..

出0入0汤圆

发表于 2010-8-21 21:02:05 | 显示全部楼层
我也很希望楼主能共享下CODE。
我现在向51上移植ucos,在Proteus仿真可以,在单片机里就不行了,单片机资源比lz用的多些。

出0入0汤圆

发表于 2010-8-21 21:37:44 | 显示全部楼层
顶,希望楼主把代码发给小弟一下。lybwell@163.com

出0入0汤圆

发表于 2010-11-5 11:38:23 | 显示全部楼层
我的UCOS老是跑不起来,大家有没有移好的原码发个给小弟

出0入0汤圆

发表于 2010-11-10 15:14:59 | 显示全部楼层
希望楼主给我一份  a305566@sina.com   非常感谢!!

出0入0汤圆

发表于 2011-2-23 10:42:45 | 显示全部楼层
楼主也给我发一份吧,感激不尽!hq19872006@126.com

出0入0汤圆

发表于 2012-8-1 15:44:04 | 显示全部楼层
你好,我从网上down 了一个在STC89C52的UCOS可以再单片机上跑起来,但我重新建了一个工程却不能编译通过,请问楼主是怎样配置Keil4的?

出0入0汤圆

发表于 2012-8-1 16:43:06 | 显示全部楼层
工程打包,,,才能看啊,

出0入0汤圆

发表于 2012-8-12 20:46:08 | 显示全部楼层
烟雨任此生 发表于 2012-8-1 15:44
你好,我从网上down 了一个在STC89C52的UCOS可以再单片机上跑起来,但我重新建了一个工程却不能编译通过, ...

一样的头像。呵呵

出0入0汤圆

发表于 2012-8-12 21:38:55 | 显示全部楼层
xx学习!

出0入0汤圆

发表于 2012-8-12 22:52:06 来自手机 | 显示全部楼层
能不能开源啊 我也在研究这方面的事情

出0入0汤圆

发表于 2013-6-9 00:17:24 | 显示全部楼层
mark                 

出0入0汤圆

发表于 2013-6-9 07:54:28 来自手机 | 显示全部楼层
51不适合跑系统,没有实际意义

出0入0汤圆

发表于 2013-7-10 08:07:14 | 显示全部楼层
gaoyichuan000 发表于 2012-8-12 22:52
能不能开源啊 我也在研究这方面的事情

对呀,楼主把源代码贴出来看看

出0入0汤圆

发表于 2013-8-14 20:29:46 来自手机 | 显示全部楼层
mark……
顶一个…

出0入0汤圆

发表于 2013-9-25 16:48:10 | 显示全部楼层
求源码,294145923@qq.com
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 14:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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