os_xdata_to_data
所属模块:内存管理 | 类型:XDATA→DATA搬运函数
函数简介
:contentReference[oaicite:0]{index=0} 用于将外部存储器 XDATA 中的数据读取到内部 DATA 区域。
该函数是 8051 架构下底层内存访问的重要操作接口。
该接口通过 MOVX 指令实现外部数据读取,并在关闭中断的保护下完成安全搬运。
函数原型
void os_xdata_to_data(u16 addr2, u8 addr);
参数说明
| 参数 |
说明 |
| addr2 |
XDATA 地址(源地址) |
| addr |
DATA 目标地址索引 |
源码实现
/*------------------------------------------------------------------------
| FILE DESCRIPTION |
------------------------------------------------------------------------*/
/*------------------------------------------------------------------------
| - File name : os_xdata.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] addr2 XDATA 源地址。
* @param[in] addr 数据区目标地址。
*
* @return None。
*
* @note 函数执行过程中临时关闭中断,以保证数据访问过程不被中断打断。
* 数据读取完成后恢复进入函数前的中断使能状态。
*/
void os_xdata_to_data(u16 addr2,u8 addr)//
{
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 MOVX A,@DPTR
__asm MOV @R1,A
IE=i;
}
/*------------------------------------------------------------------------
| END OF FILE: os_xdata.c |
------------------------------------------------------------------------*/
使用示例
void demo_copy(void)
{
os_xdata_to_data(0x12, 5);
}
注意事项
该函数在执行过程中会关闭中断(EA=0),确保 XDATA 访问过程的原子性。
不适合在高频实时中断环境中频繁调用。