初级会员
- 积分
- 102
- 金钱
- 102
- 注册时间
- 2022-3-13
- 在线时间
- 52 小时
|
1金钱
我的程序出问题了,查看调用栈,是在free()函数里进入到了HardFault_Handler(),我目前确定程序没有内存泄漏,应该是栈溢出导致,但还没有好的解决办法。
我没有用操作系统,因此无法像网上提到的在ticker_ISR里记录栈针,然后得到栈的最大值。另外即使无操作系统下,在定时器中增加栈针打印,也不知道是哪个函数出现的栈溢出(或者方法比较复杂)
研究startup_stm32f10x_hd.s里的堆栈大小配置,有一个疑惑:Stack_Size是所有函数调用栈的总大小么?但我增加Stack_Size到0x1800,程序仍然会进入HardFault_Handler()。
我查了代码,再深的函数调用,所有栈空间加起来不会超过0x1800,怎么还会出问题呢?
解决栈溢出有什么好办法么?我翻了论坛上栈溢出相关的帖子和STM32相关文档,没有找到解决方法。我下一步的打算是把栈中所有256byte以上的大数组都改用malloc申请,但这会让代码变得复杂。
下面是我的配置及编译后的大小
Stack_Size EQU 0x00001800
Heap_Size EQU 0x00002800
Program Size: Code=121684 RO-data=13384 RW-data=3428 ZI-data=59996 // 我STM32F103内存是64K的
|
|