|
单调周期调度函数
作者 Ray
RTEMS版权所有,转载请注明来源www.rtems.net,作者Ray
20.3 操作
20.3.1 : 创建单调周期任务周期
rtems_rate_monotonic_create 函数为调用任务创建单调周期。RTEMS将从空闲周期控制块
(PCB)链表中分派一个PCB。RTEMS使用该数据结构控制单调周期。RTEMS还为周期分配ID,供其他API控制单调周期。
函数原型:
rtems_status_code rtems_rate_monotonic_create(
rtems_name name,
rtems_id *id
);
返回值代表的状态:
RTEMS_SUCCESSFUL- 成功地产生单调时期
RTEMS_INVALID_NAME- 无效任务名字
RTEMS_TOO_MANY- 产生太多周期
20.3.2 : 周期管理
rtems_rate_monotonic_period函数用于设定周期,来让任务按照设定好的周期周期性的运行。rtems_rate_monotonic_period函数执行后,
任务将按照固定的周期运行。运行情况如下所示:
如Id对应的单调周期已经启动,当rtems_rate_monotonic_period函数执行后,调用者将会被阻塞,直到到达下次运行的周期。
如果Id对应的单调周期没有运行,那么函数将会初始化周期,并且立即返回。
如果单调周期在任务调用rtems_rate_monotonic_period
函数前到期,那么初始化周期后,然后函数返回超时。
如果函数的周期被设定为 RTEMS_PERIOD_STATUS , 那么函数返回当前周期的状态。
rtems_status_code rtems_rate_monotonic_period(
rtems_id id,
rtems_interval length
);
返回值代表的状态 :
RTEMS_SUCCESSFUL- 周期成功地初始化
RTEMS_INVALID_ID- 无效的单调周期 ID 标识
RTEMS_NOT_OWNER_OF_RESOURCE- 周期不是调用者创建的。
RTEMS_NOT_DEFINED- 单调周期没有初始化
RTEMS_TIMEOUT- 周期已经过时
20.3.4 : 取消一个周期
rtems_rate_monotonic_cancel 函数用来停止单调周期 , 要想重新启动周期 , 可以使用
rtems_rate_monotonic_period 函数。
20.4.3 : RATE_MONOTONIC_CANCEL- 取消一个时期
函数原型 :
rtems_status_code rtems_rate_monotonic_cancel(
rtems_id id
);
返回值代表的状态 :
RTEMS_SUCCESSFUL- 成功地取消
RTEMS_INVALID_ID- 无效 ID 标识
RTEMS_NOT_OWNER_OF_RESOURCE- 单调周期不是由此函数所在任务创建。
20.3.5 : 删除单调周期
rtems_rate_monotonic_delete 函数是用来删除单调周期。如果该周期正在运行的并且没有期满 , 那么周期将先自动地取消。周期删除时PCB也会被释放。周期可以被所有知道ID的任务删除。
函数原型:
rtems_status_code rtems_rate_monotonic_delete(
rtems_id id
);
返回值代表的状态:
RTEMS_SUCCESSFUL- 成功删除
RTEMS_INVALID_ID- 无效周期ID标识
20.3.6 : RATE_MONOTONIC_GET_STATUS-获得单调周期状态
函数原型:
rtems_status_code rtems_rate_monotonic_get_status(
rtems_id id,
rtems_rate_monotonic_period_status *status
);
返回值代表的状态 :
RTEMS_SUCCESSFUL- 时期成功地初始化
RTEMS_INVALID_ID- 无效 ID 标识
RTEMS_INVALID_ADDRESS- 无效 status 地址
描述 :
函数返回周期的信息 , 并且存储在 status 中 , rtems_rate_monotonic_period_status
定义如下 :
typedef struct {
rtems_rate_monotonic_period_states state;
rtems_unsigned32 ticks_since_last_period;
rtems_unsigned32 ticks_executed_since_last_period;
} rtems_rate_monotonic_period_status;
如果周期的状态是 RATE_MONOTONIC_INACTIVE , 那么 ticks_since_last_period 和 ticks_executed_since_last_period
将会被设定成 0 。否则ticks_since_last_period将会包含自从rtems_rate_monotonic_period
调用函数以后的时钟滴哒数目。此外,ticks_executed_since_last_period将描述自从 rtems_rate_monotonic_period
函数后周期的所有者执行的时间。
|