单片机 C语言 keil
单片机高手们,在keil环境下用C语言给单片机编程,调试的时候我发现子函数里面定义的变量在函数调用完之后,既不清零,也不消失我记得在VC环境下,这叫做局部变量,函数调用后...
单片机高手们,
在keil环境下用C语言给单片机编程,
调试的时候我发现子函数里面定义的变量在函数调用完之后,
既不清零,也不消失
我记得在VC环境下,这叫做局部变量,
函数调用后就自动释放内存了不是?
两者不一样么?谢谢! 展开
在keil环境下用C语言给单片机编程,
调试的时候我发现子函数里面定义的变量在函数调用完之后,
既不清零,也不消失
我记得在VC环境下,这叫做局部变量,
函数调用后就自动释放内存了不是?
两者不一样么?谢谢! 展开
4个回答
展开全部
在C语言里,是会释放掉局部变量的值的,在子函数里定义的变量,都是存放在
栈中,子函数一退出,栈也就跟着被释放掉。
但有一种方法可以保存函数里局部变量的值,就是加个static前缀去定义。如下:
static int a;
在函数退出以后,a的值就会保存起来,但应该要把该值的地址传出去,好以后使用。
不过这种做法很少,一般没人这么使用了。
关于static的用法,加在变量定义前,和加在函数定义前,都有什么作用,最好去做个
理解,到你以后找工作面试时做C考试题目这个基本必考。
栈中,子函数一退出,栈也就跟着被释放掉。
但有一种方法可以保存函数里局部变量的值,就是加个static前缀去定义。如下:
static int a;
在函数退出以后,a的值就会保存起来,但应该要把该值的地址传出去,好以后使用。
不过这种做法很少,一般没人这么使用了。
关于static的用法,加在变量定义前,和加在函数定义前,都有什么作用,最好去做个
理解,到你以后找工作面试时做C考试题目这个基本必考。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个是仿真环境的问题,或者你的子函数变量和全局变量有重名的。
对于单片机来说,一定会释放掉的。
对于单片机来说,一定会释放掉的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
童鞋,请你牢牢记住这一点,这是单片机,不是计算机。
单片机函数里的局部变量使用之后,只是把需要的结果COPY,用不着再使用程序将之清除,只要下次调用这个函数时有新的数据将其覆盖即可。何必要每次调用函数时去申请RAM,用过之后再清除再释放呢?单片机运行速度慢,51最快的也不过100MHz,对实时性的要求很高,何必要用多余的代码去干这些事?你的计算机CPU工作频率4GHz,没法比较啊。
另外,单片机平时运行时需要的RAM不过几十字节,遇到较大应用时也不过几十KB;而计算机动辄MB级别的RAM使用。
单片机每次调用函数时需要的RAM就是那固定地址的几个字节,而计算机可能是整个内存范围内的任意一个区间。就因为这一点,所以计算机才会做清除和释放的事情,而单片机不用。
单片机函数里的局部变量使用之后,只是把需要的结果COPY,用不着再使用程序将之清除,只要下次调用这个函数时有新的数据将其覆盖即可。何必要每次调用函数时去申请RAM,用过之后再清除再释放呢?单片机运行速度慢,51最快的也不过100MHz,对实时性的要求很高,何必要用多余的代码去干这些事?你的计算机CPU工作频率4GHz,没法比较啊。
另外,单片机平时运行时需要的RAM不过几十字节,遇到较大应用时也不过几十KB;而计算机动辄MB级别的RAM使用。
单片机每次调用函数时需要的RAM就是那固定地址的几个字节,而计算机可能是整个内存范围内的任意一个区间。就因为这一点,所以计算机才会做清除和释放的事情,而单片机不用。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询