PieVectTableInit的作用?

[复制链接]
8452|7
 楼主| lfzhou1006 发表于 2011-10-9 15:49 | 显示全部楼层 |阅读模式
.cmd给PieVectTable分配了地址,并且中断函数地址直接赋给PieVectTable,感觉这个进中断过程没有用到ieVectTableInit,想不清楚PieVectTableInit的作用了。
PieVectTableInit是DSP28_PieVect.c中重新定义的一个PIE_VECT_TABLE型结构体,并且又用void InitPieVectTable(void)函数将PieVectTableInit和PieVectTable两个结构体对应起来。为什么要这么“多此一举”并且整个工程中再也没有见到PieVectTableInit的身影。
金鱼木鱼 发表于 2011-10-30 18:15 | 显示全部楼层
不懂,帮顶啊!
apls_jason 发表于 2012-12-11 11:16 | 显示全部楼层
PieVectTableInit结构体里包含的是中断响应函数的名字,具体定义见DefaultIsc.h文件。所以PieVectTableInit.c文件中所实现的功能也即是类似主程序中PieVectTable.ADCINT=&ad;这样的语句功能,而且是一下子把所有的中断函数都定义了一遍。这样我们在写中断函数时候就直接可以在DefaultIsc.c中写了。但我们平常用的时候由于中断函数都是功能实现的主体,所以为了方便,一般自己在主函数中自己重新定义中断响应函数的名字,因此,看起来好像PieVectTableInit没有多大用了。
huanghongxing 发表于 2012-12-11 22:15 | 显示全部楼层
这PieVectTableInit结构体原来虽然有时见到,但是没有深究
dontium 发表于 2012-12-12 00:33 | 显示全部楼层
在TI例程中,有个InitPieVectTable()是对中断初始化的,如果程序中不将中断重定向(如三楼所说),就可以在(Device)_DefaultIsr.c文件中完成中断服务,
无刷双馈 发表于 2013-11-10 22:29 | 显示全部楼层
  都是初始化惹得祸
来看PieVect.c:
const struct PIE_VECT_TABLE PieVectTableInit = {
      PIE_RESERVED,
      PIE_RESERVED,  
      PIE_RESERVED,
      PIE_RESERVED,
……

先定义一个结构体只读变量;

void InitPieVectTable(void)
{
int16        i;
Uint32 *Source = (void *) &PieVectTableInit;
Uint32 *Dest = (void *) &PieVectTable;
EALLOW;
for(i=0; i < 128; i++)
*Dest++ = *Source++;
EDIS;
此段为复制的过程

  上电的时候考虑到不易丢失的特性,代码烧进FLASH,运行的时候再copy到ram中。只读table先copy到.econst数据段
  因为先前定义的只读table相当于完成了初始化,所以只要把他的值完全复制给未初始化变量pievecttable就相当于与初始化了。第二段代码涉及一个空指针,因为我们只关心两者的指针值。至于为什么是128?因为128 * 32 = 256 * 16。至于为什么不像初始化外设那样依次赋值,因为table只是一段数据。
  换做你,你要怎么初始化
1988020566 发表于 2013-11-12 16:24 | 显示全部楼层
中断向量列表的。
1988020566 发表于 2013-11-12 16:26 | 显示全部楼层
一般在程序初始化就开始初始化好了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

340

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部