您的位置:首页 > 其它

飞思卡尔MCU自定义中断向量的相关问题 bootloader程序过程中的问题

2014-06-13 13:12 423 查看

飞​思​卡​尔​单​片​机​编​程

http://wenku.baidu.com/link?url=-jEFbEsPdjifqDOQUCJKEilt593A4MzCxXoXJAm2eC9EdqGWXj8M9vVmtnmw3EpAT3S_uMuSCYvT4D7qWoLyQ8gO_nOc_XWVsxKA3C7dClC
*******************************************************************************
中断服务代码前必须要声明

#pragma CODE_SEG __NEAR_SEG NON_BANKED

这样编译器产生的指针(向量)为16bit长。如果不加"NON_BANKED"声明,缺省代码指针为24bit长(为代码段分页考虑),这样向量表的一个单元就不能容纳。

*******************************************************************************
自定义中断向量的情况说明

#pragma CODE_SEG NON_BANKED
// 声明外部中断函数
extern void Timer0_C0(void);
extern void _Startup(void); //Startup routine */

#pragma CODE_SEG NON_BANKED
/* Interrupt section for this module. Placement will be in NON_BANKED area. */
__interrupt void UnimplementedISR(void) //定义在NON_BANKED区
{
asm BGND; //空的中断函数
}
typedef void (*near tIsrFunc)(void); //定义了函数指针类型

//定义一个函数指针数组中断表,从0xFF80地址开始装载各个中断函数的首地址
const tIsrFunc _vect[] @0xFF80 = /* Interrupt table */
{
UnimplementedISR, /* vector 63 */
UnimplementedISR, /* vector 62 */
UnimplementedISR, /* vector 61 */
UnimplementedISR, /* vector 60 */
UnimplementedISR, /* vector 59 */
UnimplementedISR, /* vector 58 */
UnimplementedISR, /* vector 57 */
UnimplementedISR, /* vector 56 */
UnimplementedISR, /* vector 55 */
UnimplementedISR, /* vector 54 */
UnimplementedISR, /* vector 53 */
UnimplementedISR, /* vector 52 */
UnimplementedISR, /* vector 51 */
UnimplementedISR, /* vector 50 */
UnimplementedISR, /* vector 49 */
UnimplementedISR, /* vector 48 */
UnimplementedISR, /* vector 47 */
UnimplementedISR, /* vector 46 */
UnimplementedISR, /* vector 45 */
UnimplementedISR, /* vector 44 */
UnimplementedISR, /* vector 43 */
UnimplementedISR, /* vector 42 */
UnimplementedISR, /* vector 41 */
UnimplementedISR, /* vector 40 */
UnimplementedISR, /* vector 39 */
UnimplementedISR, /* vector 38 */
UnimplementedISR, /* vector 37 */
UnimplementedISR, /* vector 36 */
UnimplementedISR, /* vector 35 */
UnimplementedISR, /* vector 34 */
UnimplementedISR, /* vector 33 */
UnimplementedISR, /* vector 32 */
UnimplementedISR, /* vector 31 */
UnimplementedISR, /* vector 30 */
UnimplementedISR, /* vector 29 */
UnimplementedISR, /* vector 28 */
UnimplementedISR, /* vector 27 */
UnimplementedISR, /* vector 26 */
UnimplementedISR, /* vector 25 */
UnimplementedISR, /* vector 24 */
UnimplementedISR, /* vector 23 */
UnimplementedISR, /* vector 22 */
UnimplementedISR, /* vector 21 */
UnimplementedISR, /* vector 20 */
UnimplementedISR, /* vector 19 */
UnimplementedISR, /* vector 18 */
UnimplementedISR, /* vector 17 */
UnimplementedISR, /* vector 16 */
UnimplementedISR, /* vector 15 */
UnimplementedISR, /* vector 14 */
UnimplementedISR, /* vector 13 */
UnimplementedISR, /* vector 12 */
UnimplementedISR, /* vector 11 */
UnimplementedISR, /* vector 10 */
UnimplementedISR, /* vector 09 */
Timer0_C0, /* vector 08 */
UnimplementedISR, /* vector 07 */
UnimplementedISR, /* vector 06 */
UnimplementedISR, /* vector 05 */
UnimplementedISR, /* vector 04 */
UnimplementedISR, /* vector 03 */
UnimplementedISR, /* vector 02 */
UnimplementedISR, /* vector 01 */
_Startup /* Reset vector */
};
在编译的时候,假如出现以下的错误提示
ERROR: Vector allocated at absolute address 0xFFFE overlaps with sections placed in segment xxxx
则说明_Startup()函数的绝对地址约束存在二义性。
可以直接打开对应工程文件的PRM文件,将最后的 “VECTOR 0 _Startup ”注释掉。
因为这句话的意思就是值,将_Startup 函数放在 0号中断向量的地方。
而上面我们自己定义的_vect[]表,的最后一个也是_Startup()函数,并且制定了绝对地址。如此一来就和VECTOR 0 _Startup 产生了冲突!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