4450|2

238

帖子

2

TA的资源

纯净的硅(高级)

楼主
 

LM3S RTX 任务处理 [复制链接]

//*******************************************************************
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, &param[0]);
   tsk2_1 = os_tsk_create_ex (task2, 1, &param[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 {
    .
    .
}

RTL_Demo2.zip

817.3 KB, 下载次数: 30

最新回复

终于有人研究RTX了,不错!  详情 回复 发表于 2011-10-18 23:04

赞赏

1

查看全部赞赏

 
点赞 关注
个人签名QQ:1795100002
E-mail:paulhyde@qq.com

回复
举报

849

帖子

0

TA的资源

纯净的硅(高级)

沙发
 

回复 楼主 paulhyde 的帖子

有M4板子的小心了。。。。。。。。
不过写得不错。。。给力。
 
个人签名只有想不到,没有做不到。
 

回复

69

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
终于有人研究RTX了,不错!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表