ZHCU947E June 2015 – January 2023
TMS320C6000 cpy_tbl.h 文件中的 cpy_tbl.h 文件还包含运行时支持库中提供的通用复制例程 copy_in() 的原型。copy_in() 例程只接受一个参数:由链接器生成的复制表的地址。该例程随后会处理复制表数据对象,并执行复制表中指定的每个对象组件的复制。
运行时支持 cpy_tbl.c 文件显示的 cpy_tbl.c 运行时支持源文件中提供了 copy_in() 函数定义。
/****************************************************************************/
/* cpy_tbl.c */
/* */
/* 2011 米6体育平台手机版_好二三四版权所有 */
/* */
/* 通用复制例程。给定由链接器生成的 */
/* COPY_TABLE 数据结构的地址,通过 */
/* 相应的 LCF table() 运算符复制指定用于复制的所有对象组件。*/
/* */
/****************************************************************************/
#include <cpy_tbl.h>
#include <string.h>
typedef void (*handler_fptr)(const unsigned char *in, unsigned char *out);
/****************************************************************************/
/* COPY_IN() */
/****************************************************************************/
void copy_in(COPY_TABLE *tp)
{
unsigned short I;
for (I = 0; I < tp->num_recs; I++)
{
COPY_RECORD crp = tp->recs[i];
unsigned char *ld_addr = (unsigned char *)crp.load_addr;
unsigned char *rn_addr = (unsigned char *)crp.run_addr;
if (crp.size)
{
/*------------------------------------------------------------------*/
/* 复制记录具有非零大小,因此数据不会被压缩。 */
/* 仅复制数据。 */
/*------------------------------------------------------------------*/
memcpy(rn_addr, ld_addr, crp.size);
}
#ifdef __TI_EABI__
else if (HANDLER_TABLE)
{
/*------------------------------------------------------------------*/
/* 复制记录的大小为零,因此数据会被压缩。加载数据 */
/* 的第一个字节具有处理程序索引。将此索引与 */
/* 处理程序表一同使用以获取此数据的处理程序。然后通过 */
/* 传递加载和运行地址来调用处理程序。 */
/*------------------------------------------------------------------*/
unsigned char index = *((unsigned char *)ld_addr++);
handler_fptr hndl = (handler_fptr)(&HANDLER_TABLE)[index];
(*hndl)((const unsigned char *)ld_addr, (unsigned char *)rn_addr);
}
#endif
}
}