美文网首页
UCOSIII_多任务创建(一)

UCOSIII_多任务创建(一)

作者: 飞向深空 | 来源:发表于2020-02-29 12:01 被阅读0次

UCOSIII是个多任务操作系统,对任务操作有创建、挂起、删除和调度等。

任务状态有:
休眠态:任务函数只是存储区的一段代码,不受UCOS控制
就绪态:任务在就绪表中已经登记,等待获取CPU使用权
运行态:任务正在运行
等待态:正在运行的任务需要等待某一个事件,像信号量、消息、事件标志组等,这时会暂时让出CPU使用权,进入等待状态
中断服务态:一个正在执行的任务被中断打断,CPU转而去执行中断服务程序,这时这个任务会被挂起,进入中断服务态

任务控制块OS_TCB:用来保存任务的信息,它是个结构体
任务堆栈CPU_STK:用来在切换任务和调用其它函数的时候保存现场,CPU_STK大小是4字节

创建一个任务需要定义控制块StartTaskTCB、优先级START_TASK_PRIO、堆栈START_TASK_STK[START_STK_SIZE]。
创建任务前需要初始化UCOSIII——OSInit(&err); err是接收错误时返回的错误码,用OS_ERR定义。
创建任务用OSTaskCreate(...)实现,创建好的任务直接进入就绪态。

   //任务优先级
#define START_TASK_PRIO     3
//任务堆栈大小    
#define START_STK_SIZE      512
//任务控制块
OS_TCB StartTaskTCB;
//任务堆栈  
CPU_STK START_TASK_STK[START_STK_SIZE];
//任务函数
void start_task(void *p_arg);

int main()
{   
    OS_ERR err;
    CPU_SR_ALLOC();

    
    OSInit(&err);       //初始化UCOSIII
    OS_CRITICAL_ENTER();    //进入临界区 
    //创建开始任务
    OSTaskCreate((OS_TCB    * )&StartTaskTCB,       //任务控制块
                 (CPU_CHAR  * )"start task",        //任务名字,自己起的
                 (OS_TASK_PTR )start_task,          //任务函数
                 (void      * )0,                   //传递给任务函数的参数
                 (OS_PRIO     )START_TASK_PRIO,     //任务优先级
                 (CPU_STK   * )&START_TASK_STK[0],  //任务堆栈基地址
                 (CPU_STK_SIZE)START_STK_SIZE/10,   //任务堆栈深度限位
                 (CPU_STK_SIZE)START_STK_SIZE,      //任务堆栈大小
                 (OS_MSG_QTY  )0,                   //任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息
                 (OS_TICK     )0,                   //当使能时间片轮转时的时间片长度,为0时为默认长度,
                 (void      * )0,                   //用户补充的存储区
                 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任务选项
                 (OS_ERR    * )&err);               //存放该函数错误时的返回值 
    OS_CRITICAL_EXIT(); //退出临界区  
    OSStart(&err);  //开启UCOSIII
}
  • 任务堆栈深度限位是指堆栈剩余量,当剩余量小于或等于该值表明堆栈快要用完,用来检测个确保堆栈不溢出
  • 没有参数传入函数传递给任务函数的参数就是0
  • 优先级数值越低,优先级越高,但不能使用系统任务的优先级()
  • 时间片长度在时间片轮转调度时使用,运行几个时间片就填几
  • OPT选项:
    OS_OPT_TASK_STK_CHK:检测任务堆栈
    OS_OPT_TASK_STK_CLR:清除任务堆栈
    OS_OPT_TASK_NONE:无选项
  • 最后要OSStart(&err); //开启UCOSIII
  • 进出临界区函数范围内的程序不会被打断
  • CPU_SR_ALLOC();是个宏定义了一个变量os_cpu_sr是用来存 cpu 状态寄存器用的,用到临界区这个宏必须声明

相关文章

  • UCOSIII_多任务创建(一)

    UCOSIII是个多任务操作系统,对任务操作有创建、挂起、删除和调度等。 任务状态有:休眠态:任务函数只是存储区的...

  • UCOSIII_多任务创建(二)

    任务调度和切换就是让就绪表中优先级最高的任务获得CPU使用权,UCOSIII是抢占式的,高优先级任务可以抢了低优先...

  • 2.系统编程--进程 11.23

    1.进程 1.1多任务的引入 单任务 1.2多任务 说明: ·程序执行到os.fork()时,操作系统会创建一个新...

  • 协程

    gevent方法实现多任务(协程) 了解yield和grenlet yield方法创建协程 greenlet方法创建协程

  • 简单了解进程、线程、协程

    当单任务不能满足工作的需要,只是需要使用多任务,多任务分为多进程,多线程,多协程 先有进程,进程创建线程,线程依附...

  • day13-linux运维-用户基础知识与权限

    创建一个新目录 硬链接的数量为什么是2? 一、用户相关基础 1. 单用户多任务: 2.多用户多任务: 3.用户的U...

  • 进程

    创建进程就是为了执行多任务代码 多任务就是操作系统可以同时运行多个任务 代码没有在运行的时候叫程序,代码在运行的时...

  • Python:进程

    多任务 概念,操作系统同时运行多个任务 fork(创建进程) 导入os模块 程序运行到os.fork时,系统会创建...

  • Python3简单实现多任务(多进程篇)

    python多进程实现多任务优点:稳定性高;提升程序执行效率 第一种:进程池快速创建(适合创建大量进程,简单,推荐...

  • 02Python学习笔记之二.七【多任务、fork、getp(p

    第1章节  多任务概念理解    第2章节  fork创建子进程 1-1 fork创建子进程—简单测试   ↑用v...

网友评论

      本文标题:UCOSIII_多任务创建(一)

      本文链接:https://www.haomeiwen.com/subject/ajeuhhtx.html