主页 文档 下载 莱特 沙龙 English

RTESM文档
RTEMS精彩应用
RTEMS版权说明
其他RTOS
ARM/DSP专区
AVR/FPGA/PCB
嵌入式文件系统
ARM AVR仿真器DIY
莱特电子工作室
联系我们
 


RTEMS 任务管理指令:删除与挂起

作者 Ray

RTEMS版权所有,转载请注明来源www.rtems.net,作者Ray

9.7.5: TASK_DELETE- 删除一个任务

函数原型:

rtems_status_code rtems_task_delete(
rtems_id id
);

返回值代表的状态:

RTEMS_SUCCESSFUL- 任务成功地被删除

RTEMS_INVALID_ID- 任务ID标识无效

RTEMS_ILLEGAL_ON_REMOTE_OBJECT- 不能够删除远端节点上的任务

描述:

该指令删除一个ID标识指定的任务,被删除的任务可以是调用者自身,也可以是另外的任务。RTEMS 停止该任务并且回收分配给任务的栈空间、和任务相关的额时间延迟或计时器、 TCB。此外,如果任务是 RTEMS_FLOATING_POINT,还要删除它的浮点山下文区域。RTEMS不会回收下列的资源: 区域段,分区缓冲器,信号量,计时器, 单调周期。(未涉及的相关概念可以参考后面的说明)

注意:

一个任务应该自己将负它的资源释放并在被删除前返回给RTEMS。为了确保资源的回收,除非任务已经无法运行运行,或者不拥有任何的RTEMS资源,否则任务是不应该被删除的。如果一个任务占用了RTEMS资源,任务应该先 释放它占用的资源然后再删除。在RTEMS中,较好的编程风格通过消息机制,向要被删除的任务发送消息、事件、信号,让任务释放它的资源然后删除他自身,此外,也可以调用重新开始指令,并且附加一个特别的参数让任务重新启动,然后释放自己占用的资源。

如果删除的任务是正在执行的任务 (也就是调用者自身RTEMS_SELF),那么删除将会迫使RTEMS选择另外的一个任务运行。

当一个全局任务被删除,任务的ID标识将会传送到系统中的每个节点,让这些节点删除全局对象表格中对应的字段。

要删除的任务必须是在本地运行,即使任务使用了RTEMS_GLOBAL选项创建。

9.7.6: TASK_SUSPEND-挂起一个任务

函数原型:

rtems_status_code rtems_task_suspend(
  rtems_id id
);

返回值代表的状态:

RTEMS_SUCCESSFUL- 任务成功地挂起

RTEMS_INVALID_ID- 任务ID标识无效

RTEMS_ALREADY_SUSPENDED- 任务已经处于挂起态

描述:

该函数中止ID标识的任务近一步执行,把该任务放在挂起状态。挂起状态和阻塞态不同,处在挂起状态的任务除非接收到rtems_task_resume函数,否则该任务不会参予任务调度。

注意:

任务能通过向rtems_task_suspend函数传递RTEMS_SELF来挂起它本身。在这种情况,任务将会被挂起,而且只有等到任务被重新开始的时候,这个函数才回返回RTEMS_SUCCESSFUL。

挂起一个不在本地结点上的全局任务将会对远端结点产生一个请求,要求挂起指定的任务。

如果被ID标识指定的任务已经被挂起,那么函数执行的返回码将会是RTEMS_ALREADY_SUSPENDED。
 
嵌入式软硬件设计咨询 • 8位 16位 32位 64位 RISC DSP
主页文章 方案 产品 下载反馈
 
2004 RTEMS.NET 版权所有