英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流
标题:
使用C编译器+ICD2调试程序需要注意的问题
[打印本页]
作者:
kingman
时间:
2009-4-18 17:37
标题:
使用C编译器+ICD2调试程序需要注意的问题
因
ICD2
是在线仿真,所以会占用部分芯片资源。但编译器的链接文件不够聪明,不知道哪些资源会被
ICD2
占用,有可能链接器分配的
ROM
和
RAM
空间恰巧是被
ICD2
占用的,会引起用户程序和
ICD2
的调试程序发生冲突,通常表现为调试运行时程序会莫名其妙的复位,从而浪费大家的调试时间。
那么如何让链接器知道哪些空间不分配给用户程序,而保留给
ICD2
呢?
下面是针对
PICC, PICC18, MCC18, C30
几个
PIC
开发中常见
C
编译器,
基于
MPLAB IDE
集成开发环境中给出的解决办法:
1. HITECH C + ICD2.
PICC
和
PICC18
的设置一样,通过设置编译选项来实现。
编译程序前,在
MPLAB IDE
中的
PROJECT
菜单下,按如下操作
PROJECT->BUILD OPTIONS->
ROJECT->
ICC Global
在
PICC Global
选项卡中选择"
compile for ICD
",确定后就可以编译程序啦
2. MCC18 +ICD2
和
PICC
不一样,在
MCC18
下是选择合适的
linker scripts
文件来实现
对于每个
PIC18Fxxxx
型号,在
C:\mcc18\lkr
文件夹,都有两个链接脚本文件,
例如
PIC18F452
,分别是
18f
452.lkr
和
18f
452i.lkr.
如果您要使用
ICD2
调试
,
请选用带
i
的链接文件编译
.
如果打开
18f
452i.lkr
,
会看到代码区和数据区分别有:
“CODEPAGE NAME=debug START=0x7DC0 END=0x7FFF PROTECTED”
“DATABANK NAME=dbgspr START=0x5F4 END=0x5FF PROTECTED”
这部分空间都是会被
ICD2
占用的,
所以
“PROTECTED”,
不分配给用户程序。
3.C30+ICD
2
C30
是通过设置编译选项实现。
操作如下:
MPLAB IDE->
ROJECT-> BUILD OPTIONS->
ROJECT->MPLAB LINK30,
选中
“Link for ICD2”
确定即可。
对于
dsPIC
和
PIC24
系列来说
RAM
区
0800h-0822h
是为
ICD2
保留的,如果编译时没有选择
“link for ICD2”
,全局变量很有可能分配到
800h-822h
间
.
这也是为什么可以在
watch
窗口看到全局变量的地址,但在值那栏却显示
“reserved memory”
的原因之一。
欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://enroobbs.com/)
Powered by Discuz! X3.2