没有合适的资源?快使用搜索试试~ 我知道了~
STM32 硬件错误HardFault_Handler的真凶1
需积分: 0 99 下载量 117 浏览量
2022-08-08
22:06:10
上传
评论 3
收藏 16KB DOCX 举报
温馨提示
试读
3页
(2)堆区(heap):一般由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收 (3)全局区(静态区)(static):全局变量和静态变量的存储是
资源推荐
资源详情
资源评论
STM32 出现 HardFault_Handler 故障的原因主要有两个方面:
1、内存溢出或者访问越界。
2、堆栈溢出。
最近遇到的问题是栈溢出,情况是这样的,举例说明:
static char data[10000];
void fun1(unsigned char *buf)
{
int i=0;
for(i=0; i<5000; i++)
{
data = buf;
}
}
void fun2(void)
{
unsigned char buf[5000];
.........;
fun1(buf); //执行完毕此函数出现硬件错误 HardFault_Handler
printf("data: %s",buf);
}
int main()
{
.........();
.........();
.........();
fun2();
.........();
.........();
.........();
while();
}
问题分析,通过断点代码跟踪,在进入 fun1(buf);函数时,发现 SP 指向了数组 data 所开
辟的空间,同时 PC、等寄存器值压入栈,在循环执行 data =buf;的时候修改了压入栈的数
据,导致在退出函数 fun1(buf);时 PC 指向了错误的位置。
问题:为什么 SP 会指向数组 data 所开辟的空间?原因是发生了栈溢出。
问题:那里导致了堆栈溢出呢? 下面我们看下面的网络资料,认识一下堆栈。
************************************************************************
**************************
资源评论
吹狗螺的简柏承
- 粉丝: 11
- 资源: 313
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功