OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2319|回复: 3

关于函数的局部变量问题 C51编译模式下

[复制链接]

37

主题

204

帖子

0

精华

高级会员

Rank: 4

积分
717
金钱
717
注册时间
2016-6-10
在线时间
191 小时
发表于 2019-2-26 10:47:19 | 显示全部楼层 |阅读模式
100金钱
void task2()
{
        int a = 0;
        while(1)
        {
                delay();
                SMG_Dis_number(b);
                a++;
        }
}

如上图函数,在keil中编译,想问当进入函数delay()之后局部变量a的数据是如何保存的呢?同时还想问一下局部变量是存储到普通的内存中还是任务堆栈里呢?

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-2-26 10:47:20 | 显示全部楼层
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4307
金钱
4307
注册时间
2018-6-30
在线时间
808 小时
发表于 2019-2-26 12:42:46 | 显示全部楼层
局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储
业精于勤荒于嬉;行成于思毁于随!
回复

使用道具 举报

37

主题

204

帖子

0

精华

高级会员

Rank: 4

积分
717
金钱
717
注册时间
2016-6-10
在线时间
191 小时
 楼主| 发表于 2019-2-27 11:54:24 | 显示全部楼层

原子哥,对于MCS51来说是保存在内存中的,我调试过代码,从父函数进入子函数时,sp指针加二,刚好等于子函数的返回地址。对于ARM是怎么样是不清楚的。怪我没把问题写清楚
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 17:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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