版本号 | 整理人 | 整理日期 | 备注 |
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是需要用到此静态链接,即程序静态的地址。