主页 文档 下载 莱特 沙龙 English

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


RTEMS 任务管理指令:启动与重启

作者 Ray

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

9.7.3: TASK_START- 启动一个任务

函数原型:

rtems_status_code rtems_task_start(
rtems_id id,
rtems_task_entry entry_point,
rtems_task_argument argument
);

返回值代表的状态:

RTEMS_SUCCESSFUL- 任务成功的启动

RTEMS_INVALID_ADDRESS- 任务入口无效

RTEMS_INVALID_ID- 任务ID标识无效

RTEMS_INCORRECT_STATE- 任务状态不在睡眠状态,无法启动

RTEMS_ILLEGAL_ON_REMOTE_OBJECT-无法启动远端节点任务

描述:

该指令使标识为id的任务的状态变成ready态,因为当任务创建的时候,任务管理器就会根据任务的优先级和执行模态为基础对任务进行调度。任务的起始地址被在entry_point中指定。任务的启动参数在argument参数中指定。该参数可能是一个32位的整数值,也可能是指向一个参数列表的一个索引。

注意:

如果调用者是可抢占的,而且他所启动的任务优先级较高,任务管理器会将调用者从处理器中调度出来,而将新启动的任务调入处理器。

对于睡眠状态的任务的操作例如挂起或优先级的变化等。在 rtems_task_start 指令启动任务的时候,都会变得无效。

9.7.4: TASK_RESTART- 重新启动一个任务

函数原型:

rtems_status_code rtems_task_restart(
rtems_id id,
rtems_task_argument argument
);

返回值代表的状态:

RTEMS_SUCCESSFUL- 任务成功地重新开始

RTEMS_INVALID_ID- 任务ID标识无效

RTEMS_INCORRECT_STATE- 任务以前没有被启动过,无法重启

RTEMS_ILLEGAL_ON_REMOTE_OBJECT- 不能够重新开始远端的任务

描述:

该指令将ID标识的任务复位,让从最初出发地址开始执行。任务的优先级和执行模式和最初的创造时的值相同。如果任务现在处于阻塞态,RTEMS自动将任务状态变成就绪。除了睡眠态的以外,处于其他任何状态的任务都能被重新开始。

任务的启动参数被包含在argument中。该参数可能是一个32位的整数值,也可能是指向一个参数列表的一个索引。 这个参数可以用来区分rtems_task_start启动的任务和后来使用rtems_task_restart 调用启动的任务。这个函数在在删除任务的时候很有用,因为一个任务除了可以使用rtems_task_delete删除指定任务,还能通过重新开始删除某个任务。此外任务可以通过这个指令将自身资源释放,然后划除它自己。

注意:

如果 ID标识是 RTEMS_SELF,也就是任务自身,那么调用者将会重新开始,而rtems_task_restart将不会有返回值。

如果调用者处于可抢占模式,而且被重新开始的任务有一个较高的优先级,任务调度器将会把重新开始的任务调入CPU执行。

要重启的任务一定要是本地任务,即使他在启动的时候使用了RTEMS_GLOBAL 选项。
 
嵌入式软硬件设计咨询 • 8位 16位 32位 64位 RISC DSP
主页文章 方案 产品 下载反馈
 
2004 RTEMS.NET 版权所有