首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]DG128B调试遇到的中断向量问题

[求助]DG128B调试遇到的中断向量问题

调试失败信息:

Link Error : L1108: Initializing of Vector Timer_Int failed because of over- or underflow of vector value

Link Error : Link failed

其中Timer_Int为时钟中断 函数原型:

#pragma TRAP_PROC

void Timer_Int(void) //定时中断CAN通信

{ }

中断入口: VECTOR ADDRESS 0x0000FFCA Timer_Int

请教高手是什么原因link失败,找了很久都没搞清楚。我查看了下link map 发现装入中断入口的地址很大:

*********************************************************************

VECTOR-ALLOCATION SECTION Address InitValue InitFunction

-----------------------------------------------------------------------------------------

0xFFCA 0x3881AA Timer_Int /*此为不正常的,16位的单片机应该是16bit的,此处什么原因造成?

0xFFFE 0xC000 _Startup /*正常情况下的,中断入口内容

*********************************************************************

中断函数(入口地址)必须放入非分页地址中。

论坛中有很多相关的帖子,搜索一下吧。

海纳百川  有容乃大

是要放到非分页地址中,我的疑问就是怎么保证它是在非分页地址中,是不是在.prm文件中?

另外:prm中

PLACEMENT
TimerInt,
_PRESTART, /* Used in HIWARE format: jump to _Startup at the code start */
STARTUP, /* startup data structures */
ROM_VAR, /* constant variables */
STRINGS, /* string literals */
VIRTUAL_TABLE_SEGMENT, /* C++ virtual table segment */
NON_BANKED, /* runtime routines which must not be banked */
COPY /* copy down information: how to initialize variables */
/* in case you want to use ROM_4000 here as well, make sure
that all files (incl. library files) are compiled with the
option: -OnB=b */
INTO ROM_C000 /*, ROM_4000*/;
DEFAULT_ROM INTO PAGE_38,PAGE_39,PAGE_3A,PAGE_3B,PAGE_3C,PAGE_3D;
DEFAULT_RAM INTO RAM;
END

是什么意思,有没有什么文档或者资料可也看下。

用#pragma CODE_SEG NON_BANKED申明就可将代码放入非分页地址中。

这段PRM文件中的说明就是将不同的数据和代码放入相应的段中,段的地址也是在PRM文件中定义的。

海纳百川  有容乃大
返回列表