TA的每日心情 | 奋斗 2020-9-28 10:10 |
---|
签到天数: 1018 天 连续签到: 1 天 [LV.10]以坛为家III
|
发表于 2012-8-23 15:37:28
|
显示全部楼层
从网上找的经验~~感觉特别有用 解决了堆栈溢出的难题~~~
最近在调试TimerA和TimerB的时候,总会出现以下问题:
The stack 'Stack' is filled to 100% (80 bytes used out of 80). The warning threshold is set to 90.%
这个问题以前出现过,糊里糊涂解决了,只知道:一出现这个问题,肯定是开了中断但是没有中断处理函数导致,但是具体不知道是哪个问题导致的!
现在又一次遇到,打算把它彻底解决掉。
还是沿着 没有中断处理函数这个思路走下去,先看一下TimerB的初始化: - void TimerBIni()
- {
- //add
- TBCTL=TBSSEL1+TBCLR;//Reset TimerA
- TBCCTL0|=CCIE;
- TBCCR0=TimerBCount;//1.9KHz
- TBCTL|=TBSSEL1+TBIE+MC0;//SMCLK,divider:0,up Mode,Interrupt enable
- }
- #pragma vector = TIMERB0_VECTOR
- __interrupt void TimerBInter(void)
- {
- //add
- if(TimerBIntCount<31)
- {
- TimerBIntCount++;
- }
- else
- {
- //1S周期处理,添加代码
- //CPU1StageLEDBlink();
- TimerBIntCount=0;
- }
- }
在某一次尝试过程中,发现把TBIE去掉就OK了,而且刚好TBIE是一个开关中断的控制位,这时茅塞顿开,马上开始查找TimerB的中断的所有资料。
在查看一翻以后,得知TimerA和TimerB 都有两个中断标志,一个是CCIFG,TXIFG,其中TXIFG是由TXIE来启动的,马上见到曙光了。查看了一下MSP430的中断向量表得知:
TBIVContents Interrupt Source Interrupt Flag Interrupt Priority
00h No interrupt pending --
02h Capture/compare1 TBCCR1 CCIFG Highest
04h Capture/compare2 TBCCR2 CCIFG
06h Capture/compare3† TBCCR3 CCIFG
08h Capture/compare4† TBCCR4 CCIFG
0Ah Capture/compare5† TBCCR5 CCIFG
0Ch Capture/compare6† TBCCR6 CCIFG
0Eh Timer overflow TBIFG Lowest
看到上面的大概明白了吧,我的中断函数为TBCCR0的处理函数,而开启TBIE,就要通过TBIV来处理中断还是,而我的没有。所以才会出现堆栈溢出,
这个问题这下子终于解决了。哈哈哈哈啊哈。
问题总结:只要提示堆栈溢出的错误,大部分都是因开启了中断但没有对应的中断处理函数导致!!
|
|