调试失败信息:
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文件中定义的。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |