STM32-UCOS学习笔记2

来源:互联网 发布:基金理财 知乎 编辑:程序博客网 时间:2024/04/28 19:33
UCOS-III任务管理 (上)
1、任务的基本概念
   在生活中我们对许多问题进行分而治之,这里就存在许多的大问题和小问题,小问题解决掉,大问题才能随之而解决,在这里小问题即是本次所说的小任务。
在我们设计复杂、大型程序的时候也是一样的,将这些负责的程序分割成许多个简单的小程序,这些小程序就是单
个的任务,所有的小任务和谐的工作,最终完成复杂的功能。在操作系统中这些小任务可以并发执行,从而提高CPU
使用效率。
UCOSIII就是一个可剥夺的多任务系统,我们使用UCOSIII的一个重要 的原因就是它的多任务处理能力。  
2、UCOSIII中的任务
  在UCOSIII中任务就是程序实体,UCOSIII能够管理和调度这些小任务。
  在UCOSIII中任务由三部分组成:任务堆栈、任务控制模块和任务函数。
  在此给出任务函数的模版
  void XX task(void *p_arg)
  {
     /* 任务处理 */
     while(1){}
  }
3、UCOSIII系统任务
  系统任务,即系统默认的的任务。

    1空闲任务UCOSIII创建的第一个任务,UCOSIII必须创建的任务,此任务有UCOSIII自动创建,不需要用户手动创建。

   2时钟节拍任务:此任务也是必须创建的任务。

   3统计任务:可选任务,用来统计CPU使用率和各个任务的堆栈使用量。此任务是可选任务,由宏OS_CFG_STAT_TASK_EN控制是否使用此任务。

   4定时任务:用来向用户提供定时服务,也是可选任务,由宏OS_CFG_TMR_EN控制是否使用此任务。

   5中断服务管理任务:可选任务,由宏OS_CFG_ISR_POST_DEFERRED_EN控制是否使用此任务。

    
                                      UCOS-III任务管理 (中)
1、任务堆栈的创建
  任务堆栈属于任务的重要组成部分,为了满足任务切换和响应中断时保存CPU寄存器中内容及任务调用其他函数时的需要,每个任务都应该有自己的堆栈。
  eg,#define START_STK_SIZE   512//堆栈大小512*4
    CPU_STK START_TASK_STK[START_STK_SIZE];
2、任务堆栈初始化
  把任务初始数据放到任务堆栈的工作即是任务堆栈的初始化,OSTaskStkInit()
3、UCOSIII任务就绪表
  优先级:UCOSIII中任务优先级数由宏OS_CFG_PRIO_MAX来配置,UCOSIII中数值越小,优先级越高,最低可用优先级即OS_CFG_PRIO_MAX-1。
  就绪表:OSPrioTb1[] OSRdyList[]
                                       UCOS-III任务管理 (下)
1、可剥夺型任务调度

  任务调度就是中止当前正在运行的任务转而去执行其他的任务。

       UCOSIII是可剥夺型内核,因此当一个高优先级的任务准备就绪,并且此时发生了任务调度,那么这个高优先级的任务就会获得CPU的使用权!

       UCOSIII中的任务调度是由任务调度器来完成的,任务调度器有2种:任务级调度器和中断级调度器

  任务级调度器为函数OSSched()

  中断级调度器为函数OSIntExit(),当退出外部中断服务函数的时候使用中断级任务调度。

2、任务切换

     UCOSIII需要切换到另外一个任务时,它将保存当前任务的现场到当前任务的堆栈中,主要是CPU寄存器值,然后恢复新的现场并且执行新的任务,这个过程就是任务切换。
 

  任务切换分为两种:任务级切换和中断级切换。

  任务级切换函数为:OSCtxSw()

  中断级切换函数为:OSIntCtxSw()

原创粉丝点击