1.任务是一个无返回的无穷循环。uc/os-ii总是运行进入就绪状态的最高优先级的任务。

2. 任务是如何调度(切换)的?
因为uc/os-ii总是运行进入就绪状态的最高优先级的任务。所以,确定哪个任务优先级最高,下面该哪个任务运行,这个工作就是由调度器(scheduler)来完成的。

任务级的调度是由函数OSSched()完成的,而中断级的调度是由函数OSIntExt()完成。对于OSSched(),它内部调用的是 OS_TASK_SW()完成实际的调度(人为模仿一次中断);OSIntExt()内部调用的是OSCtxSw()实现调度。参考:P92,P106

任务切换其实很简单,由如下2步完成:(1)将被挂起任务的处理器寄存器推入自己的任务堆栈。(2)然后将进入就绪状态的最高优先级的任务的寄存器值从堆栈中恢复到寄存器中。参见P92

(1)作为uc/os-ii的一条普通原则,调用uc/os-ii功能函数时,中断总应当是开着的。

(2)任务永不返回,就算任务自我删除,也绝对不会返回。(任务删除并非代码删除,只是ucos-ii不会理会这任务。)

(3)OSTimeTick()函数是ucos-ii内部函数,用户无需调用。

(4)ucos-ii从中断返回之前,要判断被中断的任务是否还是就绪状态任务中优先级最高的任务。

3.    OSInit()初始化示意图

我做了一个很好的图示,竟然粘贴不出来,没办法...

4. 任务的5种状态

睡眠态(task dormat):任务驻留于程序空间(rom或ram)中,暂时没交给ucos-ii处理。

就绪态(task ready):任务一旦建立,这个任务就进入了就绪态。

运行态(task running):调用OSStart()可以启动多任务。OSStart()函数只能调用一次,一旦调用,系统将运行进入就绪态并且优先级最高的任务。

等待状态(task waiting):正在运行的任务,通过延迟函数或pend(挂起)相关函数后,将进入等待状态。

中断状态(ISR running):正在运行的任务是可以被中断的,除非该任务将中断关闭或者ucos-ii将中断关闭。

5. 任务控制块(OS_TBC)

任务一旦建立,任务控制块OS_TBC将被赋值。

OS_TBC是一个数据结构,当任务的CPU使用权被剥夺后,ucos-ii将把当前的任务状态存放于OS-TBC数据结构中;当任务的CPU使用权得到恢复后,任务控制块能确保任务能从被中断点那一点丝毫不差地继续执行。

每个任务都有自己的OS_TBC控制块,OS_TBC的数量由OS_MAX_TASK决定,任务数量少,当然OS_TBC占用RAM的空间就少。

所有的任务控制块OS_TBC都是放在任务控制块列表数组OSTCBTbl[]中。在ucos-ii初始化时,所有任务控制块OS_TBC都被链表连接成单向空任务链表。

注意:OS_TBC全部驻留于RAM中。

6.关于任务切换使用到的OS_TASK_SW()函数,其中调用软中断实现寄存器的保持和弹出。开始调用含软中断,ucos-ii强制处理器保存psw、pc的当前值,最后通过执行中断返回指令,pc和psw的值装回到cpu中。

