飞思卡尔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 产生了冲突!
相关文章推荐
- 自定义程序入口的相关问题
- 微信小程序开发过程中tabbar页面显示的相关问题及解决办法
- 自定义程序入口的相关问题
- 微信小程序开发过程中tabbar页面显示的相关问题及解决办法
- SQL安装过程中安装程序挂起问题解决
- 程序调用查询数据存储过程的问题
- 自定义安装过程当中遇到的不能找到installstate文件问题
- SQL安装过程中安装程序挂起问题解决
- 在绘图程序编写过程中遇到的问题~
- SQL SERVER问题解决:已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: 命名管道提供程序, error: 0 - 管道的另一端上无任何进程。)
- ++编译过程中"没有找到MFC80UD.DLL,因此这个程序未能启动.重新安装应用程序可能会修复此问题"? 的彻底解决
- Swing 写的客户端程序在java web start 运行,多语言过程中,JOptionPane.showMessageDialog() 按钮多语言问题
- Windows启动过程加载程序问题
- Axure RP Pro - 相关问题 - master主控文档的behavior行为是custom widget自定义部件时丢失raised event可触发事件
- C++编译过程中"没有找到MFC80UD.DLL,因此这个程序未能启动.重新安装应用程序可能会修复此问题"? 的彻底解决
- 本文给出了一种方便实用的解决大文件的读取、存储等处理的方法,并结合相关程序代码对具体的实现过程进行了介绍
- 关于自定义成员资格和角色管理授权提供程序的问题
- Win2000/XP 打开方式-选择程序错误相关问题
- C++编译过程中"没有找到MFC80UD.DLL,因此这个程序未能启动.重新安装应用程序可能会修复此问题"? 的彻底解决
- Axure RP Pro - 相关问题 - 修改自定义样式对已应用该样式部件的逻辑