task相关函数的功能和用法

task相关函数的功能和用法
版本号
整理人
整理日期
备注
V1.0
胡军、王雪、张达蔚、
吴旻、张丽丽、白艳滨
2008-7-10
初稿(培训讨论后整理)
1. task_create (by HJ)
·原型:task_t* task_create(void (*Function)(void*),
                              void* Param风叶,
                              size_t StackSize,
                              int Priority,
                              const char* Name,
                              task_flags_t flags )
·
参数: void (*Function)(void*)
            指向任务函数的入口即函数名。
            void* 二氯丙醇Param
    提供给Function的入口参数,如果参数较多,可以组合成结够体,再提供此结构体的地址作为参数即可。
    size_t StackSize
    任务所用的栈的大小。
    int Priority
    创建任务的优先级。
    const char* Name
    任务的名称,主要是用来标示任务队列里的不同任务。
    task_flags_t flags
    关于任务的一些附加信息,一般定义为0,及标示为默认的行为具体如下表:
   
Task flags
Task behavior
Target
0
创建一个OS20的默认的task.
任何
task_flags_high_priority_process
创建一个高优先级的人进程 (ST20C1中被忽视).
ST20C2
task_flags_suspended
Create the task already suspended.
任何
·返回值:如果创建成功返回指向该结构体的指针,否则返回NULL
·功能描述:此函数为创建一个具有给定优先级的任务。
·应用举例:
                #include < stdio.h >
#include < stdlib.h >
#include < ostime.h >
#include < task.h >
#include < semaphor.h >
#define ONE_SECOND        100
#define USER_PRIORITY    1   
#define    USER_WS_SIZE    2048
struct sig_params
{
semaphore_t *Ready;
int        Count;
};
void    signal_task(void* p)
{
struct sig_params* Params = (struct sig_params*)p;
int j;
for (j = 0; j < Params->Count; j++)
{
          semaphore_signal (Params->Ready);
          task_delay(ONE_SECOND);
}
}
int    main()
{
task_t* Task;
struct sig_params params;
Task = task_create (signal_task, ¶ms,
USER_WS_SIZE, USER_PRIORITY, "Signal", 0);
if (Task == NULL)
    {
          printf ("Error : create. Unable to create task\n");
          exit (EXIT_FAILURE);
}
}
2. task_data (by HJ)
·原型:void* task_data( task_t* Task )
·参数:task_t* Task
            指向任务接构task_t的指针。
·返回值:返回任务的数据指针,如果任务为空则返回当前正在运行任务的数据指针。
·功能描述:此函数调用返回该任务的数据指针。
·应用举例:
                #include < stdio.h >
#include < stdlib.h >
#include < task.h >
#define running 1
#define USER_WS_SIZE  2048
#define USER_PRIORITY  2
task_t *Task1;
void task1 ( void )
{
while( running )
{         
task_data( task_t* task1)
          task_delay( 1000 );
    }
}
int main()
{   
小样机Task1 = task_create (( void ( * )( void* )) task1,
                              NULL,
                              USER_WS_SIZE,
                              USER_PRIORITY,
                              "low",
                              0);
      printf( "task1 is created!\n" );
if (  NULL ==  Task1 ) 
{
printf  ( "Error  : create.  Unable to  create    task\n" );
          exit ( EXIT_FAILURE );
}
      while( running )
      {
          task_delay( 1000 );
      }
}
3. task_data_set (by HJ)
·原型:void* task_data_set( task_t* Task, void* NewData )
·参数:task_t* Task
            指向任务结构task_t的指针。
            void* NewData
            新的指向数据的指针。
·返回值:返回该任务先前的(设置新的数据指针之前)数据指针,如果所设置的任务为空则返回正在运行的任务(此时数据指针已被跟新)之前的数据指针。
·功能描述:此函数设置任务的新的数据指针如果被设置的任务为空则设置当前正在运行的任务的数据指针。
·应用举例:
                #include < stdio.h >
#include < stdlib.h >
#include < task.h >
#define running 1
#define USER_WS_SIZE  2048
#define USER_PRIORITY  2
task_t *Task1;
void task1 ( void )
{
    while( running )
{         
    task_data_set(Task1, (void *)0x00000001 );
      task_delay( 1000 );
    }
}
int main()
{   
      Task1 = task_create (
          ( void ( * )( void* )) task1,
          NULL,
          USER_WS_SIZE,
          USER_PRIORITY,
          "low",
          0);
      printf( "task1 is created!\n" );
         
      if (  NULL == Task1 ) 
{
          printf  ( "Error  : create.  Unable to  create    task\n" );
          exit ( EXIT_FAILURE );
                    }   
      while( running )
      {
          task_delay( 1000 );
      }
}
4. task_context (by HJ)
·原型:task_context_t task_context( task_t **task,int* level )
钻夹头
·超高压食品参数:task_t **task
            返回的任务描述
            int* level
            返回的中断水平
·返回值:一个os20的任务,一个高优先级的进程还是一个中断。
·
功能描述: 该函数返回一个被调用上下文的描述,是否为一个任务,一个中断或者一个高优先级的进程,主要有下面三个值来表明:
                当为 OS20 task, 返回 task_context_task
当为 interrupt handler,返回 task_context_interrupt
当为high priority process 对于 ST20C2内核时, 返回task_context_hpp
需要说明的是,如果返回的task不为空则说明被调用的是一个os20的任务或者一个高优先级的进程,则相应的task_t信息被写入task所指向的内容,同样的如果level不为空则说明为一个中断,并且中断水平被写入level所指向的单元。
·应用举例:
                #include < stdio.h >
#include < stdlib.h >
#include < task.h >
#define running 1
#define USER_WS_SIZE  2048
#define USER_PRIORITY  2
task_t *Task1; 
int    *level;
task_context_t contxt; 
void task1 ( void )
{
while( running )
{         
        contxt=task_context(&Task1,level);
          task_delay( 1000 );
}
}
int main()
{   
Task1 = task_create (( void ( * )( void* )) task1,
                              NULL,
                              USER_WS_SIZE,
                              USER_PRIORITY,
                              "low",
                              0);
printf( "task1 is created!\n" );
if (  NULL ==  Task1 ) 
{
        printf  ( "Error  : create.  Unable to  create    task\n" );
        exit ( EXIT_FAILURE );
}
while( running )
        task_delay( 1000 );
}粘尘滚轮
}
5. task_create_sl (by HJ)
·原型:task_t* task_create_sl( void (*Function)(void*),
                              void* Param,
                              void* StaticLink,
                              size_t StackSize,
                              int Priority,
                              const char* Name,
                              task_flags_t flags );
·参数:void* StaticLink
            当调用Function是需要用到此静态链接,即程序静态的地址。

本文发布于:2024-09-21 21:58:26,感谢您对本站的认可!

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

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

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