最近在MSP430-169LCD(MSP430F169,RAM为2KB)调试一些ucos演示例子,IAR for MSP430默认的堆栈大小是80字节,编译可以通过,运行结果不确定性,调试过程会提示"the stack pointer for stack is outside the stack range",堆栈溢出。那么,到底设置多大的堆栈够用且不浪费呢。
一、合理设置堆栈大小
首先,查看程序共需要多大的堆栈,生成map文件,方法如下:
图1 生成map文件
生成的map文件在项目目录下的/Debug/List,打开map文件在CALL GRAPH找到找到栈的最大使用量(我的理解是main主函数,用栈最多,所以直接拉到文件末尾,靠近SEGMENTS IN ADDRESS ORDER的地方),如下图所示:
图2 最大栈使用
由上图可知,最大栈使用量是00000076(注意这里是16进制),即118字节。
接着,设置堆栈大小,方法如下,可以设置比最大栈稍微大一些:-)
图3 设置栈大小
二、一点小心得
通过上述方法,设置堆栈后,再编译有可能会报如下连接错误(受限的内存远不够使用):
图4 内存不够用链接错误
此时,唯一的办法就是重新设计程序了。在单片机上跑uC/OS,可以通过以下方法来减少内存使用:
(1)如果是跑uC/OS,可以在os_cfg.h文件配置系统,如将最大任务数(OS_MAX_TASKS)设小一些,关掉一些扩展功能(以EN结尾的变量)
(2)将一些局部变量数组设成全局变量(我就遇到这个问题,我想在MSP430-169LCD完成类似printf功能,难免需要一些字符数组)
三、我的疑问
在实际调试过程中,尽管我把堆栈设得比查看map文件堆栈要大得多(map文件是0x76,即118,我设成250),调试的时候,依然有这个问题,如下:
Sat Dec 22, 2012 22:23:21: The stack pointer for stack 'Stack' (currently Memory:0x55A) is outside the stack range (Memory:0x906 to Memory:0xA00)
关键字:iar 堆栈设置 IAR MSP430 堆栈大小
引用地址:
iar 堆栈设置_IAR MSP430设置合理堆栈大小
推荐阅读最新更新时间:2024-10-30 15:23
采用MSP430设计的12位心电(ECG)放大器
作者Email: newtonian@263.net
摘要:本文介绍了心电放大器的基本电路构成,以及采用TI公司的MSP430系列单片机对心电信号进行模数转换处理的方法,还着重探讨了采用带硬件乘法器的MSP430F14X系列单片机对心电信号进行滤波处理的方法,并给出了相应的实验结果。
人体心肌产生的电信号传导到体表之后,由于在体表分布的不同而产生电位差,将这种电压只有mV级别的电位差放大并绘制成图,就得到了心电图(ECG)。心电图在心血管疾病的临床诊断中有非常重要的作用。通常采用的心电图按照导联数分有单导联,三导联,五导联以及十二导联等等;按照精度分常用的有8位和12位精度等等。单导联,精度低的心电图常用于进行心电监控以及心
[单片机]
MSP430F149 TimerA 输出pwm信号 C程序代码
MSP430F149 TimerA 输出pwm信号 注意其中寄存器设置与pwm信号输出引脚的对应关系 P1.2-TA1,TACCR1,TACCTL1;,P1.3-TA2, TACCR2,TACCTL2。 #include msp430x14x.h #define uint unsigned int #define uchar unsigned char void int_clk() { uchar i; BCSCTL1 &= ~XT2OFF; //打开XT振荡器 BCSCTL2 |= SELM1+SELS; //MCLK为8MHz,SMCLK为8MHz do {
[单片机]
MSP430 大型数组 上电不启动
现象:程序烧录板子后,单片机不启动,卡死。注释掉部分字节数组后,才能运行。 分析: 这是IAR编译的方法,导致看门狗溢出了。MSP430单片机一上电看门狗就已经启动,但是在进入main()函数之前,软件会先初始化用到的一些数据,比如数组。如果数定义的比较大,初始化时间比较长,那就有可能导致看门狗溢出了,单片机复位,然后重启,再初始化,再溢出,再复位..程序永远也进不去主函数。 解决方法: 使用低级初始化函数:int __low_level_init(void) 。该函数会自动把低级初始化函数放在程序的最开始处,在此可以关闭看门狗,等低级初始化函数执行完之后,才会进行数据初始化,最后再进入main()函数。 void
[单片机]
MSP430FR5969内存分配的问题
cmd文件里的具体内容我就不贴了,大家自己可以看一下。cmd文件主要由两部分构成,一个是MEMORY{};另一个是SECTIONS{} 其中MEMORY{}是定义内部所有寄存器及存储器的地址,在这里大部分内容都是厂家定义好的,一般不能修改。但是咱们今天要改的就是他,当然只能改其中允许该的地方,那就是FRAM的分配问题。根据数据手册里提供的内存分配情况(如下图)我们可以得知,59x9的内存从0x0000开始,一直到0x13FFF。对应着这个图和Cmd文件,我们可以了解内部的地址分配问题,如果做过总线扩展之类的同学肯定对这个不会陌生了,如果没有见过就需要理解一下。其实也很简单,就是对应的地址要对应上就可以了。有一些是固定好的不能变
[单片机]
基于MSP430F449的新型智能流量计的设计与开发
摘要:介绍了一种以MSP430F449单片机为核心的智能流量计。具体阐述了该流量计的工作原理、总体设计及硬件电路设计和软件设计。该流量计适用于各种复杂环境,并可以和其他上下游设备结合,实现现场流量测量的智能化和多功能化。
关键词:流量计 MSP430F449系列单片机 智能仪表
随着微型计算机技术和嵌入式系统的迅速发展,以微型计算机(单片机和嵌入式系统)取代传统仪表的常规逻辑电子线路,开发新一代的具有某种智能的灵巧仪表,已成为仪表开发领域的新趋势。MCU(微控制器或单片机)及嵌入式系统等的问世和性能的不断改善,大大加快了仪器仪表微机化和智能化的进程。MCU本身具有体积小、功耗低、价格便宜等优点,用它们开发各类智能产品更具有周
[应用]
IAR for msp430的一个编译错误的解决方法
简介:很多人在win7上安装 IAR for msp430 后编译会出现如上的错误,笔者刚开始也遇到了这个问题,很是困惑。在网上找解决方法。 Fatal Error : Copy protection check, No valid license found for this product 2 很多人在win7上安装 IAR for msp430 后编译会出现如上的错误,笔者刚开始也遇到了这个问题,很是困惑。在网上找解决方法。很多都是如下回答: 注意:破解后如出现以下情况: Fatal Error : Copy protection check, No valid license found for this pr
[单片机]
利用MSP430F5529定时器捕获功能,实现信号周期或频率的测量
// 这个程序利用TIMER A0生成1KHz的方波,从引脚P1.3输出,送到引脚P7.4, // 再利用TIMER B0测量周期。为测试方便,引脚P1.0输出32KHz的ACLK, // 引脚P2.2输出12MHz的SMCLK. // ACLK = LFXT1 = 32kHz; SMCLK = MCLK = 12MHz // // MSP430F5529 // ------------------------- // /|| XT1IN|- // | | | 32kHz // --|RST XT1OUT|- //
[单片机]
基于MSP430单片机的便携式气象仪设计
0 引言 温度、湿度、气压、风速、风向等气象参数的测量在日常生活、农业、渔业、工业、林业、航海等领域中起着十分重要的作用,很多地区气象参数的测量大多依靠当地天气预报,可是,天气预报地域范围较广,无法精确到小区域的气候测量。而搭建气象台成本较高,性价比很低,因此设计一种小型化,便携式的综合气象测量仪就显得十分必要。针对上述问题本文设计了一种低功耗便携式气象仪,该气象检测系统可以有效地测量小区域的温度、湿度、气压、风速、风向等气象参数,精度可达到普通气象测量要求,还有实时显示、实时存储、回溯查询的功能,具有低功耗、小型化、便携式、低成本的特点,适应于各种小区域的气象测量,具有一定的实用价值。 1 系统设计和工作原理 如图1所示,
[单片机]