历史上的今天
返回首页

历史上的今天

今天是:2025年01月11日(星期六)

2020年01月11日 | STM32之程序如何防止堆栈溢出

2020-01-11 来源:eefocus

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


因此有心得如下:


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


main()

{

   fun1();

}

fun1()

{

  fun2();

}

fun2()

{

   fun3();

}

fun3()

{

  fun4();

}

fun4()

{

  fun5();

}

fun5()

{

  fun6();

}

fun6()

{

   fun7();

}

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

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


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

推荐阅读

史海拾趣

CYANLITE公司的发展小趣事

CYANLITE公司一直秉持着绿色环保的理念,致力于推广节能减排的照明产品。他们不仅在产品设计上注重节能和环保,还积极参与各种环保公益活动,向公众普及LED照明的优势。这种积极的环保态度使得CYANLITE公司在市场上树立了良好的形象,也吸引了越来越多的消费者选择他们的产品。同时,公司还积极与政府部门合作,推动LED照明在公共领域的普及和应用。

ES Systems公司的发展小趣事

ES Systems自创立之初就专注于电子系统技术的研发。公司创始人是一位资深的电子工程师,他带领团队不断突破技术瓶颈,开发出了一系列高性能的电子系统产品。随着技术的不断成熟和产品线的丰富,ES Systems逐渐在市场中树立了技术领先的形象,吸引了大量客户的青睐。公司通过技术驱动实现了快速成长,并在电子行业中占据了重要地位。

Galaxy ( Bel )公司的发展小趣事

随着公司业务的不断发展壮大,ES Systems开始实施国际化战略。公司先后在海外市场设立了研发中心和销售中心,积极拓展国际市场。通过引入国际先进的管理理念和技术经验,ES Systems不断提升自身的国际化水平。同时,公司还加强了与国际知名企业的合作与交流,共同推动电子行业的发展。

Hitano Enterprise Corp公司的发展小趣事

ES Systems非常重视与产业链上下游企业的合作。通过与供应商、渠道商等合作伙伴的紧密合作,公司能够及时了解市场需求和技术趋势,从而快速调整产品策略。此外,ES Systems还积极与高校和科研机构开展产学研合作,共同研发新技术、新产品。这种合作模式为ES Systems带来了持续的创新动力和市场竞争力。

Ho Chien Electronics Group Inc公司的发展小趣事

随着公司业务的不断发展壮大,ES Systems开始实施国际化战略。公司先后在海外市场设立了研发中心和销售中心,积极拓展国际市场。通过引入国际先进的管理理念和技术经验,ES Systems不断提升自身的国际化水平。同时,公司还加强了与国际知名企业的合作与交流,共同推动电子行业的发展。

Chengdu Sino Microelectronics Technology Co Ltd公司的发展小趣事

在集成电路设计领域,技术的突破是赢得市场的关键。成都华微科技始终坚持以技术研发为核心,不断投入巨资进行技术研发和创新。经过多年的努力,公司在可编程逻辑器件、系统级芯片、存储器和模数/数模转换器(AD/DA)芯片等领域取得了重大突破,产品性能达到了国内领先水平。这些技术突破不仅为公司赢得了市场的认可,也提升了中国集成电路设计行业的国际地位。

问答坊 | AI 解惑

资料下载---如何用ZIGBEE进行"定位"开发

GPS只能在室外定位,但若需要在室内实现定位功能怎么办呢?利用ZIGBEE技术实现定位就是一种不错的解决方案,同时该技术也可在室外实现定位。 资料下载-- http://www.wxlsoc.com/download/shows.aspx?id=28…

查看全部问答>

请问这个文件用什么软件打开啊

我想问问各位高手下面这个文件用什么软件能够打开?…

查看全部问答>

传输线和反射的经典文章

传输线和反射的经典文章…

查看全部问答>

请教windows mobile 中文开发环境搭建步骤

如题,我用的是vs 2005, 请教高手们如何搭建中文的 mobile开发环境,多谢指教。…

查看全部问答>

求教:如何查看skype for ppc 依赖哪些库文件啊

求教各位高手,我现在想让skype在wince 5.0 上跑起来 ,我在网上看到说要找到skype for ppc 依赖哪些库文件  ,请问如何察看阿  , 我用vc下depends 和evc下depends 察看的  ,怎么出来的都是windows XP 下的库文件 ...…

查看全部问答>

退出程序,不能关闭进程

WINCE 6.0, VS2005 程序是一个任务管理器,几个对话框,主要操作是CTabCtrl加载几个对话框,(对话框由dialog create),在几个dialog中分别做的是1.每隔一段时间获得CPU和内存的状态,画图 2.获得当前运行的进程,显示于列表中 3.获得当前可见的 ...…

查看全部问答>

新手帖 单片机控制CPLD读取SRAM

library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity read_write is port( clk : in std_logic ;       mcu_oe    : in    std_logic;        ...…

查看全部问答>

电磁场屏蔽的机理 续

与前面已讲述的电场屏蔽及磁场屏蔽的机理不同,电磁屏 蔽对于电磁波的衰减有三种不同的机理: x 当电磁波在到达屏蔽体表面时,由于空气与金属的交界面上 阻抗的不连续,对入射波产生的反射。这种反射不要求屏蔽 材料必须有一定厚度,只要求交界 ...…

查看全部问答>

介绍一下KEIL C51所支持的C语言和汇编语言混合编程的方法!

     51单片机是最早的单片机,也是在国内应用最广泛的单片机,为大家所喜爱!但执行速度较其它单片机较慢。因此在编程时更加要注重程序的执行效率及编程上的技巧处理,最大限度的发挥其性能,满足项目开发的实际需要。在嵌入 ...…

查看全部问答>