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

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条回答
正点原子
1楼-- · 2019-10-17 23:06
回复【15楼】正点原子:
---------------------------------
请问原子哥,如何避免数据存入SD卡这段时间内,AD转换终止的问题。我的意思就是,如何能使数据存入SD卡的同时,AD采集也在进行。因为如果AD采集终止的话,会影响数据采集的准确性。
希望原子哥指教,感谢感谢!!!
zgzzlt
2楼-- · 2019-10-18 03:14
回复【18楼】Mars_man:
---------------------------------
用dma采集。
zjtzlqr
3楼-- · 2019-10-18 05:00
启动文件里面对栈的大小有固定的值。函数里面的数组是在调用该函数的时候,才给你分配空间。数组过大,栈溢出了,有可能覆盖了其他全局变量的值。如果使用很大的数组,可以定义成一个全局变量。如果使用的有os。就使用内存管理。
正点原子
4楼-- · 2019-10-18 07:08



定义长度为3971的数组,2048后被截断了。这个数组是用来接收上位机发来的内容,然后把这个内容转发出去用的。这个该如何解决?
Mars_man
5楼-- · 2019-10-18 12:40
 精彩回答 2  元偷偷看……
正点原子
6楼-- · 2019-10-18 16:36
回复【22楼】justin_1ee:
---------------------------------
定义全局变量。

一周热门 更多>