内存中的东西分三类:代码(code)、数据(data)、栈(stack), <br>其中stack是负责子程序的调用和返回的,stack实行后进先出的机制,调用子程序时先将当前地址的下一个地址临时保存到stack中,而子程序根据这个地址返回。 <br>在子程序(函数)内部分配的局部变量也是在stack中分配,这样,函数返回时,分配的空间也自动收回。 <br>而heap则是系统从data区中特别挪用并且独立管理的一个数据区,用于程序执行中数据的动态分配。 <br>从表相看:全局静态数据在data中,局部分配的静态数据在stack中,动态分配的数据在heap中
我没遇见这个问题我感觉以下两个办法可以帮你解决:
一:可能原因同Q6
Q6:当在RAM 中对其中一变量开辟的尺寸是512 字节时,程序总占用35KRAM 空间,可以正常烧到芯片中,
也可以正常运行;
当对同一变量开辟的尺寸是1024 字节,而其它均未改变时,程序总占用40K左右RAM 空间,可以正常烧到芯
片中,却无法运行!!!!
A6:方法一将一些变量定义成no init 类型
方法二修改IAR 的cstartups43 程序,具体方法如下:(iar310a为例)
1 将cstartups43 程序加载到用户自己的项目中,cstartups43在iar310a的路径如下$TOOLKIT_DIR$\src\LIB\
2 修改cstartups43 中的__program_start子程序,加入关闭看门狗的命令MOV#0x5A80,&0x0120
3 在Project->Options->Linker->Config 页中选择Override default programe ,并将Entry lib 设置成
__program_start
二:堆栈设计太小,修改堆栈
改堆栈是在你工程的Options里面。首先在Workspace窗口右键单击你的工程,然后选择第一项"Options",或者选在上面菜单中选择Project->Options也可以进入这个选项。在Options里面第一个General Options中,有一堆选项卡,第五个选项卡(就是Library Options再向右一个)就是Stack/Heap,用来调整堆和栈的大小的。调的时候先在Override Default前面打钩。如果你用的是地址线没有扩展的MCU版本,则只有Stack Size 和Heap Size 两个选项可以选择。如果你是用的是较新的F5系列扩展地址线版本MCU,则还可以设置Data20 Heap Size具体怎么设要根据你的应用需求。如果你需要自己申请用来存放Data20类型的数据,就需要把Data20 Heap Size设大一点。如果存放普通的数据那么只需要更改Stack Size和Heap Size。
Stack和Heap的区别有问题吗?如果不清楚的话上百度输入“堆和栈的区别”自己看吧。根据你的应用到底是堆空间要求多一些,还是栈空间要求多一些,给Stack Size和Heap Size分配不同大小的Size。
最后你可以参加一下文档:MSP430常见问题汇总(利尔达)pdf
在“project”菜单下找到“Options”,打开“linker”选项,在第一个“config”下勾选“Linker Con”的“Override default”,然后“edit”按钮就可以点击了,打开后,就能设置“ROM地址空间”和“RAM地址空间”以及堆栈空间了
“应用程序无法启动,因为应用程序的并行配置不正确。请参阅应用程序事件日志,或使用命令行sxstraceexe工具”问题的处理方法。
方法一:
开始 - 运行(输入servicesmsc)- 确定或回车,打开:服务(本地);
我们在服务(本地)窗口找到:Windows Modules Installer服务,查看是否被禁用;
如果Windows Modules Installer服务被禁用,我们必须把它更改为启用 - 手动,重启计算机,再安装应用程序。
静态变量都在全局数据区分配内存,包括后面将要提到的静态局部变量。对于一个完整的程序,在内存中的分布情况如下:
代码区
全局数据区
堆区
栈区
一般程序的由new产生的动态数据存放在堆区,函数内部的自动变量存放在栈区。自动变量一般会随着函数的退出而释放空间,静态数据(即使是函数内部的静态局部变量)也存放在全局数据区。全局数据区的数据并不会因为函数的退出而释放空间。
IAR可以指定msp430的堆栈大小,您可以打开IDE自己摸索下。
栈大小要根据你程序的实际运行情况进行评估。改得太小很可能会在运行时出现稀奇古怪的问题。
如果RAM实在不够用了,果断更换单片机型号才是上策。或者对程序进行调整降低效率换取空间,少搞几个变量。
请教IAR debug 与 release模式的作用
最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release
下又无法进行调试,于是只能采用printf方式逐步定位到问题所在处,才发现原来是给定的一个数组未初始化,导致后面处理异常。网上查找了些资料,在这
罗列汇总下,做为备忘~
一、Debug 和 Release 的区别
Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。
以上就是关于IAR 的general选项里的heap size指的是什么全部的内容,包括:IAR 的general选项里的heap size指的是什么、用IAR仿真msp430f5438a出现问题,急待解决、IAR集成开发环境如何设置堆栈大小等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)