Hardfault错误
查看SP寄存器,定位出错原因。
定义一个全局变量,在可能出错的地方赋值不同,以此定位错误原因。
Scatter压缩解压缩
ROM常量和code
RAM全局变量和
起始地址字节未4字节对齐定义错误导致的。
应该对每个区域进行起始地址和长度的合理分配。
注意寄存器只读,只写操作。对于此种情况,不要做读写的额外操作。
system_init里做SCB->SHCSR改动,不直接进hardfault。
野指针赋值操作等
大数组超过栈大小,用内存申请
共享资源加锁,以防资源并发被共用,被另一个进程的数值改变。
递归函数内部的局部变量导致栈溢出。
inline函数,用于一句话执行句子,可不用再SP LR重新赋值,压栈操作。
内存申请非空判断操作,以防对空指针操作导致的异常。
注意锁和解锁匹配使用,特别是函数中异常推出的出口,记得解锁。
编译器未报出错误的类型传参导致的hardfault
网友评论