RTEMS 任务管理指令:删除与挂起
9.4.5: TASK_DELETE- 删除一个任务
%A
%A 函数原型:
%A
%A rtems_status_code rtems_task_delete(
%A rtems_id id
%A );
%A
%A 返回值代表的状态:
%A
%A RTEMS_SUCCESSFUL- 任务成功地被删除
%A
%A RTEMS_INVALID_ID- 任务ID标识无效
%A
%A RTEMS_ILLEGAL_ON_REMOTE_OBJECT- 不能够删除远端节点上的任务
%A
%A 描述:
%A
%A 该指令删除一个ID标识指定的任务,被删除的任务可以是调用者自身,也可以是另外的任务。RTEMS 停止该任务并且回收分配给任务的栈空间、和任务相关的额时间延迟或计时器、 TCB。此外,如果任务是 RTEMS_FLOATING_POINT,还要删除它的浮点山下文区域。RTEMS不会回收下列的资源: 区域段,分区缓冲器,信号量,计时器, 单调周期。(未涉及的相关概念可以参考后面的说明)
%A
%A 注意:
%A
%A 一个任务应该自己将负它的资源释放并在被删除前返回给RTEMS。为了确保资源的回收,除非任务已经无法运行运行,或者不拥有任何的RTEMS资源,否则任务是不应该被删除的。如果一个任务占用了RTEMS资源,任务应该先 释放它占用的资源然后再删除。在RTEMS中,较好的编程风格通过消息机制,向要被删除的任务发送消息、事件、信号,让任务释放它的资源然后删除他自身,此外,也可以调用重新开始指令,并且附加一个特别的参数让任务重新启动,然后释放自己占用的资源。
%A
%A 如果删除的任务是正在执行的任务 (也就是调用者自身RTEMS_SELF),那么删除将会迫使RTEMS选择另外的一个任务运行。
%A
%A 当一个全局任务被删除,任务的ID标识将会传送到系统中的每个节点,让这些节点删除全局对象表格中对应的字段。
%A
%A 要删除的任务必须是在本地运行,即使任务使用了RTEMS_GLOBAL选项创建。
%A
%A 9.4.6: TASK_SUSPEND-挂起一个任务
%A
%A 函数原型:
%A
%A rtems_status_code rtems_task_suspend(
%A rtems_id id
%A );
%A
%A 返回值代表的状态:
%A
%A RTEMS_SUCCESSFUL- 任务成功地挂起
%A
%A RTEMS_INVALID_ID- 任务ID标识无效
%A
%A RTEMS_ALREADY_SUSPENDED- 任务已经处于挂起态
%A
%A 描述:
%A
%A 该函数中止ID标识的任务近一步执行,把该任务放在挂起状态。挂起状态和阻塞态不同,处在挂起状态的任务除非接收到rtems_task_resume函数,否则该任务不会参予任务调度。
%A
%A 注意:
%A
%A 任务能通过向rtems_task_suspend函数传递RTEMS_SELF来挂起它本身。在这种情况,任务将会被挂起,而且只有等到任务被重新开始的时候,这个函数才回返回RTEMS_SUCCESSFUL。
%A
%A 挂起一个不在本地结点上的全局任务将会对远端结点产生一个请求,要求挂起指定的任务。
%A 如果被ID标识指定的任务已经被挂起,那么函数执行的返回码将会是RTEMS_ALREADY_SUSPENDED。
%A%A
%A
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。