历史上的今天
今天是: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的所有信息,可能会导致堆栈溢出。
所以最好是不要调用太深。
二、局部变量不要太大太多,如局部数组,超过某个数量需定义为全局数组,因为局部数组同样储存在堆栈中。
上一篇:stm32之堆栈
史海拾趣
|
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 上面电路里,有一大串电容并连,为什么这样处理?… 查看全部问答> |
|
我这边拿到一个他们的开发包,我已经把程序移植到WINCE平台去了,但是该程序不提供播音功能, 我打电话问过,他们说播音接口根据平台自己实现,WINCE下一般用什么wave out之类的?还要管理缓冲之类的 请问下有没用过该产品的兄弟?告诉下怎么做? 重分奖 ...… 查看全部问答> |
|
一,常规现有的封装方法及应用领域 目前LED 的封装方法有:支架排封装,贴片封装,模组封装几种,这些封装方法都是我们常见和常用的。 支架排封装是最早采用,用来生产单个LED器件,这就是我们常见的引线型发 ...… 查看全部问答> |
|
void FlashErase() { uchar *p0; FCTL2 = FWKEY + FSSEL_1 + FN3 + FN4;//选择时钟源,分频 FCTL3 = FWKEY;//清除LOCK while(FCTL3 & BUSY);//如果出于忙,则等待 FCTL1 = FWKEY + ERASE;//使能段操作 p0 = (unsigned char *)0x1080;//数值 ...… 查看全部问答> |
|
一般电子产品都最容易出的问题有:RE--辐射,CE--传导,ESD--静电。通讯类电子产品不光包括以上三项:RE,CE,ESD,还有Surge--浪涌(雷击,打雷) 医疗器械最容易出现的问题是:ESD--静电,EFT--瞬态脉冲抗干扰,CS--传导抗干扰,RS--辐射抗干扰 ...… 查看全部问答> |




