股票

IAR编译AVR程序时数据栈的设置

今天在测试mega32程序的时候,发现一个问题,对某一项数据进行多次设置的时候,开始进行的很顺利,但是后面竟然崩溃了。以为又是变量太多,栈溢出,查看了一下,发现变量溢出的表现不是这个样子,那应该是直接崩溃,而不是累积起来崩溃。对比了之前的程序,发现增加了很多全局变量,又以为是内存不足,网上查了一下,增加了Options->General->Systen Configuration->Return address stack(RSSTACK),从16改为32,因之前用的是mega16现在换了mega32,发现还是不行。

这时候发现旁边的Data stack(CSTACK)只设置为0x20,上网查了一下,解释为存放数据的位置,在临时变量太多的时候,数据堆栈不够大的话也会造成溢出,表现同样是程序崩溃。于是把CSTACK改为0x40,再进行测试,程序果然能顺利执行了。

打赏
原文链接:,转发请注明来源!

发表评论

  • 1 Responses to “IAR编译AVR程序时数据栈的设置”
    • 软硬堆栈问题

      RSSTACK是硬堆栈,深度是距离软堆栈的距离。硬堆栈地址在高地址,软堆栈地址在低地址。CSTACK是总堆栈大小,减去深度就是软堆栈大小

      回复