使用C编译器+ICD2调试程序需要注意的问题
发布时间:2008/5/28 0:00:00 访问次数:1387
因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:\mcc18\lkr文件夹,都有两个链接脚本文件,例如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”的原因之一。
下面是针对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:\mcc18\lkr文件夹,都有两个链接脚本文件,例如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”的原因之一。
因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:\mcc18\lkr文件夹,都有两个链接脚本文件,例如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”的原因之一。
下面是针对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:\mcc18\lkr文件夹,都有两个链接脚本文件,例如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”的原因之一。