历史上的今天
返回首页

历史上的今天

今天是:2025年04月16日(星期三)

正在发生

2019年04月16日 | STM32之程序如何防止堆栈溢出

2019-04-16 来源:eefocus

近日为某个项目写了个草稿程序,即非正式程序,后来发现老是进入hardfaulthandler,原来是堆栈溢出,后仔细查看发现函数调用纵深太深,最多的时候可保持7个函数在堆栈中调用。


因此有心得如下:


一、函数调用不要纵深太深,即以下模式:


main()

{

   fun1();

}

fun1()

{

  fun2();

}

fun2()

{

   fun3();

}

fun3()

{

  fun4();

}

fun4()

{

  fun5();

}

fun5()

{

  fun6();

}

fun6()

{

   fun7();

}

这样子main函数要调用fun1函数完成某个功能,则要一直调到fun7为止,才能完成。这样导致堆栈中最多时要保存着main和fun1至fun7的所有信息,可能会导致堆栈溢出。

所以最好是不要调用太深。


二、局部变量不要太大太多,如局部数组,超过某个数量需定义为全局数组,因为局部数组同样储存在堆栈中。



推荐阅读

史海拾趣

宇阳科技(EYANG)公司的发展小趣事

作为电子行业的领军企业之一,宇阳科技始终坚持以创新为驱动的发展战略。公司不断投入研发资金,加强技术团队建设,积极引进先进技术和管理经验。通过持续创新和技术升级,宇阳科技成功推出了多款具有自主知识产权的新型电子元器件产品,并引领了行业潮流。同时,公司还积极参与行业标准制定和技术交流合作等活动,为推动电子行业的发展做出了积极贡献。

以上五个故事梗概概述了宇阳科技在电子行业中的发展历程和主要成就。这些故事不仅展现了公司的技术实力和市场地位,也体现了公司不断创新、追求卓越的发展理念。

思博科技(Cybermax)公司的发展小趣事

随着市场竞争的加剧,思博科技意识到只有不断创新才能在市场中立足。于是,公司加大了研发投入,不断推出具有创新性的产品。其中,一款名为“MaxPower”的高效能电源芯片在市场上引起了广泛关注。这款芯片不仅性能卓越,而且具有极高的能效比,为客户节省了大量能源成本。这一创新产品的成功推出,使思博科技在行业中树立了良好的口碑。

Dawning Precision Co Ltd公司的发展小趣事

Dawning Precision Co Ltd(以下简称“Dawning”)成立于本世纪初,当时正值电子行业的快速发展期。公司的创始人张先生是一位在电子行业摸爬滚打多年的资深人士,他看到了精密制造在电子行业中的巨大潜力。然而,初创时期,公司面临着资金短缺、技术瓶颈和市场认知度低等困难。张先生带领团队夜以继日地工作,不断研发新技术,优化产品性能,同时积极寻找投资者和合作伙伴。经过几年的不懈努力,Dawning逐渐在行业中树立了良好的口碑,开始获得客户的认可。

Everspin公司的发展小趣事

在XXXX年,Everspin的股票开始在纳斯达克全球市场交易,股票代码为MRAM。这一上市动作不仅为Everspin提供了更多的资金支持,也进一步提升了其在行业中的知名度和影响力。此外,兆易创新旗下的GigaDevice半导体(香港)有限公司还斥资500万美元购买了Everspin约5%的股份,显示出市场对Everspin技术和发展前景的认可。

Glow-Lite Corp公司的发展小趣事

在XXXX年,Everspin的股票开始在纳斯达克全球市场交易,股票代码为MRAM。这一上市动作不仅为Everspin提供了更多的资金支持,也进一步提升了其在行业中的知名度和影响力。此外,兆易创新旗下的GigaDevice半导体(香港)有限公司还斥资500万美元购买了Everspin约5%的股份,显示出市场对Everspin技术和发展前景的认可。

Appointech Inc公司的发展小趣事

