原始标题:设置IAR MSP430正确的堆栈大小
最近在- 169液晶屏(mspf 169,RAM为2KB )上调试了几个ucos演示示例,for MSP430的默认值为80字节,可以通过编译,运行结果不确定,调试过程为' thestacaction
一.合理设置堆栈大小
首先,检查程序所需的堆栈大小,并生成map文件。 方法如下。
生成图map文件
生成的map文件位于项目目录下的/Debug/List中,打开map文件,然后在CALL GRAPH中找到堆栈的最大使用量。 在我的理解中,它是主函数,堆栈最多,所以它直接拖到文件末尾,靠近地址顺序中的segments。
图2使用最大堆栈
从上图中可以看到,最大堆栈使用量为00000076 (注意这里是十六进制数),即118字节。
接下来,设置堆栈大小。 稍大于最大堆栈的:-)
图3堆栈大小设置
二、请小心
按照上述方法,在设置堆栈后重新编译可能会报告以下连接错误(受限内存不可用) :
图4内存不足链接错误
此时,唯一的方法是重新设计程序。 使用uC/OS时,可以通过以下方法减少内存使用量:
)1)如果是运行uC/OS,则可以将系统配置在os_cfg.h文件,例如减小最大任务数(OS_MAX_TASKS ),关闭扩展功能(以EN结束的变量)
)2)将一些局部变量数组设置为)我遇到了这个问题。 我认为在MSP 430-169液晶屏上完成类似printf的功能,无论如何都需要字符数组。 )
三、我的疑问
在实际调试过程中,尽管我将堆栈设置得比查看map文件堆栈大得多(map文件为0x76,即118,我设置为250 ),但在调试过程中仍然存在这个问题。 如下所示。
sat dec 22,2012233602336023360213360 thestackpointerforstack ' stack ' (currently memory :0 x 55 a ) isoutsidethestackrange
责任编辑: