探讨下,超大数组的定义问题。

2019-10-16 01:11发布

做个项目不容啊,原来出现了HardFaultException,现在又冒出来了。
就是修改了几个中断的优先级,问题又来了。
我在程序中定义了2个超大的数组。uint16_t Adc_Lp[2048],uint16_t Adc_Rp[2048].
为什么选择了2048,因为我看到仿真器会将数组2048以外的数据截断,没搞太明白,所以先定义这么大,其实我想定义更大
现在在函数体内,我定义了一个稍微大点的结构体(就是有那么30个 uint16_t的数据),就是将有关参数全整合进来使用。
我发现,在一个函数中访问其中的一个变量时会进入HardFaultException。
因为代码是从原设计中搬过来的,我又重新建立了一个函数,这个函数定义了这个结构体并访问其中的数据,并未出现HardFaultException。
这下,糊涂了。

请问下 STM32F407ZGT6,可以定义的最大数组数是多少。我试图修改过stack的大小,似乎没改善。
我用的ST—Link/v2。如果用单步执行函数跳转呢,这个问题倒是可以跳过去,只要一自动运行,就出问题。
我用了TIM5,TIM2,SPI,DMA中断。DMA访问外扩SRAM.
用了ucosII+ucgui。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
21条回答
zgzzlt
1楼-- · 2019-10-17 03:58
 精彩回答 2  元偷偷看……
正点原子
2楼-- · 2019-10-17 08:54
超大的数组是定义在函数体内的局部变量吗?会不会是堆栈溢出了?
ofourme
3楼-- · 2019-10-17 10:50
回复【10楼】zgzzlt:
---------------------------------
如果你的超大数组不够存怎么办?
换超大内存的芯片?
如果超大内存的芯片也不够存,怎么办?
换电脑?

回复【11楼】zgzzlt:
---------------------------------
超过了,编译器会报错的。
只要编译器不报错,你的全局数组就可以奔着你的最大值去...
zgzzlt
4楼-- · 2019-10-17 11:17
回复【9楼】ofourme:
---------------------------------
定义成局部变量必死。
zgzzlt
5楼-- · 2019-10-17 14:53
回复【2楼】正点原子:
---------------------------------
全局变量我懂,什么叫内存管理
正点原子
6楼-- · 2019-10-17 20:24
 精彩回答 2  元偷偷看……

一周热门 更多>