发新帖我要提问
12
返回列表
打印

keil C51局部变量不释放?

[复制链接]
楼主: W_Controller
手机看帖
扫描二维码
随时随地手机跟帖
21
是不是 temp没赋初值?

使用特权

评论回复
22
明月小厨| | 2013-1-12 18:40 | 只看该作者
static在工程中只初始化一次;和全局变量相似,但并非全局可见;在什么地方定义则在相应的范围可见;

使用特权

评论回复
23
wangwang3008| | 2013-1-12 20:58 | 只看该作者
WHILE(!KEY);就OK了

使用特权

评论回复
24
icecut| | 2013-1-12 23:29 | 只看该作者
你这么搞是徒劳的.编译器就是迷宫.你走不出来的.
你唯一的方法就是按照标准c去设计....在内存快用满的时候keil编译会出错.小心点就好了...

使用特权

评论回复
25
ZOUWEN1| | 2013-1-12 23:34 | 只看该作者
大家做开发,一定要熟悉我们的开发系统和MCU的资料,其中讲到编译系统的参数,嵌入式C的扩展部分,比如中断如何表示,NOP指令、STOP指令等在此系统如何表示。只有熟悉了系统的资料,上面的问题也就不是问题。另外还有一个编码规则的问题,函数的内部变量申请时一定记得初始化哦。我想有人会有这方面的感受的。

使用特权

评论回复
26
ljxh401| | 2013-1-13 11:21 | 只看该作者
看反汇编最实际

使用特权

评论回复
27
linqing171| | 2013-1-16 23:19 | 只看该作者
原野之狼 发表于 2013-1-12 11:40
请问一下  
“寄存器+堆”传递  
是怎么回事呢?

局部变量(函数入口也包括在内)少的时候,用寄存器来存。
多到一定程度,用堆来存。而keil对于堆的访问是 direct寻址的,为了减小代码体积。
打开编译的map文件,就可以看到全局变量和sp之间的那个不同的子函数复用的RAM区间。
堆里面的数,再调用完一个函数后,并不销毁。等调用了下个函数,且其内部的局部变量覆盖了这个地址的数以后,才会真的销毁了。

使用特权

评论回复
28
lyn3210| | 2013-2-6 11:02 | 只看该作者
是这样的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则