定义的结构数组如下:
struct _alarm_
{
unchar mode;
unchar name;
unchar age;
unchar class;
unchar num;
}alarm[20];
用Keil编译报错:
error C249: 'DATA': SEGMENT TOO LARGE
将Keil编译环境设定为Large模式编译通过了,但Proteus仿真LCD1602无法显示~~~~
请问怎么解决啊~~~
...没有外部存储的设备,现想用idata,请教idata使用,附程序
1 code 用来存储代码和常数,或者常数数组的,比如你程序定义的数组,如果不需要改动,即只是用来读取,不用赋值的,可以定义到code空间里,比如我们常用的7段数码管的显示数组,又或者NTC的表格,这些不需要改动,只用来读取的,定义到code里。2 data空间:单片机内部RAM的低128B,特点是速度最快,因为...
...idata空间到底怎么用,为什么我把变量定义到idata空间,编译后,data...
idata是内部RAM高128字节,你把变量定义为idata空间,就是放到内部RAM高128字节中,而Keil 编译结果的data,是指全部的内部RAM,而不单单指低128字节的RAM
keil C51内存模式中为什么没有IDATA?
你选了52单片机后,程序中是可以使用IDATA的,就是变量可以定义在IDATA区了。
为什么Keil C中idata不能用,是不是要在哪里设置一下?
从编译结果来看,你有好几个函数有实体但没有调用,这样是很浪费RAM的,因为KEIL因此会为这些函数中的局部变量都做了保留,相当于变成了全局变量来保存,如果你不想删除这些函数,那就教你个办法,在程序初始化阶段:i=0;if(i){ ...不需要调用的函数;...} 这样就能把RAM省下来了。记住,嵌入式...
在keil C51中使用结构体的问题
你的51单片机有512byte 那么肯定是 内部 直接 间接各128 外加外部256字节 你把那些大一点的数据全部改成 xdata 声明就可以了.当然如果你会控制ram大小的话..用idata 声明效率更好一点 例如 unsigned char yy;写个成 unsigned char xdata yy;(你看你自己的编译结果显示 data=137, xdata=0, code=...
keil5,编译出现错误,提示是段太大,怎么办?
如果有外部RAM,则定义到XRAM中,例如:xdata char datastr[2];能用BIT就不要用char,能用char 就不要用Int。做单片机的话, 还是必须要了解一下其存储结构, 最起码得知道data idata xdata所指的存储区域 idata 指向的片内ram ,大小范围为256字节,所以你一个数组定义在idata段内,不能超过256...
单片机Keil问题
先回答你第一个问题:DATALOOP: MOV @R0,A DJNZ R0,IDATALOOP 第一条是将A中的内容放入R0所指的地址中,如果R0的数值比较大的话,用单步运行就需要很长时间。有个方法可以解决,即在KEIL调试时,修改R0里的数值,将它变成1或者01H,就可以出循环了。第二个问题:你的程序是实现P1循环→P3循环→...
关于keil中的data和x
不能容纳过多的全局变量。为解决这个问题,可以考虑将部分变量移动到内部间接寻址区,如这样定义:unsigned char idata ucMyVariable;这样做可以优化内存使用,确保程序能够在单片机的内存限制下顺利编译和运行。记得根据实际内存需求,合理分配和管理数据在idata和xdata等不同存储区域。
关于keil中的data和xdata 问题
“我用的单片机有512字节的空间”即使有额外的SRAM,一般也需要设置寄存器打开的。而且只扩256字节的型号一般映射到页内空间,需通过MOVX与@Ri访问。所以你可以试试PDATA方式。“我的程序中的变量超过114字节就编译不通过了”应当将部分变量分配到内部间接寻址区,如下:unsigned char idata ucMyVariable;...
keil 给数组赋值 另一个变量的值不明改变
51的内部RAM(包括idata)总共才256个字节,还要保留一部分给堆栈使用,实际可用的也就200出头点,其他的变量和你的结构都在这个范围内,如果结构太大,那当然会侵占到其他变量了。你可以将这个结构变量定义到外部RAM中,我记得F120有几K的外部RAM的。单片机资源都是很紧张的,一定要精打细算啊。你看看...