[研电赛技术支持] GD32H759内存访问错误

[复制链接]
2905|14
 楼主| jingjie623 发表于 2024-5-2 22:51 | 显示全部楼层 |阅读模式
本帖最后由 jingjie623 于 2024-5-3 11:11 编辑

项目背景是片上微型图像处理,故在函数中申请了一个大数组,发现芯片自动分配的内存会覆盖全局变量:这是在一个函数里面:其中size_ = 126, channels = 3,也就是说申请了126 * 126 * 3的数组,其中output_img_array是全局变量数组
725186633a7bfea4b8.png


这是运行结果:
584996633a80b46c3b.png
test3也就是那个全局变量,显然它竟然被申请的局部变量数组给覆盖了!导致实际调试的时候凡是对该局部数组的覆写,都会直接导致数据损坏、单片机跑飞。请问这是为什么?这是我的问题还是芯片设计缺陷?
 楼主| jingjie623 发表于 2024-5-2 22:53 | 显示全部楼层
后面几个图不要看,就是前两张,后面的图我不知道怎么删
埃娃 发表于 2024-5-15 23:33 | 显示全部楼层
只有两个图啊
4c1l 发表于 2024-6-30 23:28 | 显示全部楼层
这个问题通常不是芯片设计的缺陷,而是因为你在函数中定义了一个非常大的局部数组,超出了堆栈的容量,导致堆栈溢出
4c1l 发表于 2024-6-30 23:29 | 显示全部楼层
在很多嵌入式系统中,堆栈的大小是有限的,并且被预分配的。
kaif2n9j 发表于 2024-8-21 12:22 | 显示全部楼层
局部变量确实会改变的啊
l1uyn9b 发表于 2024-8-21 13:29 | 显示全部楼层
一般来说,进入到这个局部函数之后,局部变量就会被刷回来了
y1n9an 发表于 2024-8-21 14:35 | 显示全部楼层
所以一般数组都定义为全局变量就好好了
suw12q 发表于 2024-8-21 15:42 | 显示全部楼层
不都是用const让这个数组不变化吗
tax2r6c 发表于 2024-8-21 17:10 | 显示全部楼层
其实可以加关键词的,这样就好了
p0gon9y 发表于 2024-8-21 18:30 | 显示全部楼层
我的建议是用静态变量或者修饰词试试
d1ng2x 发表于 2024-8-21 19:53 | 显示全部楼层
你定义的数组也没给赋值,编译器一般是要给赋值的
ex7s4 发表于 2024-8-22 09:25 | 显示全部楼层
这种确实容易覆盖吧,因为你没加从const啊
cen9ce 发表于 2024-8-22 10:30 | 显示全部楼层
这图里那个是全局变量?
b5z1giu 发表于 2024-8-22 12:10 | 显示全部楼层
局部数组也改成全局变量是不是就好了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部