//*******************************************************************
os_tsk_create()
#include <rtl.h>
OS_TID os_tsk_create (
void (*task)(void), /* Task to create建立任务 */
U8 priority ); /* Task priority (1-254)任务优先权*/
os_tsk_creat函数创建由参数任务函数指针*task指定的任务,并将任务添加
准备好队列中,新的任务会被动态分配一个任务识别号(TID),有时我们称之为
句柄(handel).
参数priority 指定任务的优先级,默认的任务优先权是1。0为闲置的任务保留
的,如果指定一个任务的优先权为0,则自动用1代替,值255也保留。如果新任
务比当前任务具有更高的优先权,任务跳立即切换执行新的任务。
os_tsk_creat函数是在RL-RTX库中,其原型在rtl.h中定义。
注意:
.RTK核使用默认的栈的大小,在rtx_config.c中已定义。
.优先权值255代表最重要的任务。
返回值
os_tsk_creat函数返回新任务的任务识别号(TID)。如果函数失效,它返回0。
示例
#include <rtl.h>
OS_TID tsk1, tsk2;
void task1 (void) __task {
.
.
tsk2 = os_tsk_create (task2, 1);
.
.
}
void task2 (void) __task {
.
.
}
//*******************************************************************
os_tsk_create_ex()
#include <rtl.h>
OS_TID os_tsk_create_ex (
void (*task)(void *), /* Task to create */
U8 priority, /* Task priority (1-254)*/
void* argv ); /* Argument to the task*/
描述
os_tsk_create_ex函数建立由任务函数指针task指定的任务,并将其添加到就绪队
列中。os_tsk_create_ex函数能把参数传给任务,是os_tsk_create函数的扩展。
参数priority指定了任务的优先级,默认的任务优先权是1。0为闲置任务的优先级,
保留。如果设置任务的优先级为0,则会自动被1代替,优先级255也保留。如果新任
务比当前任务具有更高的优先权,立即切换执行新的任务。
当它启动时, 参数argv直接传递给任务。任务参数对区分相同任务的多个实例非常
有用。os_tsk_create_ex函数是在RL-RTX库中.其原型在rtl.h中定义.
注意
RTK核使用默认的栈的大小,这在rtx_config.c中已定义。
返回值
os_tsk_create_ex 函数返回新任务的任务识别号(TID);如果函数失败,例如无效
的参数,它就返回0。
示例
#include <rtl.h>
OS_TID tsk1, tsk2_0, tsk2_1;
int param[2] = {0, 1};
void task1 (void) __task {
.
.
tsk2_0 = os_tsk_create_ex (task2, 1, ¶m[0]);
tsk2_1 = os_tsk_create_ex (task2, 1, ¶m[1]);
.
.
}
void task2 (int *argv) __task {
.
.
switch (*argv) {
case 0:
printf("This is a first instance of task2.\n");
break;
case 1:
printf("This is a second instance of task2.\n");
break;
}
.
.
}
//*******************************************************************
os_tsk_create_user()
原型
#include <rtl.h>
OS_TID os_tsk_create_user(
void (*task)(void), /* Task to create */
U8 priority, /* Task priority (1-254) */
void* stk, /* Pointer to the task's stack*/
U16 size ); /* Number of bytes in the stack*/
描述
os_tsk_create_user函数建立由任务函数指针task指定的任务,并将其添加到就
绪队列中。函数动态地给该任务分配一个新的TID。该函数可为任务提供单独的栈,
当任务需要一个更大的栈来存储局部变量时,这非常有用。
参数priority指定了任务的优先级, 默认的任务优先权是1。0为闲置任务的优先级
,保留。如果设置任务的优先级为0,则会自动被1代替,优先级255也保留。如果
新任务比当前任务具有更高的优先权,立即切换执行新的任务。参数Stk是为任务
的栈的内存块的指针,参数size指定了栈的字节数。
os_tsk_create_user函数在RL-RTX库中,其原型定义在rtl.h中。
注意:
栈必须以8字节为边界对齐,以U64类型声明(无符号的长整型)。
默认栈的大小在rtx_config.c中定义。
返回值
os_tsk_create_user函数返回新任务的任务识别号(TID);如果函数失败,它就返回0。
示例
#include <rtl.h>
OS_TID tsk1,tsk2;
static U64 stk2[400/8];
void task1 (void) __task {
.
.
/* Create task 2 with a bigger stack */
tsk2 = os_tsk_create_user (task2, 1, &stk2, sizeof(stk2));
.
.
}
void task2 (void) __task {
/* We need a bigger stack here. */
U8 buf[200];
.
.
}
//*******************************************************************
os_tsk_create_user_ex()
原型
#include <rtl.h>
OS_TID os_tsk_create_user_ex (
void (*task)(void *), /* Task to create */
U8 priority, /* Task priority (1-254) */
void* stk, /* Pointer to the task's stack */
U16 size, /* Size of stack in bytes */
void* argv ); /* Argument to the task */
描述
os_tsk_create_user_ex函数生成一个函数指针task参数指定的任务,并把它添加
到就绪队列中。它动态地分配一个任务识别值(TID)到新的任务。该函数可为任务
提供单独的栈,当一个栈需要一个更大的栈来存储局部变量时,这非常有用。
os_tsk_create_user_ex函数是os_tsk_create_user函数的扩展,它允许传递参数
给任务。
.参数priority 指定任务的优先级,默认的任务优先权是1。0是闲置任务的优先
权,保留。如果设置优先权为0,则自动用1代替,优先权255也被保留。如果新任
务比当前任务具有更高的优先权, 跳立即切换执行新的任务。
参数Stk为是一个指向为该任务堆栈保留的内存快的,参数size其大小指定了栈中
的字节数.当它启动时,参数argv直接传递给任务。任务参数对区分相同任务的多
个实例非常有用。相同任务的多个实例根据参数的不同会有不同的行为。
os_tsk_create_user_ex函数在RL-RTX库中,其原型定义在rtl.h中。
注意
栈stk必须以8字节为边界对齐, 必须以U64类型声明(无符号的长整型).
默认栈的大小在rtx_config.c定义。
返回值
os_tsk_create_user_ex函数返回新任务的任务识别值(TID).函数失败,则它返回0。
示例
#include <rtl.h>
OS_TID tsk1,tsk2_0,tsk2_1;
static U64 stk2[2][400/8];
void task1 (void) __task {
.
.
/* Create task 2 with a bigger stack */
tsk2_0 = os_tsk_create_user_ex (task2, 1, &stk2[0], sizeof(stk2[0]), (void *)0);
tsk2_1 = os_tsk_create_user_ex (task2, 1, &stk2[1], sizeof(stk2[1]), (void *)1);
.
.
}
void task2 (void *argv) __task {
/* We need a bigger stack here. */
U8 buf[200];
.
.
switch ((int)argv) {
case 0:
printf("This is a first instance of task2.\n");
break;
case 1:
printf("This is a second instance of task2.\n");
break;
}
.
.
}
//*******************************************************************
os_tsk_delete()
原型
#include <rtl.h>
OS_RESULT os_tsk_delete (OS_TID task_id );
描述
如果任务已经完成或者不再需要,可使用os_tsk_delete函数终结它。
os_tsk_delete函数停止并删除task_id由标识的任务。
os_tsk_delete函数在RL-RTX库中,其原型在rtl.h中定义。
注意
如果task_id值为0,正在运行的任务会被停止并删除,带有任务的程序继续执行,
将其最高优先权放在就绪队列中,删除一个任务就释放所有分配给它的动态存储
器资源。
返回值
如果任务被成功阻止并删除,os_tsk_delete函数返回OS_R_OK。在所有其他情况
下,例如,如果task_id不存在或没有运行,函数返回OS_R_NOK。
示例
#include <rtl.h>
OS_TID tsk3;
void task2 (void) __task {
tsk3 = os_tsk_create (task3, 0);
.
.
if (os_tsk_delete (tsk3) == OS_R_OK) {
printf("\n'task 3' deleted.");
}
else {
printf ("\nFailed to delete 'task 3'.");
}
}
void task3 (void) __task {
.
.
}