HT-TECH 和ICD2
已有 863 次阅读2008-8-2 14:08
|系统分类:单片机|
会出现的问题
因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->PROJECT->PICC Global
在PICC Global选项卡中选择"compile for ICD",确定后就可以编译程序啦
2. MCC18 +ICD2
和PICC不一样,在MCC18下是选择合适的linker scripts文件来实现
对于每个PIC18Fxxxx型号,在C:\mcc18\lkr文件夹,都有两个链接脚本文件, 例如PIC18F452,分别是18f452.lkr和18f452i.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” 确定即可。
对
于dsPIC和PIC24系列来说RAM区0800h-0822h是为ICD2保留的,如果编译时没有选择“link for
ICD2”,全局变量很有可能分配到800h-822h间.
这也是为什么可以在watch窗口看到全局变量的地址,但在值那栏却显示“reserved memory” 的原因之一。