OpenEdv-开源电子网

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

局部变量,数组和一个全局的变量产生了冲突,占用同一块数据空间

[复制链接]

1

主题

5

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2020-3-20
在线时间
4 小时
发表于 2023-3-8 15:00:35 | 显示全部楼层 |阅读模式
5金钱
1678258445959.jpg
上传了图片不知道为啥是缩略图  不知道发出来清楚不
一个自定义的数据类型 StructAppParameter声明了一个变量 :g_eAppParameter
在一个函数内部,声明了一个16位1024长度的数组 buf
这个函数主要用途是从flash读取一些配置信息的,结果读取之后 后面的串口任务全部异常发不出去

调试发现 读取flash数据到buf数组的时候,g_eAppParameter的值被改变了,研究半天注意到两个变量所在位置冲突了
buf的起始位置0x200007A0  总长度是2*1024   一直到了0x20000F9F   而g_eAppParameter变量的位置在0x20000958

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

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2020-3-20
在线时间
4 小时
 楼主| 发表于 2023-3-8 15:01:18 | 显示全部楼层
补充一句    g_eAppParameter变量是全局的
回复

使用道具 举报

3

主题

800

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3775
金钱
3775
注册时间
2017-3-7
在线时间
1645 小时
发表于 2023-3-8 21:42:22 | 显示全部楼层
堆栈可能设的太小了,你局部变量又定义的太大,建议不要这么操作
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2023-3-8 23:36:25 | 显示全部楼层
局部变量整个这么大的数组,不溢出才怪...
回复

使用道具 举报

2

主题

446

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4133
金钱
4133
注册时间
2018-5-14
在线时间
902 小时
发表于 2023-3-9 08:47:09 | 显示全部楼层
堆栈溢出。要么改.s文件的堆栈大小。要么用malloc申请。最不济全局变量。
回复

使用道具 举报

16

主题

426

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2676
金钱
2676
注册时间
2018-11-8
在线时间
431 小时
发表于 2023-3-9 13:16:56 | 显示全部楼层
姚先起 发表于 2023-3-9 08:47
堆栈溢出。要么改.s文件的堆栈大小。要么用malloc申请。最不济全局变量。

最不济的意思是会同时占用了FLASH空间?这个不初始化的话 好像可以被编译器优化掉的吧
回复

使用道具 举报

2

主题

446

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4133
金钱
4133
注册时间
2018-5-14
在线时间
902 小时
发表于 2023-3-9 13:52:28 | 显示全部楼层
babyrabbit 发表于 2023-3-9 13:16
最不济的意思是会同时占用了FLASH空间?这个不初始化的话 好像可以被编译器优化掉的吧

不会啊,全局变量不会占用flash空间,如果你初始化了这个全局变量,才会占用。
回复

使用道具 举报

16

主题

426

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2676
金钱
2676
注册时间
2018-11-8
在线时间
431 小时
发表于 2023-3-9 14:45:22 | 显示全部楼层
姚先起 发表于 2023-3-9 13:52
不会啊,全局变量不会占用flash空间,如果你初始化了这个全局变量,才会占用。

对 那为什么说全局变量最不济呢  不都是占用的RAM空间???
回复

使用道具 举报

2

主题

446

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4133
金钱
4133
注册时间
2018-5-14
在线时间
902 小时
发表于 2023-3-9 15:40:16 | 显示全部楼层
babyrabbit 发表于 2023-3-9 14:45
对 那为什么说全局变量最不济呢  不都是占用的RAM空间???

局部变量是出了函数后堆栈会被释放的,全局变量是只要程序跑起来这个内存就是该功能的专属,不会销毁。
回复

使用道具 举报

16

主题

426

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2676
金钱
2676
注册时间
2018-11-8
在线时间
431 小时
发表于 2023-3-9 15:54:25 | 显示全部楼层
姚先起 发表于 2023-3-9 15:40
局部变量是出了函数后堆栈会被释放的,全局变量是只要程序跑起来这个内存就是该功能的专属,不会销毁。

对哦 有道理啊
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 13:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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