1. 先对变量PieVectTable做一些说明
在PicVect.h中声明了extern struct PIE_VECT_TABLE PieVectTable;但PieVectTable的定义在GlobalVariableDefs.c中
#ifdef __cplusplus
#pragma DATA_SECTION("PieVectTableFile")
#else
#pragma DATA_SECTION(PieVectTable,"PieVectTableFile");
#endif
struct PIE_VECT_TABLE PieVectTable;
最后在.cmd文件中将PieVectTable的位置锁定在2812指定的向量空间地址
SECTIONS
{
PieVectTableFile : > PIE_VECT, PAGE = 1
}
MEMORY
{
PAGE 0: /* Program Memory */
PAGE 1: /* Data Memory */
DEV_EMU : origin = 0x000880, length = 0x000180 /* device emulation registers */
PIE_VECT : origin = 0x000D00, length = 0x000100 /* PIE Vector Table */
}
到此变量PieVectTable就与2812指定的中断向量地址空间对应起来了
2. 再说一下PieVectTableInit
在PieVect.c中定义了这个变量用实际中断服务函数的入口地址初始化该变量,这个变量在内存(仿真器调试)或Flash(烧写Flash之后)中的位置是随意的,你说的那个InitPieVectTable()函数就是完成将变量PieVectTableInit的内容拷贝到变量PieVectTable中,也就是将实际的中断服务函数入口地址拷贝到2812指定的中断向量空间 |