os_data_to_xdata
所属模块:底层内存管理 | 类型:XDATA写入函数
函数简介
os_data_to_xdata 用于将内部数据搬运到8051的XDATA外部存储空间。
该接口通过寄存器间接寻址方式实现数据写入,是HRTOS底层上下文保存与任务迁移的重要基础函数。
常用于任务上下文切换、堆栈保存以及高速任务数据迁移过程。
函数原型
void os_data_to_xdata(u8 addr, u16 addr2);
参数说明
| 参数 |
说明 |
| addr |
源数据地址(内部寄存器/数据区索引) |
| addr2 |
XDATA目标地址(外部存储空间地址) |
源码实现
/*------------------------------------------------------------------------
| FILE DESCRIPTION |
------------------------------------------------------------------------*/
/*------------------------------------------------------------------------
| - File name : os_data.c
| - Author : 谭舒
| - Update date : 2026-09-19
| - Copyright(C) : 2026 HRTOS. All rights reserved.
------------------------------------------------------------------------*/
/*------------------------------------------------------------------------
| INCLUDES |
------------------------------------------------------------------------*/
#include"hrtos_internal.h"
/*------------------------------------------------------------------------
| API FUNCTIONS |
------------------------------------------------------------------------*/
/**
* @brief 将指定数据区地址的数据写入 XDATA 数据区。
*
* @param[in] addr 数据区源地址。
* @param[in] addr2 XDATA 目标地址。
*
* @return None。
*
* @note 函数执行过程中临时关闭中断,以保证数据访问过程不被中断打断。
* 数据写入完成后恢复进入函数前的中断使能状态。
*/
void os_data_to_xdata(u8 addr,u16 addr2)
{
u8 i;
i=IE;
EA=0;
OS_HRTOS=addr;
__asm mov R1,OS_HRTOS
OS_HRTOS=addr2&0xff;
DPH=addr2>>8;
DPL=OS_HRTOS;
__asm MOV A,@R1
__asm MOVX @DPTR,A
IE=i;
}
/*------------------------------------------------------------------------
| END OF FILE: os_data.c |
------------------------------------------------------------------------*/
使用示例
void demo_xdata_write()
{
os_data_to_xdata(5, 0x1200);
}
注意事项
该函数涉及中断关闭与寄存器操作,执行期间不可被打断,否则可能导致数据写入错误。
仅用于内核级数据搬运,不建议在应用层频繁调用。