ZHCU875AA July 2001 – March 2026 SM320F28335-EP
GUID-B0B5E3E6-40E4-4908-8D5C-44FC82EF9458.html#STDZ0757771中的 cpy_tbl.h 文件还包含运行时支持库中提供的通用复制例程 copy_in() 的原型。copy_in() 例程只接受一个参数:由链接器生成的复制表的地址。该例程随后会处理复制表数据对象,并执行复制表中指定的每个对象组件的复制。
#STDZ075141显示的 cpy_tbl.c 运行时支持源文件中提供了 copy_in() 函数定义。
/****************************************************************************/
/* cpy_tbl.c */
/* */
/* General purpose copy routine. Given the address of a linker-generated */
/* COPY_TABLE data structure, effect the copy of all object components */
/* that are designated for copy via the corresponding LCF table() operator. */
/****************************************************************************/
#include <cpy_tbl.h>
#include <string.h>
void copy_in(COPY_TABLE *tp)
{
unsigned int i;
for (i = 0; i < tp->num_recs; i++)
{
COPY_RECORD *crp = &tp->recs[i];
unsigned int cpy_type = 0;
unsigned int j;
if (crp->src_pgid) cpy_type += 2;
if (crp->dst_pgid) cpy_type += 1;
for (j = 0; j < crp->size; j++)
{
switch (cpy_type)
{
case 3: ddcopy(crp->src_addr + j, crp->dst_addr + j); break;
case 2: dpcopy(crp->src_addr + j, crp->dst_addr + j); break;
case 1: pdcopy(crp->src_addr + j, crp->dst_addr + j); break;
case 0: ppcopy(crp->src_addr + j, crp->dst_addr + j); break;
}
}
}
}加载(或源)页 ID 和运行(或目标)页 ID 用于选择调用哪个低级复制例程来将数据字从加载位置移至运行位置。页 ID 为 0 表示指定的地址位于程序存储器中,而页 ID 为 1 则表示地址位于数据存储器中。硬件将提供特殊指令 PREAD 和 PWRITE,用于将代码/数据移入和移出程序存储器。