uCOS-II任务机制相关推荐

  1. 51单片机中使用ucos ii的优缺点(好文)

    摘要:近年来,在单片机系统中嵌入操作系统已经成为人们越来越关心的一个话题.本文通过对一种源码公开的嵌入式实时操作系统ucos ii的分析,以51系列单片机为例,阐述了在单片机中使用该嵌入式操作系统的优 ...

  2. 用C语言写ucos中断服务程序,在ARM处理器上移植uCOS II的中断处理

    uCOS II是一个源码公开.可移植.可固化.可剪裁和抢占式的实时多任务操作系统,其大部分源码是用ANSI C编写,与处理器硬件相关的部分使用汇编语言编写.总量约200行的汇编语言部分被压缩到最低限度 ...

  3. lwip协议栈在linux运行,LwIP协议栈在uCOS II下的实现

    1.概述: LwIP协议栈在设计时就考虑到了将来的移植问题,因此把所有与硬件.OS.编译器相关的部份独立出来,放在ucosii&LwIPsource etlwiparch目录下.因此LwIP在 ...

  4. UCOS II移植到STM32F103开发板

    早期嵌入式开发没有嵌入式操作系统的概念 ,直接操作裸机,在裸机上写程序,比如用51单片机基本就没有操作系统的概念.通常把程序分为两部分:前台系统和后台系统. 简单的小系统通常是前后台系统,这样的程序包 ...

  5. ucos II任务管理之一:挂起任务

    Ucos II 任务管理之一 创建好了任务之后,就已经初步跨进了ucos II 的编程了.随着进一步的编程,发现学会创建了任务还是不够的. 在我的项目里,需要实现485通信功能,我创建了任务1用于串口 ...

  6. ucos II任务管理之三:删除任务

    ucos II任务管理之三:删除任务 有了前面的经历之后,mcu21决定全面地学习了任务的管理.这样在项目编程中才能做到"信手拈来". 在ucos II 里,创建一个任务之后,可以 ...

  7. ucos II 创建第一个任务之一

    Ucos II创建第一个任务 我们已经从远处欣赏过ucos II 的身材,现在可以近距离地欣赏Ucos II性感的局部了. 任务是什么? 有一句话:CPU不同的时刻段总是在执行着优先级最高的任务.所以 ...

  8. 基于STM32的简易示波器的UCOS II嵌入式实时操作系统实现

    基于STM32的简易示波器的UCOS II嵌入式实时操作系统实现 在基于STM32的示波器的实现的基础上,在STM32上移植UCOS II嵌入式实时操作系统. 在UCOS II操作系统中将各个功能分发 ...

  9. ucos ii堆栈大小检测

    在使用ucos ii时经常会有疑问,这个堆栈该给多大,虽然ucos ii 自带了任务堆栈检测,但是我觉得太麻烦了,而且还会占用资源,我投机取巧的使用内存是否为0来判断堆栈是否使用过,进而检测出堆栈的最 ...

  10. IAR中移植UCOS II系统以及sourceInsight 使用

    ucos 学习笔记 1 sourceInsight 使用 CSDN参考链接 新建工程 第一步:project中new project 第二步:在高亮部分输入工程的地址,工程文件夹与IAR工程文件夹放在 ...

最新文章

  1. Python 日期时间函数
  2. Py之wxPython:wxPython的简介、安装、使用方法之详细攻略
  3. Oracle Enterprise Linux
  4. SAP CRM WebClient UI Excel Export的运行时执行明细
  5. python模块之hashlib加密
  6. Istio 庖丁解牛六:多集群网格应用场景
  7. 大数据系统和分析技术综述(引用最多)
  8. 第十一章:WebSocket
  9. 线性代数mit18.06读课本-D1-1.1
  10. 基于matlab使用Windrose函数绘制风矢量分布图(风玫瑰图)
  11. css如何实现自动换行,CSS实现自动换行的方法
  12. 计算机组成原理 全加器实验
  13. 吃握手包的电子宠物 - Pwnagotchi开箱教程
  14. 变上限积分的连续性和可导性
  15. wnmp的php会自动挂掉,初探wnmp php
  16. 走楼梯1步一阶,一步两阶
  17. 最浪漫的程序员表白代码打动美人心
  18. 【python】生成随机n位数字与字母组合(创建随机)
  19. 君子签亮相2021中国互联网峰会,区块链电子签约赋能26家机构现场签约
  20. 在word文档中如何自动生成目录,两种方法制作目录,总有一种适合你

热门文章

  1. 从集合中查找最值得方法——max(),min(),nlargest(),nsmallest()
  2. input 中的autoComplete属性
  3. 数人云牵手红帽Ansible:七大最佳实践解锁DevOps落地姿势
  4. 午夜十分之凌晨三点半
  5. 《易学C++(第2版)》——导读
  6. vlc android 移植版编译
  7. 【VLC-Android】vlc-android简例
  8. VCard 通信薄格式说明
  9. python字符串的特点_python小白之路(特性语法三之字符串)
  10. REST架构下,浏览器怎么发送put与delete请求?