keil C51局部变量不释放?

[复制链接]
jianyixiushen 发表于 2013-1-12 16:00 | 显示全部楼层
是不是 temp没赋初值?
明月小厨 发表于 2013-1-12 18:40 | 显示全部楼层
static在工程中只初始化一次;和全局变量相似,但并非全局可见;在什么地方定义则在相应的范围可见;
wangwang3008 发表于 2013-1-12 20:58 | 显示全部楼层
WHILE(!KEY);就OK了
icecut 发表于 2013-1-12 23:29 | 显示全部楼层
你这么搞是徒劳的.编译器就是迷宫.你走不出来的.
你唯一的方法就是按照标准c去设计....在内存快用满的时候keil编译会出错.小心点就好了...
ZOUWEN1 发表于 2013-1-12 23:34 | 显示全部楼层
大家做开发,一定要熟悉我们的开发系统和MCU的资料,其中讲到编译系统的参数,嵌入式C的扩展部分,比如中断如何表示,NOP指令、STOP指令等在此系统如何表示。只有熟悉了系统的资料,上面的问题也就不是问题。另外还有一个编码规则的问题,函数的内部变量申请时一定记得初始化哦。我想有人会有这方面的感受的。
ljxh401 发表于 2013-1-13 11:21 | 显示全部楼层
看反汇编最实际
linqing171 发表于 2013-1-16 23:19 | 显示全部楼层
原野之狼 发表于 2013-1-12 11:40
请问一下  
“寄存器+堆”传递  
是怎么回事呢?

局部变量(函数入口也包括在内)少的时候,用寄存器来存。
多到一定程度,用堆来存。而keil对于堆的访问是 direct寻址的,为了减小代码体积。
打开编译的map文件,就可以看到全局变量和sp之间的那个不同的子函数复用的RAM区间。
堆里面的数,再调用完一个函数后,并不销毁。等调用了下个函数,且其内部的局部变量覆盖了这个地址的数以后,才会真的销毁了。
lyn3210 发表于 2013-2-6 11:02 | 显示全部楼层
是这样的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部