使用OSTaskCreate()建立一个任务后,该任务处于( )_worksheetfunction函数用法

使用OSTaskCreate()建立一个任务后,该任务处于( )_worksheetfunction函数用法任务是操作系统处理的首要对象,在多任务运行的环境中,任务的管理需要考虑多方面的因素,最基本的任务管理是任务的创建。任务创建函数有两种,一种是基本的创建函数OSTaskCreate,另一种是扩展的任务创建函数OSTaskCreateExt。两个函数都实现了任务的创建,但是OSTaskCreateExt的功能更强,带有很多附加的功能,如果不需要附加功能,OSTaskCreate是完全可以胜任的,没有哪

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

      任务是操作系统处理的首要对象,在多任务运行的环境中,任务的管理需要考虑多方面的因素,最基本的任务管理是任务的创建。任务创建函数有两种,一种是基本的创建函数OSTaskCreate,另一种是扩展的任务创建函数OSTaskCreateExt。两个函数都实现了任务的创建,但是OSTaskCreateExt的功能更强,带有很多附加的功能,如果不需要附加功能,OSTaskCreate是完全可以胜任的,没有哪一个更好之说,完全根据需要来选择。

       OSTaskCreate实现了最基本的任务创建功能,任务创建之后,就准备好了运行所需要的各种数据结构,函数源码如下:

         

#if OS_TASK_CREATE_EN > 0
INT8U  OSTaskCreate(void (*task)(void *p_arg),//任务代码的地址

                                      void *p_arg,//任务参数

                                       OS_STK *ptos,//任务堆栈栈顶指针

                                        INT8U prio)//任务的优先级
{

    OS_STK    *psp;     //定义一个指向任务堆栈的指针
    INT8U      err;        //错误号
#if OS_CRITICAL_METHOD == 3                  /* Allocate storage for CPU status register               */
    OS_CPU_SR  cpu_sr = 0;
#endif

 

#if OS_ARG_CHK_EN > 0   //是否进行参数检查
    if(prio > OS_LOWEST_PRIO)  /* 确保优先级在允许的范围内  */
   {           
        return (OS_ERR_PRIO_INVALID);      //无效的优先级
      }
#endif

    OS_ENTER_CRITICAL();    //保存全局中断标志,关中断

      if(OSIntNesting>0)      /* 不允许在中断服务子程序中调用任务创建函数,即中断服务子程序不能创建任务  */
     {                 
         OS_EXIT_CRITICAL(); //恢复全局中断标志
         return (OS_ERR_TASK_CREATE_ISR);
        }

      if(OSTCBPrioTbl[prio]==(OS_TCB *)0)  /*确保此优先级的任务不存在  */
      {
           OSTCBPrioTbl[prio]=OS_TCB_RESERVED;/* Reserve the priority to prevent others from doing …  */
                                              /* … the same thing until task is created.              */
           OS_EXIT_CRITICAL(); //恢复全局中断标志
           psp = OSTaskStkInit(task,p_arg,ptos,0);              /* 初始化任务的堆栈    */
           err = OS_TCBInit(prio,psp,(OS_STK *)0,0,0,(void *)0,0);//任务控制块的初始化
           if(err == OS_ERR_NONE)
       {

               if(OSRunning==OS_TRUE) //如果多任务已经启动,则执行一次任务调度
        {      /* Find highest priority task if multitasking has started */
                   OS_Sched();
                 }
             }
     else
       {

               OS_ENTER_CRITICAL();  //保存全局中断标志,关中断
               OSTCBPrioTbl[prio] = (OS_TCB *)0;/* 如果因为错误不能创建任务,重新将优先级指针表的对应项清零    */
               OS_EXIT_CRITICAL();   //恢复全局中断标志
             }
           return (err);
          }

    OS_EXIT_CRITICAL();   //恢复全局中断标志
    return (OS_ERR_PRIO_EXIST); //返回优先级已经占用的信息
}
#endif

       从前面的代码的基本描述中,可以清晰的了解到任务创建的过程,首先,如果配置了对任务参数进行检查,则价差任务参数的有效性,尤其对任务的优先级进行判断。当任务的优先级在核实的范围时,还需要判断指定的优先级的任务是否已经被创建,因为优先级必须是唯一的。然后进行任务堆栈的初始化、任务控制块的初始化、根据系统是否已经启动了多任务,决定是否进行一次任务调度。       

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196659.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python 平均值/MAX/MIN值 计算从入门到精通「建议收藏」

    python 平均值/MAX/MIN值 计算从入门到精通「建议收藏」##入门级计算####1、算数平均值#样本:S=[s1,s2,s3,…,sn]#算术平均值:m=(s1+s2+s3+…+sn)/nNumpy中的写法m=

    2022年7月6日
    24
  • Torchvision transforms 总结

    Torchvision transforms 总结一.torchvision.transformsTransfoms是很常用的图片变换方式,可以通过compose将各个变换串联起来**1.classtorchvision.transforms.Compose(transforms)**这个类将多个变换方式结合在一起参数:各个变换的实例对象举例:transforms.Compose([ transforms.Center…

    2022年6月24日
    47
  • python批量执行sql语句_python jdbc

    python批量执行sql语句_python jdbc一、前言在开发的过程中,总希望方法执行完了可以看到完整是sql语句,从而判断执行的是否正确,所以就希望有一个可以打印sql语句的插件。p6spy就是一款针对数据库访问操作的动态监控框架,他可以和数据库无缝截取和操纵,而不必对现有应该用程序的代码做任何修改。通过p6spy可以直接打印数据库执行的语句,下面向大家介绍一下p6spy。二、使用p6spy,需要什么?p6spy的ja…

    2022年9月1日
    8
  • 如何零基础自学java_Java零基础的自学经验

    如何零基础自学java_Java零基础的自学经验Java零基础的自学经验学习Java数学不好行不行?要到能自己开发小软件的水平要多久,入门需要看些什么材料啊,网上资料不是很好,培训又要花钱,新手零基础如何自学Java比较快速?下面是小编为大家整理的Java零基础自学经验,喜欢的可以收藏一下!下面分享新新人类的自学经验之谈:我学了2周了,已经入门了,基本代码都能看懂,看不懂的研究研究也就懂了。重点是要学好概念,概念搞清楚了,再找各种代码来练习,找…

    2022年6月20日
    35
  • iOS开发中touchesBegan和touchesEn…「建议收藏」

    iOS开发中touchesBegan和touchesEn…「建议收藏」touchesBegan跟touchedEnd沒有提供給UIScrollViewDelegate所以要自己建立一個繼承自UIScrollView的class重寫這兩個methodmyScrollView.h@interface myScrollView : UIScrollView @end myScrollView.m-(void) touchesBegan:(NSS

    2022年7月25日
    15
  • Activity工作流引擎学习笔记(二)

    Activity工作流引擎学习笔记(二)核心APIProcessEngine说明:1) 在Activiti中最核心的类,其他的类都是由他而来。2) 产生方式:在前面看到了两种创建ProcessEngine(流程引擎)的方式,而这里要简化很多,调用ProcessEngines的getDefaultProceeEngine方法时会自动加载classpath下名为activiti.cfg.xml文件。3) 可以产生R

    2022年7月11日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号