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

 找回密码
 立即注册
搜索
电子烟方案单片机单片机开发深圳单片机开发
单片机方案国产单片机8位单片机电子烟方案开发
查看: 3933|回复: 0
打印 上一主题 下一主题

使用C编译器+ICD2调试程序需要注意的问题

[复制链接]
跳转到指定楼层
1#
发表于 2009-4-18 17:42:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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” 的原因之一。





您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|公司首页|Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 ( 粤ICP备09008620号 )

GMT+8, 2024-11-24 04:12 , Processed in 0.066943 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表