OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2947|回复: 0

ucosIII 任务管理

[复制链接]

25

主题

70

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
370
金钱
370
注册时间
2017-8-3
在线时间
38 小时
发表于 2018-8-22 15:06:03 | 显示全部楼层 |阅读模式
本帖最后由 xie112 于 2018-8-22 16:51 编辑

  • 一个任务也称作一个线程,就是一个简单的程序,可以认为其独享中央处理器CPU。实际上,在只有一个CPU时,任何时刻只有一个任务能够得到执行。
  • uc/osIII允许应用程序有任意多个任务,任务的最大数目仅仅受限于存储器容量。
  • 多任务管理其实就是在多个任务间调度和切换CPU使用权的过程。
  • 任务的类型有两种:运行至完成型和无线循环型。在多数嵌入式系统设计中,任务采用无线循环型。一个运行至完成型的任务必须通过调用OSTaskDel函数来删除自己。另外任务与C函数不同在于,任务不允许返回和一般写成无限循环。
  • 实现任务无线循环方式:while(1)或者for(;;),在无限循环类型的任务中必须调用uc/os服务函数,使得任务进入等待某个事件的状态。
  • 典型的键盘使用:键盘扫描任务应当只是缓存所按按键的标识符,然后由另外一个任务决定如何处理。
  • 在任务等待某个事件时,不会占用CPU时间。
  • 每个任务都有属于自己的一套CPU寄存器,都可以认为其独自占有CPU。
  • UC/os是一个可剥夺型的内核,所以每个任务必须有自己的栈空间,任务栈空间永远位于RAM中,可用来保存局部变量、函数调用以及可能的ISR嵌套。
  • 栈空间可以静态和动态分配,当使用malloc函数动态分配时,如果平凡创建和删除任务,存储器会布满碎片,导致无法再使用存储器管理函数给栈分配空间。p_stk=(CPU_STK*)malloc(stk_size);//其中p_stk作为栈的基地址使用。
  • 单调执行率调度法RMS:根据任务执行的平凡程度分配任务优先级,执行频率最高的任务分配优先级最高。
  • 栈空间分配时,必须考虑任务调用函数的嵌套情况,局部变量的数目以及嵌套ISR对栈的需求,任务栈必须有足够的空间能够存储所有的CPU寄存器并且CPU有FPU的情况下,能够存储所有的FPU寄存器。作为嵌入式系统中一个通用原则不要使用递归调用。
  • 栈溢出很常见,会造成一些很奇怪的现象,因此在开发和测试产品中,要一只监视任务在运行时堆栈使用量。
  • 任务状态:休眠态,任务已经存在存储器中,但不受uc/os管理,要调用OSTaskCreate()创建之后才受系统管理。就绪态:当一个任务准备运行时候,进入就绪态,在就绪表中记录。运行态,任务正在运行,对于单核CPU,在任何时刻只有一个任务运行。等待态,等待某个事件的发生,此时任务会被放入与改任务所等待的事件所对应的等待表中。中断服务态,发生中断时,正在运行的任务被挂起,CPU开始执行中断服务子程序ISR。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-2 08:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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