winnie 发表于 2009-3-5 10:34:06

使用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->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=0x7FFFPROTECTED”
“DATABANKNAME=dbgsprSTART=0x5F4END=0x5FFPROTECTED”
这部分空间都是会被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窗口看到全局变量的地址,但在值那栏却显示“reservedmemory” 的原因之一。
页: [1]
查看完整版本: 使用C编译器+ICD2调试程序需要注意的问题