系统死机排查思路

反汇编现场寄存器 kasan watchpoint: 针对固定位置 栈溢出检测: cache:检查地址对齐、长度对齐(少/多刷,少/多无效)。 现象一般是watchpoint抓不到,软件复位无效,如USB驱动与cpu会同时操作内存。 硬件: 排除个体差异,存在电压、电流等不稳定,或者芯片不良等异常或内存、flash异常。

freertos内存管理

freertos一共有5种内存管理算法,heap3直接使用的是c库的管理算法,只是对c库封装了一层接口。本章节主要分析heap1、heap2、heap4; heap1 heap2 heap4 heap5 heap5与heap4相比,支持了允许内存堆跨越多个不连续的内存段,这种情况针对一颗soc内部有多块硬件存储设备而言就比较方便,如一个soc内置了1MB SRAM和8MB HPRAM,就可以用这种

freertos栈溢出检测原理

portSTACK_GROWTH > 0:栈向上生长 portSTACK_GROWTH < 0: 栈向下生长,本章使用栈向下生长 打开 configRECORD_STACK_HIGH_ADDRESS 1,将PCB中将打开pxEndOfStack,结构如下。 adress:0+ulStackDepth ------------------- pxEndOfStack(栈底) |XXXXXXXX

内存相关问题排查思路

最近在项目上遇到一个棘手问题,有一块内存在运行过程中概率性的被异常修改,由于牵扯到多方的应用程序,受限于调试手段排查了不少时间,现简单总结下遇到此类问题的排查思路。 添加额外的magic 核心原理就是在malloc的时候,额外多申请一些内存,通常情况下是在头部和尾部多申请一块空间,填充固定的值如0x55,待调用free函数的时候就检测该头部和尾部的数据是否还是原来填充的值如0x55,如果不是那说明