设为首页收藏本站

arduino 单片机机器人爱好者之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3891|回复: 2

关于ucos操作系统-1任务

[复制链接]

该用户从未签到

发表于 2013-12-15 14:47:50 | 显示全部楼层 |阅读模式
本帖最后由 zhangjie 于 2013-12-15 16:49 编辑

    此文章献给yfrobot的所有工作人员,以及曾经一起战斗过的朋友们,希望该论坛可以越办越好,也希望yfrobot的所有产品可以得到大家的高度认可,对于潘同学的这一举动本人表示非常赞同,可以给我们提供一个共同交流的平台。水平一般,可能在一下的文章中会出现一些错误,或者是大家看法有出入的地方,如果您发现了可以及时联系我纠正过来,以免更多的人看到错误的论述会影响到他人的学习。本人QQ:510551594,谢谢!

    本来学习就是一件很枯燥乏味的事情,但是在学习完之后我们完成了自己本不能完成的事情,那种成功的喜悦确实会让人觉得很兴奋。闲话少叙,开始了解文章的主题吧!

目标读者:
    如果你是以为对ucos基本上认识为0的人,我希望你可以读完本文章之后可以有一种从0到1的感觉,这一部分人群是我写本文章的目的。如果你已经是一名ucos的高手了,那么您完全可以不必要往下看了。或者你可以抱着找错误的态度,勉强看完此文。

1.什么是操作系统?

1

1
       QQ截图20131215134245.png
    从结构上看,操作系统位于硬件层之上,应用软件层之下。他管理这计算机的硬件资源并且为应用程序提供服务,所以也会叫他为应用软件的运行平台。对于用户来说,他就是一大堆的API函数,我们可以通过调用这些函数来对系统资源进行操作。

2.操作系统在干什么?
    前面说过操作系统管理这所有的所有的硬件资源,比如:
1).CPU的管理
2).任务的管理
3).IO设备的管理
4).文件的管理
5).网络通信的管理
.......
在管理任务的时候操作系统会建立一张表(任务表),列举了所有的任务,操作系统会时时刻刻关注这张表的状态,一边对每个任务进行适当的操作。同样,在管理IO设备的时候也会建立一张表(io设备表),以及文件目录.....总之操作系统需要一大堆表来对所有的资源进行管理。

3.如何理解任务?
    把一个大型任务分解成多个小任务,然后在计算机中通过运行这些小任务,最终达到完成大任务的目的。μC/OS-II中,与上述那些小任务对应的程序实体就叫做任务(实质上是一个线程),μC/OS-II就是一个能对这些小任务的运行进行管理和调度的多任务操作系统。从应用程序设计的角度来看,μC/OS-II的任务就是一个用户编写的C函数和与之相关联的一些数据结构而构成的一个实体。
QQ截图20131215144135.png

4.如何理解多任务?
    由同一个处理器,”并发“的运行多个程序!
并发 我搭上的双引号,他的意思是:由同一个处理器,轮换着运行多个程序,并且每个程序在运行的时候,处理器都不一定会将其运行完。
QQ截图20131215140346.png
     由上图可以看出,程序1还没有运行完的时候响应了外设的中断而切换到程序2上了。这里所谓的切换,就是把程序的目标地址告诉CPU,让CPU到该地址上去执行对应的程序。

5.任务是如何运行的?
    计算机在运行程序的时候,会先将程序员写好的代码读到内存中,并且会为该程序建立一个任务堆栈(每个任务都有自己私有的堆栈)。CPU的PC寄存器中存放这该程序的执行地址,SP寄存器存放着任务堆栈的地址,CPU所需要执行的下一条语句都会被存放在PC寄存器中,所需要用到的变量表都可以在SP所指向的任务堆栈中找到。这样即建立起了CPU与内存之间的联系,以便程序运行的时候,两者可以更好的配合起来。CPU中的寄存器组和内存中的任务堆栈被称之为程序的运行环境!如下图:
QQ截图20131215142125.png
6.多任务的时候任务如何运行?
    上面一节我们能理解单个程序的运行的,但是在多个任务运行的时候会有一个这样的问题:CPU中的寄存器组中的值是会变的!发生了这种问题应该如何解决呢?看一下下一张图我想大家都应该明白了,其实很简单:
QQ截图20131215142814.png
    没当建立一个任务的时候,会为该任务建立一个虚拟的处理器。当发生任务切换的时候,操作系统的调度器会将当前的CPU中的各个寄存器的状态跟新到对应任务的虚拟CPU中去,并且将下一个要执行的任务的虚拟CPU中的寄存器状态跟新到CPU中去,这样即完美的解决了多任务的问题。这种CPU寄存器跟新,是由操作系统的调度起来完成的。此时我们可以得出一个结论:任务的切换实际上就是CPU中的运行环境(寄存器)的切换!

看到这里我们可以为今天的学习总结一下了:
任务三要素:
1.任务代码(程序)
2.任务的私有堆栈(以保护运行环境)
3.任务控制块(即虚拟CPU)


签到天数: 7 天

[LV.3]偶尔看看II

发表于 2013-12-16 20:14:46 | 显示全部楼层
非常感谢,平时可以多来分享点有趣的,大家共同学习!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2014-2-26 12:41:22 | 显示全部楼层
不错,正在用ucos,如果能写个详细的平台移植手册就更好了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|联系我们|YFRobot ( 苏ICP备13017135  

GMT+8, 2017-11-19 21:52 , Processed in 0.581502 second(s), 29 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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