使用C编译器+ICD2调试程序需要注意的问题
扫描二维码
随时随地手机看文章
因ICD2是在线仿真,所以会占用部分芯片资源。但编译器的链接文件不够聪明,不知道哪些资源会被ICD2占用,有可能链接器分配的ROM和RAM空间恰巧是被ICD2占用的,会引起用户程序和ICD2的调试程序发生冲突,通常表现为调试运行时程序会莫名其妙的复位,从而浪费大家的调试时间。那么如何让链接器知道哪些空间不分配给用户程序,而保留给ICD2呢?
下面是针对PICC,PICC18,MCC18,C30几个PIC开发中常见C编译器,基于MPLABIDE集成开发环境中给出的解决办法:
1.HITECHC+ICD2.
PICC和PICC18的设置一样,通过设置编译选项来实现。
编译程序前,在MPLABIDE中的PROJECT菜单下,按如下操作PROJECT->BUILDOPTIONS->PROJECT->PICCGlobal在PICCGlobal选项卡中选择"compileforICD",确定后就可以编译程序。
2.MCC18+ICD2
和PICC不一样,在MCC18下是选择合适的linkerscripts文件来实现,对于每个PIC18Fxxxx型号,在C:mcc18lkr文件夹,都有两个链接脚本文件,例如PIC18F452,分别是18f452.lkr和18f452i.lkr.
如果您要使用ICD2调试,请选用带i的链接文件编译.
如果打开18f452i.lkr,会看到代码区和数据区分别有:
“CODEPAGENAME=debugSTART=0x7DC0END=0x7FFFPROTECTED”
“DATABANKNAME=dbgsprSTART=0x5F4END=0x5FFPROTECTED”
这部分空间都是会被ICD2占用的,所以“PROTECTED”,不分配给用户程序。
3.C30+ICD2
C30是通过设置编译选项实现。
操作如下:MPLABIDE->PROJECT->BUILDOPTIONS->PROJECT->MPLABLINK30,选中“LinkforICD2”确定即可。
对于dsPIC和PIC24系列来说RAM区0800h-0822h是为ICD2保留的,如果编译时没有选择“linkforICD2”,全局变量很有可能分配到800h-822h间.这也是为什么可以在watch窗口看到全局变量的地址,但在值那栏却显示“reservedmemory”的原因之一。
来源:ks990次