中断向量表
一个函数被执行时,在程序空间中占据一定空间,这个空间的起始地址是用函数名来表示的,称为函数的入口地址。也可以用指针指向这个入口地址,并通过该指针变量来调用这个函数。这种指针变量称为函数型指针变量,其一般形式为:
数据类型标识符 (*指针变量名) () ; 例如:int (*f)( );
上式定义了指针f, f指向的函数返回整型类数据。注意其中(*f)中的括弧不可缺少,标识f是先与*结合,是指针变量,然后再与后面的()结合,表示此指针指向函数。
在281x C中,还增加了interrupt 中断关键字(见下面的内容),因此可定义如下数据类型:
typedef interrupt void (*PINT)(void);
在上句中,定义了指针PINT为指向一个特殊的函数interrupt型函数的指针类型。由于在使用interrupt时,函数应被定义成返回void,而且无参数调用,因此在(*PINT)的后面加上(void),表示PINT是指向函数的指针,且无参数调用。在(*PINT)的前面加上interrupt void,表示PINT指向中断函数,无参数返回值。这样,在描述PIE中断矢量表时,可以定义如下的结构: struct PIE_VECT_TABLE { PINT PIE1_RESERVED; PINT PIE2_RESERVED; PINT PIE3_RESERVED; … }
其中,PIE_VECT_TABLE是一个结构类型,其中的所有成员均为中断函数的首地址,即指向中断函数的指针。因此,在定义其成员如PIE1_RESERVED等时,要在其前面加PINT,表示PIE1_RESERVED是PINT类型的变量,即指向中断函数的指针。这样程序显得比较简洁。
因篇幅问题不能全部显示,请点此查看更多更全内容