PIC C18编译器 错误can not fit the section. 解决方法
时间:11-13
来源:互联网
点击:
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=accessramSTART=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=accesssfrSTART=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不分页)
Errors : 1
询问高人得知该错误为RAM分配超过256B
解决方法一为:
1、打开18f452.lkr
其关于RAM分配的为
ACCESSBANK NAME=accessramSTART=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=accesssfrSTART=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不分页)
PICC18编译器错 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)