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

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-16 03:17
可以采用双缓冲,2个缓存,A,B,各512字节。
当A收满512字节的时候,接收数据存放到B,同时,将A的数据写入SD卡。
等待B满的时候,接收数据存放到A,同时将B的数据写入SD卡。
依次循环。
正点原子
2楼-- · 2019-10-16 08:45
 精彩回答 2  元偷偷看……
mygod
3楼-- · 2019-10-16 14:29
ucosII 有宏开关的就是 栈的最大值,仔细看看吧
maninman1981
4楼-- · 2019-10-16 17:18

会不会和 PendSV与Systick的优先级配置有关。

我就是改了其他的中断优先级,这个问题就再次跳出来了。

程序中PendSV/Systick 似乎配置成了最低,且优先级一样。
PendSV:0xff
Systick :(1<<4)-1 = 15 = 0x0f
莫非这里有猫腻?

maninman1981
5楼-- · 2019-10-16 21:59
回复【4楼】maninman1981:
---------------------------------
顶住! 不能沉!
maninman1981
6楼-- · 2019-10-17 00:56
我把I2C初始化的代码去掉就OK了,但这段代码除了什么问题现在还不得而知。

一周热门 更多>