Skip to content

函数速查表

任务可调用函数快速浏览表

下表用于快速查看“普通任务上下文”中通常可以直接调用的接口。

函数说明
yr_get_current_ticks获取当前系统 tick,适合做时间戳、超时统计
yr_task_sleep_ticks当前任务相对延时,ticks == 0 时可用于主动让出 CPU
yr_task_sleep_until当前任务按固定周期延时,适合周期任务
yr_task_create / yr_task_init初始化任务对象,通常更适合在系统初始化阶段调用
yr_task_delete删除指定任务,不建议删除内核内部任务
yr_task_suspend挂起指定任务
yr_task_start启动已初始化或已挂起的任务
yr_task_set_priority修改任务初始优先级
yr_semaphore_init / yr_semaphore_delete初始化或删除信号量对象
yr_semaphore_take任务上下文获取信号量,支持阻塞等待
yr_semaphore_give任务上下文释放信号量
yr_mutex_init / yr_mutex_delete初始化或删除互斥锁对象
yr_mutex_take任务上下文获取互斥锁,支持阻塞等待与优先级继承
yr_mutex_give任务上下文释放互斥锁
yr_queue_init / yr_queue_delete初始化或删除消息队列对象
yr_queue_reset重置队列内容,要求当前没有任务阻塞在该队列上
yr_queue_send任务上下文发送队列消息,支持阻塞等待
yr_queue_receive任务上下文接收队列消息,支持阻塞等待
yr_timer_init初始化软件定时器对象
yr_timer_start启动软件定时器
yr_timer_stop停止软件定时器
yr_timer_set_ticks修改软件定时器周期
YR_DEBUG_LOG / yr_printf打印日志,适合调试使用

补充说明:

  • 以上表格主要面向“普通应用任务”,并非表示这些函数在任意阶段都适合调用。
  • yr_kernel_init()yr_kernel_start() 一般在 main() 初始化阶段调用,而不是在任务函数中调用。
  • yr_task_create()yr_task_init()、各类 *_init()*_delete() 接口通常也可以在任务上下文中调用,但更常见的是在系统初始化阶段统一完成对象创建。
  • yr_timer_list_init()yr_sched_init()yr_sched_start()yr_ipc_block_task()yr_ipc_resume_all()yr_ipc_reorder_blocked_task()yr_task_set_msg() 等接口更偏内核内部使用,因此没有放进应用任务快速浏览表。
  • scheduler.hportable.h 中的大部分接口属于内核/移植层接口,虽然有些在技术上可调用,但不建议应用任务直接使用。
  • 可能导致阻塞的函数包括 yr_semaphore_take()yr_mutex_take()yr_queue_send()yr_queue_receive()yr_task_sleep_ticks()yr_task_sleep_until(),调用前要确认当前任务允许被阻塞。

ISR 可调用函数快速浏览表

下表用于快速查看“中断服务函数 ISR 上下文”中允许直接调用的接口。

函数说明
yr_tick_update系统节拍更新函数,通常在 SysTick_Handler() 中调用
yr_semaphore_take_from_isrISR 中尝试获取信号量,不允许阻塞
yr_semaphore_give_from_isrISR 中释放信号量,不允许阻塞
yr_queue_send_from_isrISR 中向队列发送消息,不允许阻塞
yr_queue_receive_from_isrISR 中从队列接收消息,不允许阻塞
yr_sched_switch当 ISR 中 need_switch == YR_TRUE 时,可调用它请求一次任务切换
yr_get_current_ticks读取当前 tick 值,适合做简单时间判断
YR_DEBUG_LOG / yr_printf技术上可调用,但通常不建议在高频 ISR 中大量使用

