英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

标题: 使用C编译器+ICD2调试程序需要注意的问题 [打印本页]

作者: winnie    时间: 2009-3-5 10:34
标题: 使用C编译器+ICD2调试程序需要注意的问题
ICD2是在线仿真,所以会占用部分芯片资源。但编译器的链接文件不够聪明,不知道哪些资源会被ICD2占用,有可能链接器分配的ROMRAM空间恰巧是被ICD2占用的,会引起用户程序和ICD2的调试程序发生冲突,通常表现为调试运行时程序会莫名其妙的复位,从而浪费大家的调试时间。
那么如何让链接器知道哪些空间不分配给用户程序,而保留给ICD2呢?

下面是针对PICC, PICC18, MCC18, C30几个PIC开发中常见C编译器,
基于MPLAB IDE 集成开发环境中给出的解决办法:

1. HITECH C + ICD2.
  PICC
PICC18的设置一样,通过设置编译选项来实现。
编译程序前,在MPLAB IDE中的PROJECT菜单下,按如下操作
PROJECT->BUILD OPTIONS->PROJECT->PICC Global
  
PICC Global选项卡中选择"compile for ICD",确定后就可以编译程序啦

2. MCC18 +ICD2
PICC不一样,在MCC18下是选择合适的linker scripts文件来实现
对于每个PIC18Fxxxx型号,在C:\mcc18\lkr文件夹,都有两个链接脚本文件,
例如PIC18F452,分别是18f452.lkr18f452i.lkr.
如果您要使用ICD2调试, 请选用带i的链接文件编译.
如果打开18f452i.lkr
会看到代码区和数据区分别有:
“CODEPAGE NAME=debug START=0x7DC0    END=0x7FFF  PROTECTED”
“DATABANK  NAME=dbgspr  START=0x5F4  END=0x5FF  PROTECTED”
这部分空间都是会被ICD2占用的,
所以“PROTECTED”,不分配给用户程序。



3.C30+ICD2
C30
是通过设置编译选项实现。
操作如下:MPLAB IDE->PROJECT-> BUILD OPTIONS->PROJECT->MPLAB LINK30, 选中
“Link for ICD2”
确定即可。
对于dsPICPIC24系列来说RAM0800h-0822h是为ICD2保留的,如果编译时没有选择“link for ICD2”,全局变量很有可能分配到800h-822h. 这也是为什么可以在watch窗口看到全局变量的地址,但在值那栏却显示“reserved  memory” 的原因之一。





欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://enroobbs.com/) Powered by Discuz! X3.2