STM32 ------ HardFault_Hander 中断函数

摘要:
避免数组越界的一种方法是在每次使用数组之前检查要放入数组的数据长度是否大于数组长度。如果它大于数组长度,它将在时输入以便于定位。如果可以打印信息,则更好。

1、数组越界(对数组赋值)

正常情况,数组越界会进入 HardFault_Hander 中断函数的无线循环。

避免数组越界的一个方法是:每次使用数组前,检查要放入数据的数据长度是否大于数组长度,大于则进入while(1),方便定位,如果可以打印信息更好。

 2、定义的局部数组过大,超过 IAR 设置的栈大小(未使用FreeRTOS)

单步运行时,刚执行完定义数组的语句不会立马进入 HardFault_Hander 中断函数,一般是再执行几个语句后进入

STM32 ------ HardFault_Hander 中断函数第1张

3、使用FreeRTOS,定义的局部数组过大,超过分配给数组所在的 task 的栈空间

单步运行时,刚执行完定义数组的语句不会立马进入 HardFault_Hander 中断函数,一般是再执行几个语句后进入

4、使用FreeRTOS,动态申请内存超过分配给FreeRTOS 可用 heap(总heap为configTOTAL_HEAP_SIZE)

单步运行时,刚执行完动态申请的语句不会立马进入 HardFault_Hander 中断函数,一般是再执行几个语句后进入

printf用的也是FreeRTOS中 heap 资源

5、使用STM32CubeMX生成的stm32f407xx_flash.icf

如果使用IAR自带的stm32f407xE.icf没有问题

STM32 ------ HardFault_Hander 中断函数第2张

STM32 ------ HardFault_Hander 中断函数第3张

6、数组越界(读取数组中的值)

比如下面函数,没有注释的那几条语句限制,会出现硬件异常

u8 *my_strstr(u8 *buf, u16 length, char *str)
{
    u8 *p;
    u16 i,j;
    for(i=0,j=0; j<strlen(str);)
    {
        if(str[j] == buf[i])
        {
            i++;
            j++;
            if(i >= length)
            {
                break;
            }
        }else
        {
            i++;
            j = 0;
//            if(i >= length)
//            {
//                break;
//            }
        }
    }
    if(j == strlen(str))
    {
        p = buf+(i-strlen(str));
    }else
    {
        p = NULL;
    }
    return p;
}

7、读不能读的地址的数据,和6类似

比如读STM32 unique ID,读的地址写错了,违法读数据 

免责声明:文章转载自《STM32 ------ HardFault_Hander 中断函数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇springboot SFTP 文件上传下载功能Bootstrap-datepicker3官方文档中文翻译---I18N/国际化(原文链接 http://bootstrap-datepicker.readthedocs.io/en/latest/index.html)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

算法训练 删除数组零元素

算法训练 删除数组零元素   时间限制:1.0s   内存限制:512.0MB     从键盘读入n个整数放入数组中,编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动。注意,CompactIntegers函数需要接受数组及其元素个数作为参数,函数返回值应为删除操作执行后数组的新元素个数。输出删除后数组中...

STM32新的IDE -- stm32cubeIde 点亮个LED灯

此IDE是基于eclipse开发的,一键式安装,内部集成了cubeMx;首先去官网下载:https://www.stmicroelectronics.com.cn/content/ccc/resource/technical/software/sw_development_suite/group0/0d/3e/69/1b/13/74/44/8e/stm32...

硬件实现IIC协议读取EEPROM

我TMD也是服了,反正我板子搞了半天也不成功我也不知道为什么,野火STM32-MINI,一直卡EV5,不管了 先代码沾上 工程目录(板子为野火STM32 MINI) 串口相关代码: bsp_usart.h #ifndef __USART_H #define __USART_H #include "stm32f10x.h" #include <...

watch监听(数组或者对象)

handler:监听数组或对象的属性时用到的方法 deep:深度监听,为了发现对象内部值的变化,可以在选项参数中指定 deep:true 。注意监听数组的变动不需要这么做。 immediate: 在选项参数中指定 immediate: true 将立即以表达式的当前值触发回调 tips: 只要bet中的属性发生变化(可被监测到的),便会执行handler函...

java的byte数组转换成在[0,255]范围内

C#的byte是0-255java的byte是-128-127java的byte数组转换成在[0,255]范围内int data[]= new int[bytes.length];for(int i=0;i<bytes.length;i++) {data[i] = bytes[i] & 0xff;}...

scatter gather 使用

先来点概念: http://blog.csdn.net/fudan_abc/archive/2007/07/28/1713976.aspx 无聊的it玩家们创建了有一个词,叫做scatter/gather,她是一种用于高性能IO的标准技术.她通常意味着一种DMA传输方式,对于一个给定的数据块,她老人家可能在内存中存在于一些离散的缓冲区,换言之,就是说一些不...