求助,51单片机程序数据溢出。。。(keil函数指针)

2020-01-13 18:39发布

本帖最后由 OneRain 于 2018-6-18 13:18 编辑

很久没有搞51内核的MCU了,发现程序的局域变量数据经常被改的莫名奇妙。。。函数级数在4-5级,不是太深,但是好像经常表现出溢出导致局域变量数据被改。。。
见图: QQ截图20180617152836.png (27.22 KB, 下载次数: 0) 下载附件 2018-6-17 15:29 上传 ,函数1退出后,函数2的局域变量数据全部被修改的不成样子。。。
Program Size: data=74.1 xdata=207 const=1351 code=13749,我程序占有量发现data变量留的足够有啊。。。。求那个大神告知原因啊!!!
修改原因:添加具体错误原因,好让以后有人遇到这种错误的人,搜索到关键字的搜索到这个解决贴!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
lzf713
2020-01-14 03:56
局部变量有时候共用相同地址的RAM,但是,不同函数调用时候,会将原来的现场保护好的。比如有两个函数,一个叫a,一个叫b,他们都有一个局部变量,分别是aa,bb,并且共用同地址的存储器。正在执行函数a时候,使用aa。如果函数a还没有结束就调用函数b,在执行函数b之前就将aa压入堆栈了。当执行完函数b之后,自动将aa从堆栈里面弹出,恢复原来状态。

一周热门 更多>