Nuvoton开发流程 初级篇 5 -- Hard Fault分享
首先,我们来了解下什么Hard Fault?从字面意思理解就是硬件故障,根本原因是非法的存储器访问(比如访问0地址、写只读存储位置等)和非法的程序行为(比如除以0等)等造成的。
接着,我们来了解下产生的实际案例有哪些呢?
1、内存的溢出,包括堆栈的溢出,其中单片机内存和堆栈的关系。
参考链接:http://blog.csdn.net/c12345423/article/details/53004747
2、越界访问。
这常指数组的使用,具体来说,访问只有5个元素的数组的第6个元素时,就出现了越界访问。而这一错误,常常出现于数组作为函数参数传入时,由于只传入指针,而函数中不确定指针访问的平移量,就可能出现越界访问的错误。值得注意的是,C语言并没有越界访问的编译查询,也就是说,在编译时不会检测是否存在越界访问。
3、错误使用flash造成的异常错误。
一是由于在使用flash存储数据时,其存储空间有可能和代码区重叠;二是由于 自身需求,需要转换指向flash的指针的指向类型,如转换成float*,使指针在 flash上以4个单位的间隔移动,但是由于flash是分区的,如果区首地址和被转换指针之间的间隔不是4的倍数也会出现错误。
4、这一年大家都是自己画PCB,自己写程序,有时候会发现PCB的焊接也会造成HardFault,并且这种错误从程序开始就会存在。
5、野指针寻址,除以0(也可能得出inf而不会产生错误)等常见C语法错误。
最常见的就是:
甲、访问未定义的区域。超过SRAM区域。Int SUM[5],实际使用到SUM[6]。
乙、写只读区域。在闪存地址写入数据。
丙、非法程序。除法等于零。 函数除以0。
丁、非法指针地址。Ex.指针变量类型为uint32_t*,指针地址不是4的倍数。
|