电源设计技术实用资料点击免费获取>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 嵌入式程序设计中进入硬件故障错误的原因分析

共2条 1/1 1 跳转至

嵌入式程序设计中进入硬件故障错误的原因分析

高工
2014-03-04 14:16:42    评分

   在进行嵌入式系统调试时,经常会遇到各种原因进入到硬件故障中难以自拔,这时候往往令人无从下手,因为导致硬件故障的原因有很多,有时候可能是一个指针或是一个标识符的问题,有时候又或是外设时钟的配置问题,亦或是中断的入口函数所致等等等,在此给大家简单罗列的几列常见的导致硬件故障的原因,欢迎大家补充拍砖,谢谢,话不多说,请评阅:

1、非法存储器访问

   这也是最常见的问题是访问非法的存储器区域。

2、非对齐数据访问

   如果我们直接操作一个指针,或者使用汇编代码,就会生成试图执行非对齐访问的代码,如果错误指令为存储器访问指令,就应该确定传输用的地制止是否是对齐的。

3、从总线返回错误

   如果外设没有被初始化,或者时钟没有被使能,那么该外设可能会返回错误的响应,在有些不大常见的情况下,外设只能接收32位的传输,对字节或半字传输会返回错误响应。

4、异常处理中的桟被破坏

   如果程序在中断处理执行后崩溃,还可能会引起桟帧被破坏,由于局部变量存储在桟空间中,如果异常处理中定义的数组在使用时超过了数组的大小,异常桟帧可能就会被破坏了,结果就是,异常退出后程序可能崩溃。

5、程序在某些C函数中崩溃

   请检查是否为桟和堆预留了足够的空间,如:Keil中NXP LPC111X的堆空间默认为0字节,如果程序中使用了malloc、printf等C函数,那么就需要修改堆的大小了。

   这个问题的另一个可能的原因是,连接器没有使用正确的C库函数,连接器通常会详细的告知用户使用了哪些库函数,有些情况下,可以检查这些信息。

6、意外的试图切换至ARM状态

   进入硬件错误后,如果压入栈的XPSR的T位为0,那么这个错误就是由于切换至ARM状态引起的,引起这个错误的可能原因有很多,如非法函数指针,向量表中向量的最低位不为1,异常处理时桟帧被破坏或者连接器没有使用正确的C库等。

7、在错误的优先级上执行SVC

   如果SVC指令的执行发生在SVC处理中,或者其他和SVC异常优先级相同或更高的异常处理中,就会引起错误,如果在NMI处理和硬件错误处理中使用SVC,则会导致锁定。




关键词: HardFault_Hander     硬件故障    

工程师
2014-03-04 19:30:55    评分
2楼
很多词都没看懂,还没有学到楼主那种境界,继续努力。

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]