打印
[研电赛技术支持]

GD32H759内存访问错误

[复制链接]
2282|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jingjie623 于 2024-5-3 11:11 编辑

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



这是运行结果:

test3也就是那个全局变量,显然它竟然被申请的局部变量数组给覆盖了!导致实际调试的时候凡是对该局部数组的覆写,都会直接导致数据损坏、单片机跑飞。请问这是为什么?这是我的问题还是芯片设计缺陷?

使用特权

评论回复
沙发
jingjie623|  楼主 | 2024-5-2 22:53 | 只看该作者
后面几个图不要看,就是前两张,后面的图我不知道怎么删

使用特权

评论回复
板凳
埃娃| | 2024-5-15 23:33 | 只看该作者
只有两个图啊

使用特权

评论回复
地板
4c1l| | 2024-6-30 23:28 | 只看该作者
这个问题通常不是芯片设计的缺陷,而是因为你在函数中定义了一个非常大的局部数组,超出了堆栈的容量,导致堆栈溢出

使用特权

评论回复
5
4c1l| | 2024-6-30 23:29 | 只看该作者
在很多嵌入式系统中,堆栈的大小是有限的,并且被预分配的。

使用特权

评论回复
6
kaif2n9j| | 2024-8-21 12:22 | 只看该作者
局部变量确实会改变的啊

使用特权

评论回复
7
l1uyn9b| | 2024-8-21 13:29 | 只看该作者
一般来说,进入到这个局部函数之后,局部变量就会被刷回来了

使用特权

评论回复
8
y1n9an| | 2024-8-21 14:35 | 只看该作者
所以一般数组都定义为全局变量就好好了

使用特权

评论回复
9
suw12q| | 2024-8-21 15:42 | 只看该作者
不都是用const让这个数组不变化吗

使用特权

评论回复
10
tax2r6c| | 2024-8-21 17:10 | 只看该作者
其实可以加关键词的,这样就好了

使用特权

评论回复
11
p0gon9y| | 2024-8-21 18:30 | 只看该作者
我的建议是用静态变量或者修饰词试试

使用特权

评论回复
12
d1ng2x| | 2024-8-21 19:53 | 只看该作者
你定义的数组也没给赋值,编译器一般是要给赋值的

使用特权

评论回复
13
ex7s4| | 2024-8-22 09:25 | 只看该作者
这种确实容易覆盖吧,因为你没加从const啊

使用特权

评论回复
14
cen9ce| | 2024-8-22 10:30 | 只看该作者
这图里那个是全局变量?

使用特权

评论回复
15
b5z1giu| | 2024-8-22 12:10 | 只看该作者
局部数组也改成全局变量是不是就好了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