历史上的今天
返回首页

历史上的今天

今天是:2024年10月17日(星期四)

正在发生

2018年10月17日 | stm32 HardFault_Handler 异常的处理死机

2018-10-17 来源:eefocus

在系统开发的时候,出现了HardFault_Handler硬件异常,也就是死机,尤其是对于调用了os的一系统,程序量大,检测堆栈溢出,以及数组溢出等,找了半天发现什么都没有的情况下,估计想死的心都有了。如果有些程序开始的时候一切没有问题,但是运行几个小时候,会发现死机了,搞个几天下来估计蛋都碎了一地吧。。。

一般来说运行操作系统  是以下几个问题

1.开始的时候给ucos分配的堆栈太小了,随着项目做多了,这类问题一般很容易解决

#define TASK_IO_SIZE  300

#define TASK_IO_PRIO 6

OS_STK  TASK_IO_STK[TASK_IO_SIZE];

比如修改300到 1000,做开发的时候 如果ram允许,尽量大些,免的麻烦

 

2.数组溢出

这类问题一般在通信中,接受数据的时候,特别是长度不定的时候

比如协议为     :开始  功能码  长度  数据1  数据2 。。结束

长度决定了后面的数据多少,在分配接受缓冲的时候   ,突然来了个错误的长度比如255

但是我们分配buffer[100],只定义了100,这样数组就溢出了

所有在放数据之前要对长度进行判断是否合理,以后 如果有长度 或者索引就要想到溢出。。

 

3.使用了非法的指针 ,比如空指针 ,编译对的 但是运行就错了

u8 *p = null;

*p = 1;        把0地址的数据强制设置为1,  不错才怪

 

4.使用OS_ENTER_CRITICAL();

使用了 OS_ENTER_CRITICAL(); 却忘了OS_EXIT_CRITICAL(); 退出临界区

特别是在这个函数OS_ENTER_CRITICAL();  调用了子函数 也有的这类情况,很容易忘记关闭的这样就造成了“死机现象”

因此如果调用的话  建议在函数中加入OS_CPU_SR  cpu_sr = 0u;局部变量 在管理临界区   os的内核程序也是这么用的  ,而且要注意,临界区一般用于全局变量的写操作,时间要非常快的,任务中的变量可以不用添加 。


推荐阅读

史海拾趣

Datatronic公司的发展小趣事

随着环保意识的提高,Datatronic公司开始探索绿色发展的道路。公司注重节能减排和资源循环利用,通过改进生产工艺和使用环保材料等方式降低对环境的影响。同时,公司还积极推广绿色产品和技术,引导客户树立绿色消费观念。这些努力使得Datatronic公司在环保方面取得了显著成效,赢得了社会的广泛赞誉。

EMC [ELAN Microelectronics Corp]公司的发展小趣事

随着公司的发展,义隆电子不断加大研发投入,致力于技术创新和产品多元化。公司拥有一支高素质的研发团队,拥有多项自主知识产权和核心技术。通过不断的技术创新和产品升级,义隆电子成功推出了微控制器、个人计算机外设芯片、数字显示器芯片等一系列具有市场竞争力的产品。同时,公司还积极拓展智能型人机接口技术之应用芯片等新兴领域,为未来的发展奠定了坚实的基础。

Everspin公司的发展小趣事

Everspin与众多知名企业和机构建立了合作伙伴关系,如戴尔电脑、Koyo Electronics Industries等。这些合作伙伴的认可和支持不仅为Everspin带来了更多的商业机会,也进一步提升了其在行业中的影响力。同时,Everspin还积极与客户沟通合作,根据客户需求提供定制化的解决方案,赢得了客户的广泛赞誉。

ENERGIZER公司的发展小趣事

