os_event_set_from_isr
所属模块:通信机制 | 类型:中断安全事件函数
函数简介
os_event_set_from_isr 用于在中断上下文中设置事件标志,
并唤醒所有等待该事件的任务。
该函数属于HRTOS事件广播机制的一部分,用于实现ISR到任务的通知机制。
函数原型
char os_event_set_from_isr(char obj);
参数说明
| 参数 |
说明 |
| obj |
事件编号(0~OS_RESOURCE_MAX-1) |
源码实现
/*------------------------------------------------------------------------
| FILE DESCRIPTION |
------------------------------------------------------------------------*/
/*------------------------------------------------------------------------
| - File name : event_set_from_isr.c
| - Author : 谭舒
| - Update date : 2026-09-19
| - Copyright(C) : 2026 HRTOS. All rights reserved.
------------------------------------------------------------------------*/
/*------------------------------------------------------------------------
| INCLUDES |
------------------------------------------------------------------------*/
#include"hrtos_internal.h"
/*------------------------------------------------------------------------
| API FUNCTIONS |
------------------------------------------------------------------------*/
/**
* @brief 在中断环境设置指定事件,并通知等待任务。
*
* @param[in] obj 事件资源槽位编号。
*
* @return 操作结果。
* @retval 1 事件设置成功。
* @retval -1 事件资源槽位编号无效。
*
* @note 设置事件后,根据当前等待该事件的任务数量产生相应的待处理信号,
* 并请求系统重新进行任务调度。
* 该接口用于中断环境。
*/
char os_event_set_from_isr(char obj)
{
if (obj >= OS_RESOURCE_MAX)
{
return -1;
}
OS_RES[obj].value = 1;
OS_RES[obj].pending_signal=OS_RES[obj].wait_cnt;//全局广播释放
OS_SCHED_REASON = 1;
return 1;
}
/*------------------------------------------------------------------------
| END OF FILE: event_set_from_isr.c |
------------------------------------------------------------------------*/
使用示例
void EXTI_ISR(void)
{
os_event_set_from_isr(3);
}
注意事项
该函数用于ISR环境,禁止在任务上下文中调用 ISR 版本接口。
并且会唤醒所有等待该事件的任务。