找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1303|回复: 7
收起左侧

51单片机的局部变量有生存周期这一说吗,为什么我用KEIL4仿真时监控局部变量的值,

[复制链接]
ID:1063563 发表于 2023-10-7 13:16 | 显示全部楼层 |阅读模式
51单片机的局部变量有生存周期这一说吗,为什么我用KEIL4仿真时监控局部变量的值,发现局部变量的数值一直不变都在呢,
不会变没。MAIN函数大循环时局部变量的值一直都在。也不会变没。

回复

使用道具 举报

ID:277550 发表于 2023-10-7 13:31 | 显示全部楼层
代码如何的。

局部变量,任何域,就在当前范围。
回复

使用道具 举报

ID:1095261 发表于 2023-10-7 13:32 | 显示全部楼层
没有吧
回复

使用道具 举报

ID:744809 发表于 2023-10-7 13:59 | 显示全部楼层
main函数里定义的局部变量应该是一直都在的。其他函数的局部变量,会在函数返回时释放
回复

使用道具 举报

ID:883242 发表于 2023-10-7 14:15 | 显示全部楼层
标准c语言的局部变量可以看《数据结构》递归那一章。

Keil c51不是标准c语言,不搞堆栈分配局部变量那一套,而是采用静态分配,举个栗子:

  1. f(){
  2. int i;
  3. }
  4. g(){
  5. int j,k;
  6. }
  7. main(){
  8. f();
  9. g();
  10. }
复制代码


在这个例子里面,局部变量i和j会共享同一个RAM地址,k就剩下来了,没有其他函数跟k共享同一个地址。
调用f()会改变g()的局部变量j的值,同样的调用g()会改变f()的局部变量i的值,但是只要不调用g()那么没有其他函数会改变k的值。
回复

使用道具 举报

ID:1063563 发表于 2023-10-12 23:31 | 显示全部楼层
Hephaestus 发表于 2023-10-7 14:15
标准c语言的局部变量可以看《数据结构》递归那一章。

Keil c51不是标准c语言,不搞堆栈分配局部变量那一 ...

为什么局部变量i和j会共享同一个RAM地址呢?
回复

使用道具 举报

ID:883242 发表于 2023-10-13 05:37 | 显示全部楼层
芯菲 发表于 2023-10-12 23:31
为什么局部变量i和j会共享同一个RAM地址呢?

编译器分析出来的,i和j不会同时被使用,共享同一地址节约空间啊!当然你一定要用让i和k共享同一空间也是可以的,你可以看最后生成的m51文件。
回复

使用道具 举报

ID:77589 发表于 2023-10-13 14:01 | 显示全部楼层
任何一个变量,都有生命周期,都有作用范围。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表