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
    
    
  • 相关阅读:
    SQL Server 触发器
    [转]SQL Server 存储过程
    C#-DataView及其用法
    IEnumerable和IEnumerator 详解 And迭代器
    C#多线程学习(六) 互斥对象
    GDI简单的图片处理
    C#委托的介绍(delegate、Action、Func、predicate)
    接口的理解与使用《转》
    Mysql drop、delete和truncate的区别
    如何查看笔记本CPU是几核的?
  • 原文地址:https://www.cnblogs.com/schips/p/13157179.html
Copyright © 2011-2022 走看看