任务创建函数OSTaskCreate解析

任务创建函数OSTaskCreate解析
任务是操作系统处理的⾸要对象,在多任务运⾏的环境中,任务的管理需要考虑多⽅⾯的因素,最基本的任务管理是任务的创建。任务创建函数有两种,⼀种是基本的创建函数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
从前⾯的代码的基本描述中,可以清晰的了解到任务创建的过程,⾸先,如果配置了对任务参数进⾏检查,则价差任务参数的有效性,尤其对任务的优先级进⾏判断。当任务的优先级在核实的范围时,还需要判断指定的优先级的任务是否已经被创建,因为优先级必须是唯⼀的。然后进⾏任务堆栈的初始化、任务控制块的初始化、根据系统是否已经启动了多任务,决定是否进⾏⼀次任务调度。

本文发布于:2024-09-22 05:40:37,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/154960.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:任务   创建   中断   函数   需要   基本
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议