ostaskdel函数_getreal函数

ostaskdel函数_getreal函数INT8U OSTaskCreate(void(*task)(void*pd),void*p_arg,OS_STK*ptos,INT8Uprio);函数返回一个8位的整型数,调用该函数需要四个参数。第一个参数一个指针,也就是用户代码的首地址,在平时使用中我们把自己创建的任务的名字作为这个参数就可以了;第三个参数是指向任务堆栈栈顶的指针,通常我们把创建的任务的堆栈数组的首地址给第…

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

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

INT8U  OSTaskCreate (void (*task)(void *pd), void *p_arg, OS_STK *ptos, INT8U prio)

;函数返回一个8位的整型数,调用该函数需要四个参数。第一个参数一个指针,也就是用户代码的首地址,在平时使用中我们把自己创建的任务的名字作为这个参数就可以了;第三个参数是指向任务堆栈栈顶的指针,通常我们把创建的任务的堆栈数组的首地址给第三个参数就可以了;第四个参数是任务的优先级;第二个参数是什么意思?还不太理解。

    OS_STK    *psp;
    INT8U      err;                                ;创建一个指向数据类型为OS_STK的指针和一个8位的整型数

#if OS_ARG_CHK_EN > 0
    if (prio > OS_LOWEST_PRIO) {             /* Make sure priority is within allowable range           */
        return (OS_PRIO_INVALID);
    }
#endif
;判断该任务的优先级是否有效

   OS_ENTER_CRITICAL();
    if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { /* Make sure task doesn’t already exist at this priority  */
        OSTCBPrioTbl[prio] = (OS_TCB *)1;    /* Reserve the priority to prevent others from doing …  */
                                             /* … the same thing until task is created.              */
        OS_EXIT_CRITICAL();                      ;判断该优先级是否被占用

;优先级未被占用,执行以下程序
        psp = (OS_STK *)OSTaskStkInit(task, p_arg, ptos, 0);     ;初始化堆栈
        err = OS_TCBInit(prio, psp, (OS_STK *)0, 0, 0, (void *)0, 0);   ;初始化任务控制块
        if (err == OS_NO_ERR) {

            OS_ENTER_CRITICAL();
            OSTaskCtr++;                                        /* Increment the #tasks counter        */
            OS_EXIT_CRITICAL();
            if (OSRunning == TRUE) {         /* Find highest priority task if multitasking has started */
                OS_Sched();                          ;此时OSRunning 等于假,也就是在创建任务的时候并不能引发任务调度仅                                                             ;仅是创建任务而已。
            }
        } else {                                         ;该优先级已经被占用,则只把该任务优先级释放掉
            OS_ENTER_CRITICAL();
            OSTCBPrioTbl[prio] = (OS_TCB *)0;/* Make this priority available to others                 */
            OS_EXIT_CRITICAL();
        }
        return (err);

    }
    OS_EXIT_CRITICAL();
    return (OS_PRIO_EXIST);
}
综上所述,创建任务时的主要工作是:第一,判断该优先级是否有效;第二判断该优先级是否被占用,若被占用则释放掉该优先级并返回OS_PRIO_EXIST;第三,若优先级未被占用,就初始化任务堆栈和任务控制块,初始化任务控制块返回正确信息时,将 OSTaskCtr加1;第四,判断OSRunning,为真就引发一次任务调度,为假则程序结束。

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/196761.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • MQ入门总结(一)消息队列概念和使用场景

    MQ入门总结(一)消息队列概念和使用场景

  • JAVA–Map集合详解

    JAVA–Map集合详解特点:该集合存储键(key)值(value)对,一对一对往里存,而且要保证键(key)的唯一性。Map集合和Set集合很像,其实Set集合底层就是使用了Map集合。什么时候使用Map集合:当数据之间存在映射关系时,优先考虑Map集合。Map集合常用共有方法1.添加Vput(Kkey,Vvalue):将指定的值与此映射中的指定键关联…

  • ES6数组去重的三个简单办法

    ES6数组去重的三个简单办法ES6数组去重的三个简单办法简单说一下利用ES6实现数组去重的三个办法。第一种:利用Map对象和数组的filter方法贴上相关代码打印后的结果通过打印我们发现,确实实现了我们想要的效果。那么下面简单来解释一下。1.Map对象是ES6提供的一个新的数据结构,其中has的办法是返回一个布尔值,表示某个值是否存在当前的Mp对象之中,set的办法是给Map对象设置key/value。2…

  • UTF-8编码占几个字节?

    UTF-8编码占几个字节?Blog:https://www.jsntian.com占2个字节的:带有附加符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母则需要二个字节编码占3个字节的:基本等同于GBK,含21000多个汉字占4个字节的:中日韩超大字符集里面的汉字,有5万多个一个utf8数字占1个字节一个utf8英文字母占1个字节少数是汉字每个占用3个字节,多数占用…

  • 上海淘财经网要道歉客户的信

    上海淘财经网要道歉客户的信

  • The Eigenvalues and Eigenvectors of Tridiagonal Toeplitz Matrix「建议收藏」

    The Eigenvalues and Eigenvectors of Tridiagonal Toeplitz Matrix「建议收藏」一般来说,我们都是先求一个矩阵的特征值,然后再求它的特征向量。但对于某种特殊的矩阵来说,先求特征向量反而更加方便,现在就让我们一起来看下吧!

发表回复

您的电子邮箱地址不会被公开。

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