补充说明:

  • ISR 中原则上只能调用“不会阻塞、不会主动切换上下文、明确提供 ISR 版本”的接口。
  • 不能在 ISR 中调用 yr_task_sleep_ticks()yr_task_sleep_until()yr_semaphore_take()yr_mutex_take()yr_queue_send()yr_queue_receive() 等可能阻塞当前执行流的函数。
  • 当前 RTOS 为 ISR 版本 IPC 接口提供了 need_switch 输出参数,表示“是否有更高优先级任务已就绪”。当 need_switch == YR_TRUE 时,通常应在 ISR 末尾调用 yr_sched_switch() 请求调度,以便在退出中断后尽快切换到目标任务。
  • 这里调用 yr_sched_switch() 的含义更接近“发起一次切换请求”,真正的上下文切换仍由底层异常返回路径和移植层配合完成。
  • 互斥锁没有提供 ISR 版本接口,因此 yr_mutex_take() / yr_mutex_give() 都不应在中断中调用。
  • 除了上述这种 need_switch == YR_TRUE 后调用 yr_sched_switch() 的典型用法外,其它大多数 yr_sched_*()yr_kernel_init()yr_kernel_start()yr_task_switch() 等初始化、调度与移植层接口都不应在 ISR 中直接调用。

API 调用场景矩阵

下表用于更完整地查看各公开接口更适合在哪类场景中使用。

说明:

  • 推荐:该场景下是典型用法。
  • 可用:技术上可以使用,但通常不是首选场景。
  • 谨慎:只有明确理解实现语义时才建议使用。
  • 内部:更偏内核/移植层内部使用,不建议应用直接调用。
  • :不应在该场景中调用。
函数初始化阶段任务上下文ISR内核内部更常用
yr_kernel_init推荐
yr_kernel_start推荐
yr_list_init推荐可用推荐
yr_list_isempty可用可用推荐
yr_list_insert_before可用可用推荐
yr_list_insert_after可用可用推荐
yr_list_delete_before可用可用推荐
yr_list_delete_after可用可用推荐
yr_list_delete_self可用可用推荐
yr_task_init推荐可用
yr_task_create推荐可用
yr_task_start推荐可用
yr_task_delete推荐
yr_task_suspend推荐
yr_task_sleep_ticks推荐
yr_task_sleep_until推荐
yr_task_cleanup_defunct谨慎推荐
yr_task_ctrl_current谨慎推荐
yr_task_set_priority推荐
yr_task_set_msg推荐
yr_get_current_ticks可用推荐可用推荐
yr_timer_list_init推荐推荐
yr_timer_init推荐可用
yr_timer_start可用推荐推荐
yr_timer_stop可用推荐推荐
yr_timer_set_ticks可用推荐推荐
yr_tick_update推荐
yr_timeout_default_func推荐
yr_sched_get_current谨慎谨慎推荐
yr_sched_init推荐推荐
yr_sched_start推荐推荐
yr_sched_switch谨慎谨慎推荐
yr_sched_insert_task推荐
yr_sched_remove_task推荐
yr_sched_yield谨慎推荐
yr_ipc_init推荐可用推荐
yr_ipc_block_task推荐
yr_ipc_resume_all推荐
yr_ipc_reorder_blocked_task推荐
yr_semaphore_init推荐可用
yr_semaphore_delete可用推荐
yr_semaphore_take推荐
yr_semaphore_give推荐
yr_semaphore_take_from_isr推荐
yr_semaphore_give_from_isr推荐
yr_mutex_init推荐可用
yr_mutex_delete可用推荐
yr_mutex_take推荐
yr_mutex_give推荐
yr_queue_init推荐可用
yr_queue_delete可用推荐
yr_queue_reset可用推荐
yr_queue_send推荐
yr_queue_receive推荐
yr_queue_send_from_isr推荐
yr_queue_receive_from_isr推荐
yr_irq_disable谨慎谨慎推荐
yr_irq_enable谨慎谨慎推荐
yr_task_stack_init推荐
yr_task_first_switch_to推荐
yr_task_switch推荐
yr_find_first_set推荐
yr_printf / YR_DEBUG_LOG可用推荐谨慎可用

补充说明:

  • yr_sched_switch() 在任务和 ISR 两列标为 谨慎,是因为它通常只应在内核路径中,或在 ISR 中 need_switch == YR_TRUE 时使用。
  • yr_sched_get_current() 在任务和 ISR 中都能读到当前任务指针,但它更偏内核辅助接口,应用层一般不必依赖。
  • 链表接口属于通用数据结构工具,若应用自己管理静态链表可在初始化或任务中使用;但若链表节点由内核对象占用,就不应越过内核直接操作。
  • yr_irq_disable() / yr_irq_enable() 对应用层并非绝对不可用,但它们属于非常底层的临界区原语,若误用会直接影响系统实时性与中断响应。