硬汉嵌入式论坛

 找回密码
 立即注册
查看: 700|回复: 3
收起左侧

[SRAM] (求助)设置了DMA后的STM32H7变量被初始化到SRAM外

[复制链接]

1

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2022-10-26 17:17:06 | 显示全部楼层 |阅读模式
设置ADC和DMA连续传输到一个数组里。没开DMA好好的时候,开了DMA之后,程序再初始化变量的时候,自动把我定义的变量放在了RAM区域的外面,就发生了硬件报错。
RAM空间如下
image.png
设置的数组地址被定义到了这个下面位置
image.png
再反汇编里面有一句奇怪的指令,stack只设置了0x400的大小,它给我减了两千。。。
image.png
这减了2000,SP直接就跳出RAM区了。。。
image.png image.png

然后就报出如下错误,并且进入了HardFault中断了
image.png


回复

使用道具 举报

4

主题

46

回帖

58

积分

初级会员

积分
58
发表于 2022-10-27 00:09:38 | 显示全部楼层
我没看到你的程序源码,但是我看你反编译的文件就能猜出来,你就开了0X400的堆栈,为什么要在函数里面定义一个2*2048长度的临时变量呢,自然就发生栈溢出了呀.临时变量使用的是栈空间而不是堆空间.
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106833
QQ
发表于 2022-10-27 00:54:27 | 显示全部楼层
xxx.s启动文件的stack大小配置的多少,配置小了,局部变量过大,直接超了。
回复

使用道具 举报

1

主题

1

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2022-10-27 00:59:14 | 显示全部楼层
dengxiaojundink 发表于 2022-10-27 00:09
我没看到你的程序源码,但是我看你反编译的文件就能猜出来,你就开了0X400的堆栈,为什么要在函数里面定义一个 ...

雀氏,我把栈空间改成0x2000就解决了,谢谢惹
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-6 18:39 , Processed in 0.295070 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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