打印

C18编译器下的Lkr问题,请大家帮帮忙

[复制链接]
3089|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
请看一下这两个图上的相关改动会带来什么影响?

2.jpg (140.83 KB )

2.jpg

1.jpg (120.41 KB )

1.jpg
沙发
huangxz| | 2013-1-24 22:44 | 只看该作者
不是一个芯片的吧,很多都不一样啊

使用特权

评论回复
板凳
zdhlixiang2006|  楼主 | 2013-1-25 09:59 | 只看该作者
huangxz 发表于 2013-1-24 22:44
不是一个芯片的吧,很多都不一样啊

晕,发错了,晚上回去再补个图

使用特权

评论回复
地板
zdhlixiang2006|  楼主 | 2013-1-25 18:30 | 只看该作者
这个是库里自带的文件,编译器为MPLAB C18 版本为3.30
// File: 18f452i.lkr
// Sample ICD2 linker script for the PIC18F452 processor

LIBPATH .

FILES c018i.o
FILES clib.lib
FILES p18f452.lib

CODEPAGE   NAME=page       START=0x0               END=0x7DBF
CODEPAGE   NAME=debug      START=0x7DC0            END=0x7FFF         PROTECTED
CODEPAGE   NAME=idlocs     START=0x200000          END=0x200007       PROTECTED
CODEPAGE   NAME=config     START=0x300000          END=0x30000D       PROTECTED
CODEPAGE   NAME=devid      START=0x3FFFFE          END=0x3FFFFF       PROTECTED
CODEPAGE   NAME=eedata     START=0xF00000          END=0xF000FF       PROTECTED

ACCESSBANK NAME=accessram  START=0x0            END=0x7F
DATABANK   NAME=gpr0       START=0x80           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=gpr4       START=0x400          END=0x4FF
DATABANK   NAME=gpr5       START=0x500          END=0x5F3
DATABANK   NAME=dbgspr     START=0x5F4          END=0x5FF          PROTECTED
ACCESSBANK NAME=accesssfr  START=0xF80          END=0xFFF          PROTECTED

SECTION    NAME=CONFIG     ROM=config

STACK SIZE=0x100 RAM=gpr4
下面是某人修改后的
// Sample linker command file for 18F452i used with MPLAB ICD 2
// $Id: uc-18f452i.lkr,v 1.1 2002/10/31 05:12:25 nb Exp $

LIBPATH  .

FILES c018i.o
FILES clib.lib
FILES p18f452.lib

CODEPAGE   NAME=vectors  START=0x0        END=0x29       PROTECTED
CODEPAGE   NAME=page     START=0x2A       END=0x7DBF
CODEPAGE   NAME=debug         START=0x7DC0     END=0X7FFF     PROTECTED
CODEPAGE   NAME=idlocs   START=0x200000   END=0x200007   PROTECTED
CODEPAGE   NAME=config   START=0x300000   END=0x30000D   PROTECTED
CODEPAGE   NAME=devid    START=0x3FFFFE   END=0x3FFFFF   PROTECTED
CODEPAGE   NAME=eedata   START=0xF00000   END=0xF000FF   PROTECTED

ACCESSBANK  NAME=accessram  START=0x0      END=0x7F
DATABANK    NAME=gram       START=0x80     END=0x5F3
DATABANK    NAME=dbgspr     START=0x5F4    END=0x5FF    PROTECTED
ACCESSBANK  NAME=accesssfr  START=0xF80    END=0xFFF    PROTECTED

SECTION           NAME=CONFIG     ROM=config

STACK SIZE=0x030

从表面来看,它把几个RAM的GRP分区合并了,然后还修改了堆栈的大小,请问懂这个的高人,他修改这个可能是干嘛用的呢?

使用特权

评论回复
5
zdhlixiang2006|  楼主 | 2013-1-26 10:06 | 只看该作者
看来21论坛真是没人了

使用特权

评论回复
6
sky大花猫| | 2013-1-26 10:46 | 只看该作者
看不懂。。

使用特权

评论回复
7
huangxz| | 2013-1-26 14:03 | 只看该作者
zdhlixiang2006 发表于 2013-1-26 10:06
看来21论坛真是没人了

在国内几乎没多少人去关注lkr文件的问题,一般情况下在默认的section分配不能满足自己需求的时候才会考虑修改lkr文件,必须承认现在我对icd2 的调试的机理都不清楚,当然也没打算去了解:lol,所以只能对你的心情表示理解。如果你对此有深度研究,也希望能过放到论坛上给大家一定知识补充.:P,对于一般的网友,还是建议不要去搞这些了,毕竟在国人几乎每个搞技术的人压力都很大,尽早实现产品才能有生存的资本。

使用特权

评论回复
8
zdhlixiang2006|  楼主 | 2013-1-26 18:14 | 只看该作者
huangxz 发表于 2013-1-26 14:03
在国内几乎没多少人去关注lkr文件的问题,一般情况下在默认的section分配不能满足自己需求的时候才会考虑 ...

哦,此贴我要等到高人出现再结:Q

使用特权

评论回复
9
diweo| | 2013-1-27 16:47 | 只看该作者
按照默认lkr的设置,对象的最大容量只有256字节。他把所有ram连起来,可能是程序里面有容量大于256的对象。
若要仔细研究的话,请参考《C18用户指南》。

默认情况下, MPLAB C18 假定对象不跨越存储区边界。可以创建长度大于256 字节
的对象,但要遵循下面的步骤来创建一个多存储区对象:
1. 必须使用#pragma idata或#pragma udata伪指令将对象分配到自己的段中。
#pragma udata buffer_scn
static char buffer[0x180];
#pragma udata
2. 对对象的访问必须通过指针来进行。
char * buf_ptr = &buffer[0];
...
// examples of use
buf_ptr[5] = 10;
if (buf_ptr[275] > 127)
...
3. 必须在链接描述文件中创建一个跨越多个存储区的新区域。
修改前的链接描述文件:
DATABANK NAME=gpr2 START=0x200 END=0x2FF
DATABANK NAME=gpr3 START=0x300 END=0x3FF
修改后的链接描述文件:
DATABANK NAME=big START=0x200 END=0x37F PROTECTED
DATABANK NAME=gpr3 START=0x380 END=0x3FF
4. 必须将对象所在的段(步骤1 中创建)分配到这个新区域(步骤3 中创建)。添
加一条SECTION 伪指令到链接描述文件。
SECTION NAME=buffer_scn RAM=big

使用特权

评论回复
10
zdhlixiang2006|  楼主 | 2013-1-28 22:00 | 只看该作者
diweo 发表于 2013-1-27 16:47
按照默认lkr的设置,对象的最大容量只有256字节。他把所有ram连起来,可能是程序里面有容量大于256的对象。 ...

我们都知道PIC有很特别的硬件堆栈,但是这个Lkr里面最后指定的应该是软件堆栈,那个是根据什么来设置的呢

使用特权

评论回复
11
diweo| | 2013-1-30 20:08 | 只看该作者
zdhlixiang2006 发表于 2013-1-28 22:00
我们都知道PIC有很特别的硬件堆栈,但是这个Lkr里面最后指定的应该是软件堆栈,那个是根据什么来设置的呢 ...

请仔细阅读《C18用户指南》

使用特权

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

本版积分规则

个人签名:沐浴着XX的春风,义无反顾游荡在马勒戈壁

21

主题

523

帖子

2

粉丝