ZHCU875Z August 2001 – October 2023 SM320F28335-EP
TMS320C28x cpy_tbl.h 文件中的 cpy_tbl.h 文件还包含运行时支持库中提供的通用复制例程 copy_in() 的原型。copy_in() 例程只接受一个参数:由链接器生成的复制表的地址。该例程随后会处理复制表数据对象,并执行复制表中指定的每个对象组件的复制。
运行时支持 cpy_tbl.c 文件显示的 cpy_tbl.c 运行时支持源文件中提供了 copy_in() 函数定义。
/****************************************************************************/
/* cpy_tbl.c */
/* */
/* 通用复制例程。 给定由链接器生成的 */
/* COPY_TABLE 数据结构的地址,通过 */
/* 相应的 LCF table() 运算符复制指定用于复制的所有对象组件。*/
/****************************************************************************/
#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,用于将代码/数据移入和移出程序存储器。