南京晰视电子

keil溢出了怎么办(keil报错与解决方法)

本篇目录:

keil编译地址空间溢出

你内存用的太多了,超出了这款芯片的实际RAM容量,所以报错。好好把程序中的变量整理整理,不要定义太多的全局变量和静态变量,有些地方RAM能复用就复用,数组用多少就开多大,不要大手大脚。

:选择较大容量的单片机。或者如下操作。2:删除没有用的变量,全局变量。3:删除没有用到的函数体。4:将全局常量放到code代码去。5:能用局部变量就用局布变量。6:尽可能用指针操作数据。

keil溢出了怎么办(keil报错与解决方法)-图1

说明data空间已经不够用,原因是你可能有好多函数,而函数内部的局部变量又没有定义其空间,这种情况下,系统会将变量分配到你在Otions for Target 对话框里的设置的空间。

意思你的地址空间溢出了,再看下面:SPACE:DATA 意思是你的RAM内存溢出了。

用KEIL C只能写几个函数,多一个就会报错,是设置错误造成的,解决方法如下:首先在电脑中,双击打开【excel文件】。然后输入函数=ADDRESS(2,3)时,表示绝对引用,则结果显示【$C$2】;如图。

keil溢出了怎么办(keil报错与解决方法)-图2

keil编译出错,啊啊啊,好像挺严重,看不懂,求指教??

用KEIL出现syntax error near }一般是缺少“;”在“=”号附近有语法错误,双击该错误,光标会跳到该行,仔细检查这一行的上下行有没有错误,比如缺少“;”。

你这程序错误很多,这种情况用不着看这些提示,何况你又看不懂。还是重新查一下程序,后写的子函数后,不能编译了,那就逐个查子函数,可以先全部注释掉,再一个一个恢复,每恢复一个编译一下,就知是哪个子函数有错了。

你的程序中没有xdata 变量,说明在Keil设置中,内存模式的设置你选择了“small”,只能使用内部RAM,造成你的变量定义超过128Byte(其实除去工作寄存器组和堆栈,实际能使用的RAM少于128字节),这种错误一般应该在链接时出现。

keil溢出了怎么办(keil报错与解决方法)-图3

所以报错。好好把程序中的变量整理整理,不要定义太多的全局变量和静态变量,有些地方RAM能复用就复用,数组用多少就开多大,不要大手大脚。单片机使用内存都要精打细算的,咱们和写PC软件的兄弟可不能比啊。

我用keil编译的程序出错,不懂,求指导?数据地址空间溢出是怎么回事?

你内存用的太多了,超出了这款芯片的实际RAM容量,所以报错。好好把程序中的变量整理整理,不要定义太多的全局变量和静态变量,有些地方RAM能复用就复用,数组用多少就开多大,不要大手大脚。

说明data空间已经不够用,原因是你可能有好多函数,而函数内部的局部变量又没有定义其空间,这种情况下,系统会将变量分配到你在Otions for Target 对话框里的设置的空间。

优化优化变量吧,区区10k代码就把256字节用爆,你实在太大手大脚了,呵呵。能用局部变量的就别全局变量,能不用变量的就不用变量,分配数组要量力而行。

:选择较大容量的单片机。或者如下操作。2:删除没有用的变量,全局变量。3:删除没有用到的函数体。4:将全局常量放到code代码去。5:能用局部变量就用局布变量。6:尽可能用指针操作数据。

程序DATA区空间已超过指定单片机的DATA区空间,可以用keil C编译的时候压缩。优化代码大小步骤 第一步:project Option for Target “**” 打开如图 2界面。选择“target”,勾选上“Use MicroLIB”再编译。

单片机定时器1s溢出,如何设置

1、一种是以中断方式工作,即TF1置1并申请中断,响应中断后,执行中断服务程序,并由硬件自动使TF1清0;另一种以查询方式工作,即通过查询该位是否为1来判断是否溢出,TF1置1后必须用软件使TF1清0。

2、是的,但是必须打开总中断EA和定时器0中断ET0(即给中断寄存器赋值为0x82H),编写中断程序是需要从中断入口进入的,定时器0的中断入口地址是0x000B,可以在这个地址加一个跳转到你的中断服务程序。

3、使高8位移动到低8位的位置,再通过类型强制转换装入TH1。

4、要执行定时器中断,要在程序开始就打开定时器中断。当产生溢出后,程序会直接跳到中断程序(不用加跳转指令)。当中断程序执行完毕后,程序会跳回到执行中断程序前的程序处继续运行。至于如何打开定时器中断,请参考资料。

Keil编译51单片机RAM溢出解决方案

优化优化变量吧,区区10k代码就把256字节用爆,你实在太大手大脚了,呵呵。能用局部变量的就别全局变量,能不用变量的就不用变量,分配数组要量力而行。

第二种呢,就是修改STARTUP.A51文件,将堆栈设置大一些。然后将源程序与startup.a51分 别编译,统一链接。听说还有一种方法,用于消除编译器分配变量时产生的数据沟。可惜没用过,你可以查一下 KEIL的帮助文档。

你内存用的太多了,超出了这款芯片的实际RAM容量,所以报错。好好把程序中的变量整理整理,不要定义太多的全局变量和静态变量,有些地方RAM能复用就复用,数组用多少就开多大,不要大手大脚。

提示是说idata段溢出。这是片内的RAM,即内部寻址空间256字节。code空间上面已经说了,52是8kB。用人说C52比C51的存储空间大,是真的吗?如果是,那怎么我用C52的芯片,调用C52库,还是这样子的呢?上面已解释。

确实是程序代码超过了2KB的范围。可能的原因是:keilc没有破解,有2KB的代码限制。

加入ABSACC.H头文件,使用XBYTE关键字将部分变量定义到1024字节的XRAM中。这样你就有1024字节的RAM空间使用了。

到此,以上就是小编对于keil报错与解决方法的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位老师在评论区讨论,给我留言。

分享:
扫描分享到社交APP
上一篇
下一篇