os_queue_send_from_isr
所属模块:通信机制 | 类型:中断安全队列函数
函数简介
os_queue_send_from_isr 用于在中断上下文中向邮箱/队列写入1字节数据。
该函数是HRTOS中中断安全IPC机制的一部分。
该接口在ISR中快速投递数据,并触发调度请求。
函数原型
char os_queue_send_from_isr(u8 id, u8 value);
参数说明
| 参数 |
说明 |
| id |
邮箱/队列ID(0 ~ OS_RESOURCE_MAX-1) |
| value |
写入的数据(1字节) |
源码实现
/*------------------------------------------------------------------------
| FILE DESCRIPTION |
------------------------------------------------------------------------*/
/*------------------------------------------------------------------------
| - File name : queue_send_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] id 资源编号。
* @param[in] value 待写入的数据。
*
* @return 操作结果。
* @retval 1 数据发送成功。
* @retval -1 资源编号无效。
*
* @note 该接口用于中断环境。
* 数据写入资源后,待处理信号计数增加,并请求系统进行调度。
*/
char os_queue_send_from_isr(u8 id, u8 value)
{
if (id >= OS_RESOURCE_MAX)
{
return -1;
}
/* 写入邮箱 */
OS_RES[id].value = value;
/* 事件计数 */
OS_RES[id].pending_signal++;
/* 触发调度 */
OS_SCHED_REASON = 1;
return 1;
}
/*------------------------------------------------------------------------
| END OF FILE: queue_send_from_isr.c |
------------------------------------------------------------------------*/
使用示例
void UART_ISR(void)
{
os_queue_send_from_isr(1, RX_DATA);
// 立即返回中断
}
注意事项
该函数必须在中断上下文调用,禁止在任务中使用 ISR 版本接口。