zoukankan      html  css  js  c++  java
  • 一次STM32进入HardFault_Handler 的解决情况

    STM32进入HardFault_Handler调试

    --- title: STM32进入HardFault_Handler调试 date: 2020-06-18 10:26:48 categories: tags: - stm32 - debug - FreeRTOS ---

    背景

    工程要移植RTOS,以做业务改进。

    移植了FreeRTOS,发现没有执行程序;在线仿真的时候,发现PC走到SystemInit,第一条语句还没执行完就进入了HardFault_Handler

    分析

    1、检查了startup_stm32xxx.s,有对SVC_Handler等入口进行处理。而且程序是还没走到vTaskStartScheduler就出问题的。

    仔细查阅了网上的资料,STM32出现HardFault_Handler故障的原因主要有两个方面:

    • 内存溢出或者访问越界。
    • 堆栈溢出,增加堆栈的大小。

    2、用keil的仿真,根据PC与MSP、PSP的值找对应的错误现场。但由于是一执行C语句就异常的,所以这个方法没用。

    3、回顾自己的操作记录。

    想起自己在移植的时候,因为出现了Error: L6406E: No space in execution regions with .ANY selector matching xx.o(.bss).,于是改大了IARM1的size为0xF0000。超出了可访问的范围。改回原来的0xFF00以后程序又编译不过。

    想起FreeRTOSConfig.h中有对于栈大小的配置,于是将configTOTAL_HEAP_SIZE改小为( ( size_t ) ( 5 * 1024 ) )

    问题解决,顺利跑起来。

    start_task
    start_task
    start_task
    
    
  • 相关阅读:
    Java基本概念
    Java基础语法
    Java环境的搭建
    elicpse
    常见编译器EOP
    上传突破学习笔记
    认识ollydbg
    160个Crackerme破解
    python基础(1)
    文件上传
  • 原文地址:https://www.cnblogs.com/schips/p/13157179.html
Copyright © 2011-2022 走看看