单片机的RAM和栈的关系??

玉怀一捧雪 2015-08-11 03:16:18
本人习惯在函数内开辟缓存,用于数据处理。
类似的函数写了10来个,编译器编译data居然是同步在增加。比如我函数内开了6个BUFF,编译后就Log显示就增加了6个data。
不明白我声明的又不是全局,函数内非静态变量存放在栈中的把。这和RAM有什么联系!
水货一枚,求科普
...全文
685 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuchouzhe 2015-08-21
  • 打赏
  • 举报
回复
keil51中,大的临时数据是无法放到栈中的,只能模拟栈,实际是变量重命名。
worldy 2015-08-12
  • 打赏
  • 举报
回复
keil对于局部变量一般不是使用栈生成代码
dceacho 2015-08-12
  • 打赏
  • 举报
回复
51的栈不是放在RAM中么?SP指针的那个 局部变量的增加可能会使RAM使用量增大也可能不变

void mian()
{
  while(1)
  {
    fun1();
    fun2();
  }
}
如果fun1有8bytes的局部变量,fun2只有2个bytes, 那在栈中应该会消耗8个bytes,按最大的来 这种情况下如果fun2局部变量由2个增加到4个,则栈中仍然会消耗8个,所以ram不增加, 连接时确定最长的堆栈使用情况,然后自动修改sp的初始值,确保堆栈不会溢出也不会出现浪费情况 最好来个有时间的人来具体验证下
of123 2015-08-12
  • 打赏
  • 举报
回复
你是怎么声明的?有初值吗?
zs0050 2015-08-11
  • 打赏
  • 举报
回复
试了一下 应该不增加的吧 你怎么判断增加的呢? 是在在编译的时候看到的吗?还是map文件里?贴一下你的源码和判断依据吧

27,370

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