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
    
    
  • 相关阅读:
    pytorch 文本输入处理
    理解 on-policy 和 off-policy
    Monte Carlo与TD算法
    Monte Calro Tree Search (MCTS)
    强化学习概览
    linux 服务器 keras 深度学习环境搭建
    sed和awk学习整理
    linux shell编程进阶学习(转)
    gdb调试:
    MySQL C API 访问 MySQL 示例
  • 原文地址:https://www.cnblogs.com/schips/p/13157179.html
Copyright © 2011-2022 走看看