为了进一步扩大市场份额,Appointech Inc公司开始积极拓展海外市场。通过与国际知名企业的合作,公司成功打入国际市场,产品销量大幅提升。同时,公司还积极参加国际电子展会和交流活动,与全球同行建立了广泛的合作关系,为公司的长远发展奠定了坚实的基础。

问答坊 | AI 解惑

Wi-Fi 联盟在华新增认证测试实验室

Wi-Fi 联盟 (Wi-Fi Alliance) 宣布,上海同耀通信技术有限公司最近成为该公司最新的授权测试实验室 (ATL),在中国主要的经济中心之一上海为其全球会员公司提供独立测试服务。该实验室于上月底完成了对其首个 Wi-Fi CERTIFIED 产品的测试。   同 ...…

查看全部问答>

用Virtex-6和Spartan-6 FPGA构建功耗优化的设计

  随着元件选择和功耗管理技术日益成为影响系统设计成功与否的重要考虑因素,工程师也越来越多地将其注意力集中到功耗上。 赛灵思采用了整体分析法来确保系统设计者能够利用Virtex®-6和Spartan®-6 FPGA实现功耗优化设计。     ...…

查看全部问答>

视频名词解析(Video Demystified,950页)

Video Demystified,主要与视频处理的一些格式,例如HDMI,DVI,YPBPR,AV等等一些的解析,对于初级的知识普及比较适用。 [ 本帖最后由 xuezhilianz 于 2009-8-21 09:06 编辑 ]…

查看全部问答>

电容为什么都要这样接?

见:http://download.ourdev.cn/bbs_upload353273/files_16/ourdev_460291.jpg 上面电路里,有一大串电容并连,为什么这样处理?…

查看全部问答>

有用过科大讯飞TTS语音合成系统的吗?

我这边拿到一个他们的开发包,我已经把程序移植到WINCE平台去了,但是该程序不提供播音功能, 我打电话问过,他们说播音接口根据平台自己实现,WINCE下一般用什么wave out之类的?还要管理缓冲之类的 请问下有没用过该产品的兄弟?告诉下怎么做? 重分奖 ...…

查看全部问答>

eVC++ 编写的客户端程序!!!!

大家谁做过eVC++ 编写的客户端程序?? 可以向服务器端发送 信息和文件那种的。 急求!!!!!!…

查看全部问答>

太阳能板充电

大家好。前些日子我买了一个5V170MA的太阳能板给我的电路充电,但是不知道能不能用。我的电路板主要是给电池充电,我的电池是2000MAH的容量,在太阳能板与点吃之间什么东西也没加只是直接并在一起的。不知道能不能用?谁能告诉我一下呢?谢谢啦~~~…

查看全部问答>

照明用LED封装创新探讨

一,常规现有的封装方法及应用领域     目前LED 的封装方法有:支架排封装,贴片封装,模组封装几种,这些封装方法都是我们常见和常用的。    支架排封装是最早采用,用来生产单个LED器件,这就是我们常见的引线型发 ...…

查看全部问答>

MSP430中的Flash操作问题?

void FlashErase() { uchar *p0; FCTL2 = FWKEY + FSSEL_1 + FN3 + FN4;//选择时钟源,分频 FCTL3 = FWKEY;//清除LOCK while(FCTL3 & BUSY);//如果出于忙,则等待 FCTL1 = FWKEY + ERASE;//使能段操作 p0 = (unsigned char *)0x1080;//数值 ...…

查看全部问答>

电子产品开发中常遇电磁兼容EMC问题及解决办法

一般电子产品都最容易出的问题有:RE--辐射,CE--传导,ESD--静电。通讯类电子产品不光包括以上三项:RE,CE,ESD,还有Surge--浪涌(雷击,打雷) 医疗器械最容易出现的问题是:ESD--静电,EFT--瞬态脉冲抗干扰,CS--传导抗干扰,RS--辐射抗干扰 ...…

查看全部问答>