打印

PieVectTableInit的作用?

[复制链接]
7218|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结构体原来虽然有时见到,但是没有深究

使用特权

评论回复
5
dontium| | 2012-12-12 00:33 | 只看该作者
在TI例程中,有个InitPieVectTable()是对中断初始化的,如果程序中不将中断重定向(如三楼所说),就可以在(Device)_DefaultIsr.c文件中完成中断服务,

使用特权

评论回复
6
无刷双馈| | 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只是一段数据。
  换做你,你要怎么初始化

使用特权

评论回复
7
1988020566| | 2013-11-12 16:24 | 只看该作者
中断向量列表的。

使用特权

评论回复
8
1988020566| | 2013-11-12 16:26 | 只看该作者
一般在程序初始化就开始初始化好了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

340

帖子

1

粉丝