Keil C程序编译如下:
MAIN.C(15): error C249: 'IDATA': SEGMENT TOO LARGE
Target not created
部分用到缓存数组的源程序如下:
unsigned char idata huancun[320];
tmp=~huancun[i*8+ia];
huancun[ia]<<=1;
if(huancun[ia+1]&0x80)
huancun[ia]++;
huancun[ia]<<=1;
Keil C程序中定义的一维数组字节过大该怎么办?
做单片机的话, 还是必须要了解一下其存储结构, 最起码得知道data idata xdata所指的存储区域 idata 指向的片内ram ,大小范围为256字节,所以你一个数组定义在idata段内,不能超过256字节,超过就会报错。xdata指向的片外ram,大小范围为64KB,你可以将你需要的大容量数组定义在该段内。
单片机 编译好的代码太大 烧写不进去 怎么办
程序的大小和生成的hex大小没关系。而是看你的code区占用了多少,你的单片机有多大的code区,另外内存通常是运行中存储数据的。比8k的flash大的单片机太多了。code代码区 data片内 xdata片外
keil中数组太大,编译出错,该怎么解决
如果是51单片机的话,因为RAM资源很小,所以要尽量节约每一个字节RAM,如果是常量数组就定义成常量,例如 code char datastr[2]={1,2};如果有外部RAM,则定义到XRAM中,例如:xdata char datastr[2];能用BIT就不要用char,能用char 就不要用Int。
单片机中c程序数据超过256怎么办
如果是的话,那就尽量把全局变量改成局部变量,布尔量尽量都都定义成bit,放到bdata区,不要用char型,尽量少用局部数组,用指针。还有个大绝招,就是地址复用,在定义了变量后,用_at_来定义其具体的地址,可以重复,但要注意重复的变量会不会同时使用到 ...
由于写的c51程序超出了128B,没有外部存储的设备,现想用idata,请教idata...
单片机C语言里以下几种存储空间:1 code 用来存储代码和常数,或者常数数组的,比如你程序定义的数组,如果不需要改动,即只是用来读取,不用赋值的,可以定义到code空间里,比如我们常用的7段数码管的显示数组,又或者NTC的表格,这些不需要改动,只用来读取的,定义到code里。2 data空间:单片机内部RAM的...
C语言定义一个C程序数组 长度为10的阶乘3628800 定义的时候一直显示数组...
一次申请不了那么多内存的。可以分开申请,比如分成20块,则原下标为x的数,现在用*(p[x\/(3628800\/20)] + x%(3628800\/20))即可 int *p[20], i, j;for(i = 0; i < 20; i++){ p[i] = (int*)malloc(sizeof(int) * 3628800\/20);for(j = 0; j < 3628800\/20; j++){ (p...
关于单片机RAM的问题,定义大数组导致程序不好使,STC52单片机
52单片机用户可以使用的RAM最大从08H~FFH,也就是说只有248Byte,如果使用STC单片机,有些有内部扩展RAM,如果打开的话,你的程序是没有问题的,不过得定义成XDATA,普通的52是不行的。
单片机c语言程序中,数组最多能有几个元素?为什么我定定义了一个全局的...
原则上,C语言中数组所包含的元素个数理论上多少都行,如果要开一个很大的数组,比如int arrayint[10000][10000];在main()中声明该数组就会使应用程序退出,但是如果你把该数组的声明放在所有函数体之外,让它变成一个全局变量,就没有任何限制了,你想开多大的数组都可以。但在单片机c语言程序中,...
...提示我 data segment too large 我该怎么修改
int random_array[10][10][10];这个全局数组需要占用2000字节的空间,而默认的存储区域中只有128字节。你需要了解一下51平台相关基础知识,不要以为单片机有计算机那么多的资源。
51单片机中如何定义比较大的数组变量 比如 char[1024][10]
定义这种大的数组,你首先得有这么大的RAM才可以,不然肯定不好用。内部地址空间就别想了,肯定是放在外部。如果是常数数组,可以定义到代码里面,code char cc[1024][10],这种程序只能读,不能改,像字库点阵一般用这种。如果有足够的外部RAM,xdata char xx[1024][10]; 这是把数组定义到外部RAM...