打印

MPLAB _C18调试出现Restricted Memory

[复制链接]
2745|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhimagod|  楼主 | 2013-3-13 10:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在使用MPLAB调试一个程序时,没加link文件时正常的一个变量在加了link文件后其值变为了Restricted Memory,不知何故
芯片是PIC18F46J50
定义变量时使用了"#pragma udata gpr1"或其他的段名也没效果,定义段和分配段这一部分理解的比较模糊,望高人指点
lkr文件如下
LIBPATH .

FILES c018i.o
FILES clib.lib
FILES p18F46J50.lib

CODEPAGE   NAME=boot       START=0x0            END=0x17FF         PROTECTED
CODEPAGE   NAME=vectors    START=0x1800         END=0x1829         PROTECTED
CODEPAGE   NAME=page       START=0x182A         END=0xFFFF

//CODEPAGE   NAME=idlocs     START=0x200000       END=0x200007       PROTECTED
CODEPAGE   NAME=config     START=0x300000       END=0x300007       PROTECTED
CODEPAGE   NAME=devid      START=0x3FFFFE       END=0x3FFFFF       PROTECTED
//CODEPAGE   NAME=eedata     START=0xF00000       END=0xF000FF       PROTECTED

ACCESSBANK NAME=accessram  START=0x0            END=0x5F
DATABANK   NAME=gpr0       START=0x60           END=0xFF
DATABANK   NAME=gpr1       START=0x100          END=0x1FF
DATABANK   NAME=gpr2       START=0x200          END=0x2FF
DATABANK   NAME=gpr3       START=0x300          END=0x3FF
DATABANK   NAME=usb4       START=0x400          END=0x4FF          PROTECTED
DATABANK   NAME=unused_usb START=0x500          END=0x7FF
DATABANK   NAME=gpr8       START=0x800          END=0x8FF
DATABANK   NAME=gpr9       START=0x900          END=0x9FF
DATABANK   NAME=gpr10       START=0xA00          END=0xAFF
DATABANK   NAME=gpr11       START=0xB00          END=0xBFF
DATABANK   NAME=gpr12       START=0xC00          END=0xCFF
DATABANK   NAME=gpr13       START=0xD00          END=0xDFF
DATABANK   NAME=gpr14       START=0xE00          END=0xEFF
DATABANK   NAME=gpr15       START=0xF00          END=0xF5F                       
ACCESSBANK NAME=accesssfr  START=0xF60          END=0xFFF          PROTECTED

SECTION    NAME=CONFIG     ROM=config
SECTION    NAME=ScriptBuffer      RAM=unused_usb

STACK SIZE=0x100 RAM=gpr3
沙发
yewuyi| | 2013-3-14 09:11 | 只看该作者
定义段一般是在连接器中,分配段一般由编译器自动完成,如果你不懂如何定义和分配的话,那你就不要随便用,直接用编译器的默认定义即可。

使用特权

评论回复
板凳
zhimagod|  楼主 | 2013-3-16 09:50 | 只看该作者
本帖最后由 zhimagod 于 2013-3-16 09:51 编辑

多谢斑竹的关注!
现在需要做bootloader需要把1800之前的ROM空出来做更新用,用USB又需要一段长RAM才用的连接描述文件的,
目前我的理解是#pragma udata 之后可以写一个绝对地址也可以写接链接描述文件中定义好的段名,然后下面的数据就会被放到里面,不知道这种理解对不对

使用特权

评论回复
地板
zhimagod|  楼主 | 2013-3-18 19:19 | 只看该作者
问题已经解决,在某些定义之前手动分配RAM可以解决这个问题,不过已然不明白原理……
网上关于这方面的资料感觉比较少,希望有明白的大侠来帮我讲下或者给了参考资料也好,在下感激不尽

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:○●●○○○●●○ ●○○●○●○○● ●○○●○●○○● ●○○●○●○○● ○●●○○○●●○

15

主题

384

帖子

1

粉丝