随着环保意识的日益增强,ENERGIZER也积极响应环保号召,致力于研发更环保的电池产品。1988年,公司发明了无汞环保碱性电池,这一创新性的产品不仅性能优良,而且对环境友好,受到了消费者的广泛欢迎。同时,ENERGIZER还积极推广电池回收和再利用的理念,倡导绿色消费,为全球的环保事业做出了积极贡献。

Anderson Electronics Inc公司的发展小趣事

面对电子行业的快速变革和市场竞争的加剧,Anderson Electronics Inc公司积极进行产业升级和智能制造的转型。公司引进了先进的生产设备和技术,实现了生产过程的自动化和智能化。同时,公司还加大了对研发人员的培养和引进力度,建立了一支高素质的研发团队。通过产业升级和智能制造的转型,公司成功提升了生产效率和产品质量,进一步巩固了市场地位。

Cicoil公司的发展小趣事

在20世纪60年代,人类开始了对月球的探索。Cicoil公司的柔性扁平电缆被选为阿波罗任务的关键组件之一。这些电缆为宇航员在月球上的活动提供了安全可靠的电力和数据传输保障。当尼尔·阿姆斯特朗和巴兹·奥尔德林在月球上行走时,他们的每一步都离不开Cicoil电缆的支持。这一历史性的时刻让Cicoil公司名声大噪,也进一步巩固了其在电子行业中的地位。

问答坊 | AI 解惑

利用ADC0804做一个真正的电压表

本帖转载自www.mcusy.com,作者月夜。…

查看全部问答>

学习学习GPS

GSV GSA GGA分别是什么 a.GPS固定数据输出语句($GPGGA)这是一帧GPS定位的主要数据,也是使用最广的数据。$GPGGA 语句 包括17个字段:语句标识头,世界时间,纬度,纬度半球,经度,经度半球,定位质量指示,使用卫星数量, 水平精确度,海拔高 ...…

查看全部问答>

LED户外大屏幕基础知识

replyreload += \',\' + 374037;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

周公M0新原理图

周公的M0开发板的原理图终于更新了…

查看全部问答>

我用的是Wince5.0+EVC开发,怎么实现用程序设置网络呢?

我用的是Wince5.0+EVC开发,怎么实现用程序设置无线网络呢? 如设置Wep加密,设置IP地址,DHCP等,请大家给个思路啊…

查看全部问答>

分享一个因初始化引发的奇怪问题

项目到了后期,我开始一点点整理程序,把一些最初草率直接在调用处写的短函数封装成子函数。就在这些我觉得无关紧要的改动以后,前几天我发出一个最新的测试版本,居然反馈回来一个非常奇怪的现象,在那边,主从机无法通讯!可是我办公室这边却好好 ...…

查看全部问答>

Linux 常用C函数(中文版)

很详细的c函数介绍文档,我一直把他当做工具书来用,分享给大家! 如果哪位大侠把这个网页式的工具做成chm格式的电子书就完美了,哈哈 截图,先睹为快 [ 本帖最后由 HOHO 于 2012-8-8 16:42 编辑 ]…

查看全部问答>

用IAR 8.3编译TI BLE Stack遇到Segment ISTACK Too Long的解决方案

IAR 8.3以后的版本编译TI BLE Stack会报类似如下的错误Error[e16]: Segment ISTACK (size: 0xc0 align: 0) is too long for segment definition. At least 0xe more bytes needed. The problem occurred while processing the segment   ...…

查看全部问答>

使用Si2302 的一键开关机电路失效

本帖最后由 gsy 于 2014-8-7 09:28 编辑 在百度上找了一个一键开关机: 如图: 图片暂时穿不上去,大神可以打开百度文库看一下原设计: http://wenku.baidu.com/link?url=hejs6NaNltr5IFum5PADzn_bMsg8W2qyvWC8OhzBhF2NgP45GHiHf_Iae26pLmom7M ...…

查看全部问答>

有没有M0核的视频教程

最近学习STM32 ,都是103的视频,谁能提供点M0核的…

查看全部问答>