请选择 进入手机版 | 继续访问电脑版

EDABOSS电子论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 588|回复: 0

[转帖] PIC C18编译器 错误can not fit the section. 解决方法

[复制链接]

22

主题

1

回帖

241

E币

技术员

Rank: 2

积分
45
发表于 2017-4-25 14:16:21 | 显示全部楼层 |阅读模式
Error - section '.udata_main.o' can not fit the section. Section '.udata_main.o' length=0x00000606
Errors    : 1

询问高人得知该错误为RAM分配超过256B

解决方法一为:

1、打开18f452.lkr

其关于RAM分配的为

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=0x5FF
ACCESSBANK NAME=accesssfr  START=0xF80          END=0xFFF          PROTECTED

SECTION    NAME=CONFIG     ROM=config

STACK SIZE=0x100 RAM=gpr5

2、将其中gpr0范围改为START=0x80          END=0x4FF

如下:

DATABANK   NAME=gpr0       START=0x80           END=0x4FF

其余屏蔽即可。gpr5为堆栈地址,不作休改。

3、重新编译,OK~~

方法二: 自己创建一个数组区域存放大数组 (可以参考18f452.lkr文件里面的分页情况)
       对于 MPLAB C18 编译器,数据可以放入数据存储器或者程序存储器。如果没有用户
提供的附加代码,片内程序存储器中的数据只能读不能写。如果没有用户提供的附加
代码,片外程序存储器中的数据一般是只能读或者只能写。
例如,下面的语句为静态分配的未初始化数据 (udata)声明了一个位于绝对地址
0x120的段:
#pragma udata my_new_data_section=0x120
rom 关键字告知编译器应该将变量放入程序存储器。编译器会把这个变量分配到当前
的 romdata  型段。例如:
#pragma romdata const_table
const rom char my_const_array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
/* Resume allocation of romdata into the default section */
#pragma romdata
链接器强制将 romdata段放入程序存储区,将 udata和 idata段放入数据存储区;
然而,数据段也可以位于指定的存储区。可以使用链接器描述文件中的 SECTION 伪
指令把一个段分配到一个特定的存储区。

方法三:将数据定义到ROM当中 (ROM不分页)
积分规则
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|EDABOSS电子论坛

GMT+8, 2024-3-29 18:42 , Processed in 0.038411 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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