精华内容
下载资源
问答
  • Freertos学习--初识任务函数

    千次阅读 2013-08-13 14:21:06
    先来认识一下Freertos任务函数,看看这个系统是怎么操作任务的。(以下例子大部分来自网络) 1.任务创建 signed portBASE_TYPE xTaskCreate( pdTASK_CODE pvTaskCode, --指向任务的入口函数 const signed p

          FreeRTOS泛泛看了很多相关文章,有点头绪,除了不太喜欢其变量的名字,其他的倒还可以接受。先来认识一下Freertos任务函数,看看这个系统是怎么操作任务的。(以下例子大部分来自网络)

     

        1.任务创建

        signed portBASE_TYPE xTaskCreate(

        pdTASK_CODE pvTaskCode, --指向任务的入口函数

        const signed portCHAR * const pcName, --任务的名字

        unsigned portSHORT usStackDepth, --指定任务堆栈的大小 ,堆栈能保护变量的数目-

        void *pvParameters, --指针用于作为一个参数传向创建的任务

        unsigned portBASE_TYPE uxPriority, --任务的优先级

        xTaskHandle *pxCreatedTask )--用于传递一个处理

     

       例子:

        xTaskCreate( StarTask , ( signed portCHAR * ) "StarTask ", 128, NULL, tskIDLE_PRIORITY, NULL );

        我们先按任务创建函数设定好任务的入口名字StarTask ,任务名字StarTask ,堆栈大小128,优先级等,然后编写我们任务StarTask 的内容,下面就是任务StarTask函数:

        void StarTask (void *pvParameter)

        {}

      

        2.任务删除

           void vTaskDelete( xTaskHandle pxTaskToDelete )

           例子:

            void vOtherFunction( void )

         {

          xTaskHandle xHandle;

         // 创建任务,存储处理

         xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );

         // 使用处理来删除任务. 

         vTaskDelete( xHandle );

          }

           注:INCLUDE_vTaskDelete必须定义为1,这个函数才能可用

       3.任务延时

       void vTaskDelay( portTickType xTicksToDelay );

           例子:

            const portTickType xDelay = 1000/ portTICK_RATE_MS;

     注:INCLUDE_vTaskDelay必须设置为1,这个函数才为可用。

     

        4.任务延时--延时一个任务到指定时间

            void vTaskDelayUntil(

             portTickType *pxPreviousWakeTime, --指定一个变量来掌握任务最后开启的时间,                                  这个变量在第一次使用中(参考下面的例子)必须                                    使用当前时间来初始化

             portTickType xTimeIncrement );--循环周期时间。任务将在一定时间开启                               (*pxPreviousWakeTime + xTimeIncrement)

            例子:

      void vTaskFunction( void * pvParameters )

          注:INCLUDE_vTaskDelayUntil 必须定义为1,此函数才能用。

          5.获取任务优先级

         unsigned portBASE_TYPE uxTaskPriorityGet( xTaskHandle pxTask );

        7.任务挂起或暂停

            void vTaskSuspend(

            xTaskHandle pxTaskToSuspend ); --处理需要挂起的任务。传递NULL将挂起调用此函数的任务。

     

        例子:

     void vAFunction( void )

     {

     xTaskHandle xHandle;

         // 创建任务,保存句柄

         xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );

         // ...

         // 使用此句柄来挂起创建的任务

         vTaskSuspend( xHandle );

         // ...

         // 创建的任务不会在这期间运行,除非

         // 其他任务调用 vTaskResume( xHandle )

         //...

         // 挂起自己

         vTaskSuspend( NULL );

         // 不能运行到这里,除非另一个任务调用vTaskResume

      }

     

    注:设置INCLUDE_vTaskSuspend 为1,此函数才能使用。

       8.任务恢复

      void vTaskResume( xTaskHandle pxTaskToResume );

        9.启动内核

            void vTaskStartScheduler( void );

           必须是调用 vTaskSuspend () 后挂起的任务,才有可能通过调用 vTaskResume ()重新运行。

         

         例子:

     

    注:设置INCLUDE_vTaskSuspend为1,此函数才能使用。

     void vAFunction( void )

     {

        xTaskHandle xHandle;

         // 创建任务,保存句柄

         xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );

         // ...

         // 使用此句柄来挂起创建的任务

         vTaskSuspend( xHandle );

         // ...

         // 创建的任务不会在此期间运行,除

         // 另外一个任务调用 vTaskResume( xHandle )

         //...

         // 唤醒自己

         vTaskResume( xHandle );

      }

     

     

           例子:

     

          注:设置INCLUDE_vTaskPriorityGet 为1,此函数才能用。

     6.设置任务优先级

     

     

           void vTaskPrioritySet(

           xTaskHandle pxTask, --需要设置优先级的任务。当传递NULL,将设置调用任务的优先级

           unsigned portBASE_TYPE uxNewPriority );--任务需要设置的优先级

        例子: 

     void vAFunction( void )

     {

     xTaskHandle xHandle;

         // 创建任务,准备处理

         xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );

         // 使用其句柄来提高创建任务的优先级

         vTaskPrioritySet( xHandle, tskIDLE_PRIORITY + 1 );

         // 使用NULL处理,来提高优先级到同一个值

         vTaskPrioritySet( NULL, tskIDLE_PRIORITY + 1 );

     }

    注:设置INCLUDE_vTaskPrioritySet为1,才能使用此函数

     

     

     

     

     {

      portTickType xLastWakeTime;

      const portTickType xFrequency = 10;

     

         // 使用当前时间 初始化xLastWakeTime 变量

         xLastWakeTime = xTaskGetTickCount();

     

         for( ;; )

         {

             // 等待下一个循环

             vTaskDelayUntil( &xLastWakeTime, xFrequency );

              // 执行区域

         }

     }

     

           for( ;; )

         {

             /* 简单的每 500ms触发LED, .在每两次触发间挂起*/

             vONLED();

             vTaskDelay( xDelay );

         }

    xTicksToDelay 是指延时的时间片个数,

     void vAFunction( void )

     {

         xTaskHandle xHandle;

         // 创建任务,准备处理 

         xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );

     

     

         // / 使用 tskIDLE_PRIORITY创建, 但是可能改

     

         if( uxTaskPriorityGet( xHandle ) != tskIDLE_PRIORITY )

         {

             // 任务已经改变了其优先级

         }

      }

    展开全文
  • 最近刚刚学习ucosii,到了恢复任务函数OSTaskResume()的时候查了一些人的理解,感觉没有到点子上,现在我按自己的理解过一遍,先上代码: #if OS_TASK_SUSPEND_EN > 0 INT8U OSTaskResume (INT8U prio) { OS_TCB ...

    最近刚刚学习ucosii,到了恢复任务函数OSTaskResume()的时候查了一些人的理解,感觉没有到点子上,现在我按自己的理解过一遍,先上代码:

    <pre name="code" class="cpp">#if OS_TASK_SUSPEND_EN > 0
    INT8U  OSTaskResume (INT8U prio)
    {
        OS_TCB    *ptcb;
    #if OS_CRITICAL_METHOD == 3                                   /* Storage for CPU status register       */
        OS_CPU_SR  cpu_sr = 0;
    #endif
    
    
    
    #if OS_ARG_CHK_EN > 0
        if (prio >= OS_LOWEST_PRIO) {                             /* Make sure task priority is valid      */
            return (OS_ERR_PRIO_INVALID);
        }
    #endif
        OS_ENTER_CRITICAL();
        ptcb = OSTCBPrioTbl[prio];
        if (ptcb == (OS_TCB *)0) {                                /* Task to suspend must exist            */
            OS_EXIT_CRITICAL();
            return (OS_ERR_TASK_RESUME_PRIO);
        }
        if (ptcb == OS_TCB_RESERVED) {                            /* See if assigned to Mutex              */
            OS_EXIT_CRITICAL();
            return (OS_ERR_TASK_NOT_EXIST);
        }
        if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) != OS_STAT_RDY) { /* Task must be suspended                */
            ptcb->OSTCBStat &= ~(INT8U)OS_STAT_SUSPEND;           /* Remove suspension                     */
            if (ptcb->OSTCBStat == OS_STAT_RDY) {                 /* See if task is now ready              */
                if (ptcb->OSTCBDly == 0) {
                    OSRdyGrp               |= ptcb->OSTCBBitY;    /* Yes, Make task ready to run           */
                    OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
                    OS_EXIT_CRITICAL();
                    if (OSRunning == OS_TRUE) {
                        OS_Sched();                               /* Find new highest priority task        */
                    }
                } else {
                    OS_EXIT_CRITICAL();
                }
            } else {                                              /* Must be pending on event              */
                OS_EXIT_CRITICAL();
            }
            return (OS_ERR_NONE);
        }
        OS_EXIT_CRITICAL();
        return (OS_ERR_TASK_NOT_SUSPENDED);<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">} </span><span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">#endif</span>


    
    
    其实这个函数的核心功能就是这一段:
    if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) != OS_STAT_RDY) { /* Task must be suspended                */
            ptcb->OSTCBStat &= ~(INT8U)OS_STAT_SUSPEND;           /* Remove suspension                     */
            if (ptcb->OSTCBStat == OS_STAT_RDY) {                 /* See if task is now ready              */
                if (ptcb->OSTCBDly == 0) {
                    OSRdyGrp               |= ptcb->OSTCBBitY;    /* Yes, Make task ready to run           */
                    OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
                    OS_EXIT_CRITICAL();
                    if (OSRunning == OS_TRUE) {
                        OS_Sched();                               /* Find new highest priority task        */
                    }
    </pre><pre name="code" class="cpp" style="font-size: 18px; font-weight: bold;">也就是:判断这个任务是否被挂起——>取消任务在控制块中挂起的记录——>恢复任务就绪表——>调用任务调度器OS_Sched()进行一次任务调度——>返回。
    其余的主要是判断任务的优先级别是否合法,任务是否存在等等,下图是函数OSTaskResume()的流程图:<span style="font-family: Arial, Helvetica, sans-serif;">说到底ucosii的内核就是用C语言写的,无非就是比我们常见的C语言程序多了些指针、结构体,以及命明比较复杂,但是仔细看还是那些语法,先从大概方向判断要干什么,然后从每条语句看其所要表达的意思,就是这么简单。</span>

    
    
    
    展开全文
  • FreeRTOSi学习浅解之二-任务函数

    千次阅读 2013-03-19 09:37:00
    任务调度器: ...任务函数 void ATaskFunction( void *pvParameters ); 创建任务 portBASE_TYPE xTaskCreate( pdTASK_CODE pvTaskCode, const signed portCHAR * const pcName, unsigned portSHORT usSta

    任务调度器:

    vTaskStartScheduler();

    任务函数

    void ATaskFunction( void *pvParameters );

    创建任务

    portBASE_TYPE xTaskCreate( pdTASK_CODE pvTaskCode, const signed portCHAR * const pcName, unsigned portSHORT usStackDepth,void *pvParameters, unsigned portBASE_TYPE uxProiority, xTaxkHandle *pxCreateTask );

    使用任务参数:

    void vTaskFunction( void * pvParameters );

    任务优先级:

    vTaskPrioritySet()

    configMAX_PRIORITIES最多可具有的优先级数目。

    心跳中断

    configTICK_RATE_HZ中断频率

    portTICK_RATE_MS毫秒值

    挂起状态:

    vTaskSuspend();

    vTaskResumeFromISR()从挂 起状态到唤醒

    阻塞态实现延迟:

    void vTaskDelay( portTickType xTicksToDelay );

    void vTaskDelayUntil(portTickType * pxPreviousWakeTime, portTickType xTimeIncrement);

    空闲钩子函数:

    configUSE_IDLE_HOOK 1

    void vApplicationIdleHook(void)

    改变任务优先级:

    void vTaskPrioritySet( xTaskHandle pxTask, unsigned portBASE_TYPE uxNewPriority );

    查询一个任务的优先级:

    unsigned portBASE_TYPE uxTaskPriorityGet( xTaskHandle pxTask );

    删除任务:

    void vTaskDelete( xTaskHandle pxTaskToDelete );




    展开全文
  • 创建任务函数有两个:OSTaskCreate和OSTaskCreateExt。 OSTaskCreate有4个参数。 OSTaskCreateExt在OSTaskCreate基础上增加了一些功能参数,有9个参数。其中4个参数和OSTaskCreate一样。 这里就只讲解...

    创建任务函数有两个:OSTaskCreate和OSTaskCreateExt。

    OSTaskCreate有4个参数。

    OSTaskCreateExt在OSTaskCreate基础上增加了一些功能参数,有9个参数。其中4个参数和OSTaskCreate一样。

    这里就只讲解OSTaskCreateExt。
    #if OS_TASK_CREATE_EXT_EN > 0u //选通开关
    INT8U  OSTaskCreateExt (void   (*task)(void *p_arg),//函数指针
                            void    *p_arg, //任意类型指针
                            OS_STK  *ptos, //栈顶指针
                            INT8U    prio, //优先级
                            INT16U   id, //任务ID
                            OS_STK  *pbos, //栈底指针
                            INT32U   stk_size,//任务堆栈大小
                            void    *pext, //指向用户提供的内存
                            INT16U   opt) //用户操作选项参数
    {
        OS_STK    *psp;
        INT8U      err;
    #if OS_CRITICAL_METHOD == 3u                 /* Allocate storage for CPU status register               */
        OS_CPU_SR  cpu_sr = 0u;
    #endif

    1.task 指向函数的指针,传递的是一个函数

    在main函数中调用OSTaskCreateExt传递的参数是"start_task",就是应用程序的名字。


    2.p_arg

    传递参数的指针,是一个任意类型的参数。当我们需要传递某些参数给函数时,可以通过该参数进行传递。

    在main函数中调用OSTaskCreateExt传递的参数是"(void*)0",就是传递一个"空指针"给函数(没有参数,就传递一个空指针)。


    3.ptos

    指向任务堆栈栈顶指针。

    这个参数和第六个参数pbos对应,根据栈的增长方向"OS_STK_GROWTH"来决定。具体见os_cpu.h文件54行中OS_STK_GROWTH的宏定义,

    //定义栈的增长方向.
    //CM3中,栈是由高地址向低地址增长的,所以OS_STK_GROWTH设置为1
    #define  OS_STK_GROWTH        1      /* Stack grows from HIGH to LOW memory on ARM    */

    我们定义栈的增长方向为从高地址往低地址增长,因此,在main函数中调用OSTaskCreateExt我们传递的参数是"START_TASK_STK[TaskStkLengh-1]",

    也就是栈的高地址为栈顶。


    4.prio

    优先级唯一,优先级决定该任务指向的优先权利(值越小,优先级越高)。


    5.ID

    任务的ID

    给每一个创建的任务分配一个ID编号,相当于一篇文章的每章节号。

    我们在创建的任务中以"优先级"作为编号,所以在参数中,可以看到连续两个参数都是优先级。


    6.pbos

    指向栈底的指针。

    这个参数和第3个参数ptos类似和栈的增长方向有关。

    根据栈的增长方向#define  OS_STK_GROWTH        1 是从高地址往低地址增长,在main函数调用OSTaskCreateExt中传递的参数是START_TASK_STK[0]。


    7.stk_size

    任务堆栈大小。

    这个参数与app_cfg.h文件中定义的"堆栈变量"有关,我们需要传递的大小就是堆栈数组的大小值。


    8.pext

    指向用户提供的内存(指针)。

    这个参数用作TCB扩展的参数。


    9.opt

    用户操作选项参数

    这个参数用户创建任务时需要处理一些额外信息(操作)的参数。在注解中opt参数主要有三个

    *                        OS_TASK_OPT_STK_CHK      Stack checking to be allowed for the task检测参数是否可用
    *                        OS_TASK_OPT_STK_CLR      Clear the stack when the task is created清除堆栈(创建任务时清除堆栈)
    *                        OS_TASK_OPT_SAVE_FP      If the CPU has floating-point registers, save them(保存浮点指针)
    *                                                 during a context switch.(进行上下文切换时)

    参数是宏定义在ucos_ii.h中,210--213行:

    #define  OS_TASK_OPT_NONE          0x0000u  /* NO option selected无操作选项                             */
    #define  OS_TASK_OPT_STK_CHK       0x0001u  /* Enable stack checking for the task使能参数检查            */
    #define  OS_TASK_OPT_STK_CLR       0x0002u  /* Clear the stack when the task is create使能清除堆栈         */
    #define  OS_TASK_OPT_SAVE_FP       0x0004u  /* Save the contents of any floating-point registers使能保存浮点指针*/

    就是调用了某一个宏定义,那个宏定义的功能就使能了。

    在main函数中调用OSTaskCreateExt传递的参数是"OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR",进行参数检查和堆栈清除。


    3.创建任务时的堆栈

    #if OS_TASK_CREATE_EXT_EN > 0u
    INT8U  OSTaskCreateExt (void   (*task)(void *p_arg),
                            void    *p_arg,
                            OS_STK  *ptos,
                            INT8U    prio,
                            INT16U   id,
                            OS_STK  *pbos,
                            INT32U   stk_size,
                            void    *pext,
                            INT16U   opt)
    {
        OS_STK    *psp;
        INT8U      err;
    #if OS_CRITICAL_METHOD == 3u                 /* Allocate storage for CPU status register               */
        OS_CPU_SR  cpu_sr = 0u;
    #endif






    #ifdef OS_SAFETY_CRITICAL_IEC61508
        if (OSSafetyCriticalStartFlag == OS_TRUE) {
            OS_SAFETY_CRITICAL_EXCEPTION();
        }
    #endif


    #if OS_ARG_CHK_EN > 0u
        if (prio > OS_LOWEST_PRIO) {             /* Make sure priority is within allowable range 确保优先级在指定范围内*/
            return (OS_ERR_PRIO_INVALID);
        }
    #endif
        OS_ENTER_CRITICAL();
        if (OSIntNesting > 0u) {                 /* Make sure we don't create the task from within an ISR确保我们不会从ISR中创建任务*/
            OS_EXIT_CRITICAL();
            return (OS_ERR_TASK_CREATE_ISR);
        }
        if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { /* Make sure task doesn't already exist at this priority确保任务优先级未被使用*/
            OSTCBPrioTbl[prio] = OS_TCB_RESERVED;/* Reserve the priority to prevent others from doing ...保留这个优先级,*/
                                                 /* ... the same thing until task is created.防止再次创建相同优先级的任务*/
            OS_EXIT_CRITICAL();


    #if (OS_TASK_STAT_STK_CHK_EN > 0u)
            OS_TaskStkClr(pbos, stk_size, opt);                    /* Clear the task stack (if needed)清除使用到的堆栈*/
    #endif


            psp = OSTaskStkInit(task, p_arg, ptos, opt);           /* Initialize the task's stack初始化任务堆栈*/
            err = OS_TCBInit(prio, psp, pbos, id, stk_size, pext, opt);
            if (err == OS_ERR_NONE) {
                if (OSRunning == OS_TRUE) {                        /* Find HPT if multitasking has started如果多任务已经开始,找到HPT使其运行*/
                    OS_Sched();
                }
            } else { //创建TCB不成功
                OS_ENTER_CRITICAL();
                OSTCBPrioTbl[prio] = (OS_TCB *)0;                  /* Make this priority avail. to others使这个优先级有效,留给其他任务使用*/
                OS_EXIT_CRITICAL();
            }
            return (err);
        }
        OS_EXIT_CRITICAL();
        return (OS_ERR_PRIO_EXIST);
    }
    #endif

    (1)OS_TaskStkClr

    创建任务时清除堆栈。

    这个函数需要在os_cfg.h中使能OS_TASK_STAT_STK_CHK_EN这个参数。

    清除堆栈的顺序与栈的增长方向有关。看到源代码可以理解为清除堆栈,就是初始化时情况一下堆栈空间。

    (2)OSTaskInit

    初始化创建任务的堆栈。

    这个函数位于os_cpu_c.c文件中,这个函数主要的参数是"ptos"栈顶,我们需要分配并保存堆栈。





    展开全文
  • 结束任务函数 Endtask function

    千次阅读 2005-10-19 16:28:00
    结束任务函数BOOL STDCALL EndTask (HWND hWnd, BOOL fShutDown, BOOL fForce) BOOL WINAPI EndTask( HWND hwnd, BOOL fShutdown, BOOL fForce){参数Hwnd为要关闭的窗口 若是单线程窗口则线程被结束 进程随之...
  • 进程池 apply_async里任务函数不执行

    千次阅读 2019-06-21 21:22:26
    这个问题搞了很久,除了网上大神们说的参数后面必须加逗号之外还有队列,原来redis对象也不能写在init初始化方法里面,不知道什么原因,写在外面,进程池ok,任务开始执行。还望解惑,谢谢 redis_conn_1 = ...
  • 用户可以通过传递任务地址和其它参数到以下两个函数之一来建立任务:OSTaskCreate() 或 OSTaskCreateExt()。OSTaskCreate()与μC/OS是向下兼容的,OSTaskCreateExt()是OSTaskCreate()的扩展版本,提供了一些附加的...
  • 有时候,如果任务A拥有内存缓冲区或信号量之类的资源,而任务B想删除该任务,这些资源就可能由于没被释放而丢失。在这种情况下,用户可以想法子让拥有这些资源的任务在使用完资源后,先释放资源,再删除自己。用户...
  • a) 它的任务控制块从OSTCBList链表中移到OSTCBFreeList,这样时钟节拍函数中就不会处理它了,这样调度把它置入就绪表的可能性就没了; b) 如果它已经处于就绪表中,那么它将被移出,这样调度器函数就不会处理它,...
  • OSTaskDelReq()--请求删除任务函数

    千次阅读 2012-06-25 19:51:42
    本文就该函数做了细致,深入的解答。并借用网友的例子和邵贝贝书上的例子,讲解了一般的问题和常用的用法。带了自己的感想和思考。希望对自己有帮助。做此记录。 在ucos中这个函数很常用,个人觉着,使用OSTaskDel,...
  • 一心就想着源程序里的那些信号量,邮箱什么的,怎么给他用上,实际中是不是根本不用考虑他们的,信号量这个东西自己用一个全局变量是不是也能达到同样效果
  • FreeRTOS任务API函数的使用

    千次阅读 2017-08-27 18:01:41
    FreeRTOS 任务函数API
  • 任务函数

    2019-09-15 19:28:45
    task 和 function 说明语句分别用来定义任务函数,利用任务函数可以把函数模块分成许多小的任务函数便于理解和调试。任务函数往往还是大的程序模块在不同地点多次用到的相同的程序段。输入、输出和总线信号...
  • FreeRTOS任务延时函数

    千次阅读 2019-03-01 00:04:33
    系统提供了两个任务延时函数:相对延时函数vTaskDelay()和绝对延时函数vTaskDelayUntil() 相对延时是指:vTaskDelay()开始执行到退出执行的时间固定 /* 相对延时函数 */ void vTaskDelay(const TickType_t ...
  • 系统任务4.1 显示任务4.1.1 display和write任务4.1.2 strobe监控4.1.3 连续监控4.2 文件I/O任务函数4.2.1 打开文件和关闭文件4.2.2 文件输出4.2.3 数据转换为字符串4.2.4 读取文件内容4.2.5 文件I/O错误状态4.2.6 ...
  • 任务函数

    千次阅读 2017-02-04 17:07:52
    任务函数具备将重复性语句聚合起来的能力,类似于C语言的子程序。VerilogHDL中的task和function是可综合的,不过综合出来的都是组合电路。 一、 任务(task)语句 任务就是一段封装在“task……endtask”之间的...
  • 1.1、空闲任务: 空闲任务特点: 1、空闲任务是UCOSIII创建的第一个任务。 2、空闲任务是UCOSIII必须创建...时钟节拍任务用来跟踪任务延时和任务等待超时,任务函数为OS_TickTask(),是UCOSIII必须创建的一个任务...
  • 回归任务损失函数

    千次阅读 2019-03-05 11:10:29
    “损失函数”是机器学习优化中至关重要的一部分。L1、L2损失函数相信大多数人都早已不陌生。那你了解Huber损失、Log-Cosh损失、以及常用于计算预测区间的分位数损失么?这些可都是机器学习大牛最常用的回归损失函数...
  • ucos 任务延时函数

    千次阅读 2017-01-09 15:41:17
    在ucos里,系统也提供了这样的延时函数,一个是大众版本OSTimeDly(),一个是精致版本的...这两个函数有着非常重要的作用,就是当你调用这两个函数的时候,ucos会进行一次任务调度,所以CPU能在各任务间进
  • verilog中的任务函数

    千次阅读 2019-05-01 15:30:21
    目录 ...3.系统函数和系统任务 3.1显示任务 3.1.1显示和写任务(display and write) 3.1.2选通任务strobe 3.1.3 监控任务monitor 3.2文件输入输出任务 3.2.1文件的打开和关闭 3.2.2输出到...
  • 1) 建立任务函数 如果想让 UCOSII 管理用户的任务,必须先建立任务。 UCOSII 提供了我们 2 个建立任 务的函数: OSTaskCreat 和 OSTaskCreatExt,我们一般用 OSTaskCreat 函数来创建任务, 该函数原型为: ...
  • FreeRTOS 任务应用函数FreeRTOS 任务应用函数获取任务系统状态函数描述参数描述返回值用法举例获取当前任务句柄函数描述返回值获取空闲任务句柄函数描述返回值获取任务堆栈最大使用深度函数描述参数描述返回值用法...
  • 一、必须创建任务函数 空闲任务 特点: (1)、空闲任务是UCOSIII创建的第一个任务。 (2)、空闲任务是UCOSIII必须创建的。 (3)、空闲任务优先级总是为OS_CFG_PRIO_MAK-1。 (4)、空闲任务中不能调用任何...
  • 任务创建函数OSTaskCreate解析

    千次阅读 2012-12-31 11:31:23
    任务创建函数有两种,一种是基本的创建函数OSTaskCreate,另一种是扩展的任务创建函数OSTaskCreateExt。两个函数都实现了任务的创建,但是OSTaskCreateExt的功能更强,带有很多附加的功能,如果不需要附加功能,...
  • 任务——损失函数

    万次阅读 2018-08-02 22:41:21
    《Multi-Task Learning Using ...创新点:之前的损失函数是根据不同任务的权重参数计算得来,这些权重的设置是困难的,而且需要花费大量时间和精力去进行验证,在实践中多任务学习望而却步。作者提出了一种考虑hom...
  • Ucos II 任务延时函数

    2017-08-22 15:39:05
    Ucos II 任务延时函数  编写过单片机程序的都知道,延时函数是经常被用到的。  在ucos II 里,系统也提供了这样的延时函数。一个是大众版的OSTimeDly(),一个是精致版的OSTimeDlyHMSM()。 萝卜青菜,各有所爱...
  • UCOS-II任务堆栈初始化函数移植

    千次阅读 2013-08-03 18:41:53
    http://blog.sina.com.cn/s/blog_6d589a300100nc3n.html### (2010-10-20 16:34:40) 转载▼ ...UCOS-II的在建立任务函数中要对新建任务的堆栈进行初始化。堆栈初始化函数原型是: OS_STK *OSTaskStkInit (vo
  • FreeRTOS系列第12篇---FreeRTOS任务应用函数

    万次阅读 多人点赞 2016-01-11 17:15:59
    任务应用函数是一组辅助类函数,一般用于调试信息输出、获取任务句柄、获取任务状态、操作任务标签值等等。1.获取任务系统状态1.1函数描述 UBaseType_t uxTaskGetSystemState( TaskStatus_t * ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,657
精华内容 16,262
关键字:

任务函数