keil调试:局部变量地址和全局变量地址重叠

原创 2015年11月21日 13:10:50

最近keil中调试STM32程序时,出现的问题是局部变量冲掉了全局变量的数据。
查资料,原因是栈太小,或者说是自己定义的局部变量太大。局部变量存放在栈中,栈在RAM区,由系统自动管理,查看map文件可以看到栈区空间位于在系统计算的实际需要的RAM大小的最后部分(不是RAM区的最后),栈的大小在系统启动文件中默认设置好了,Stack_Size EQU 0x00000400,只有1k,而我在定义局部变量时,搞了个4k的数组,栈完全不够装不够装,于是…,系统对这个问题编译也没有报错,解决办法可以修改代码,也可以修改栈尺寸,只要RAM够用就行。
修改栈的大小,编译后ZI-data值会相应变化,其他值不变。(Program Size: Code=35360 RO-data=8816 RW-data=132 ZI-data=11764, Code + RO-data + RW-data代表的是占用FLASH的大小,RW-data+ZI-data代表的是占用RAM的大小 )

参考文章:
stm32 堆和栈(stm32 Heap & Stack)【worldsing笔记】 - slj_win的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/slj_win/article/details/16906141

Keil C51中变量和函数的绝对地址定位问题:

Keil C51中变量和函数的绝对地址定位问题: 1.  变量绝对地址定位        1)    在定义变量时使用 _at_ 关键字加上地址就可.               e.g.  ...
  • skysword2009
  • skysword2009
  • 2016年06月07日 16:57
  • 3106

keil 变量分配

keil中,全局变量编译之后,就会分配一个地址,此地址相对这个变量是唯一的,不会被改变; 局部变量在编译后不会分配地址,当执行到此函数时才会给其分配地址,退出此函数后就会消亡; 以上变量存储在数据...
  • aiwozhonghuajin
  • aiwozhonghuajin
  • 2013年04月25日 15:17
  • 903

keil 局部变量不能查看值,显示为not in scope

 0级优化: 1、 常数折叠:只要有可能,编译器就执行将表达式化为常数数字的计算,其中包括运行地址的计算。 2、 简单访问优化:对8051系统的内部数据和位地址进行访问优化。 3、 跳转优...
  • A_A6ss
  • A_A6ss
  • 2014年09月01日 04:25
  • 3504

Keil C 全局变量和局部变量的直接对话诱发的bugger

Keil C UV3.0 环境下,有AB两个函数。A函数中有如下代码:定义局部变量i;  if(局部变量i > 全局变量K){     。。。。。。} B函数中有如下代码:定义局部变量i;if(局部变...
  • duojinian
  • duojinian
  • 2009年10月06日 15:56
  • 1407

Keil调试局部变量显示"not in scope"的问题解决

Keil调试局部变量显示”not in scope”的问题解决在调试STM32的时候,查看变量值的时候,变量值总是显示”not in scope”,无法看到变量被赋的值。出现这种情况的原因是这个局部变...
  • LiYuan199118
  • LiYuan199118
  • 2016年01月01日 22:52
  • 2642

keil mdk调试过程中查看局部变量的方法

上次调试STM32做了一次总结,此次在调试nordic 51822时发现局部变量地址给不出任何信息, 导致无法查看局部变量值。通过和STM32的设置进行必较发现C/C++的编译器等级设置过高,而将 一...
  • yd4330152763132
  • yd4330152763132
  • 2017年11月03日 16:54
  • 180

Keil调试程序如何查看变量

第一个问题:调试时候想实时查看某一变量变化? view 菜单下的 watch windows,全局变量才能查看点击打开链接 比如要查看u8 adcx的值变化,如下: 全速运行后,如下: 无法...
  • sinat_36330809
  • sinat_36330809
  • 2017年06月28日 17:10
  • 3352

C++中局部和全局变量的地址分配

知识储备:1. 内存的分区:代码区,数据区,堆,栈。 四个区域司职不同,相互配合。                   2. 变量的分类以及初始化情况:局部变量,全局变量,静态的,非静态的。C+...
  • u012273127
  • u012273127
  • 2016年11月22日 11:12
  • 1198

Keil C 中全局变量的使用

Keil C 中全局变量的使用 在KEIL C中,有多个源文件使用到全局变量时,可以在一个源文件中定义全局变量,在另外的源文件中用extern 声明该变量,说明该变量定义在别的文件中,将其作用域扩展...
  • qq1987924
  • qq1987924
  • 2014年07月07日 20:22
  • 2651

Keil C51中变量和函数的绝对地址定位问题

Keil C51中变量和函数的绝对地址定位问题: 1.  变量绝对地址定位        1)    在定义变量时使用 _at_ 关键字加上地址就可.               e.g. ...
  • phenixyf
  • phenixyf
  • 2013年02月28日 09:59
  • 6259
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:keil调试:局部变量地址和全局变量地址重叠
举报原因:
原因补充:

(最多只允许输入30个字)