在ADS1.2中通过生成static callgraph 估算栈大小,但是出现了"Maximum Stack Usage = 2168 bytes + Unknown "<br />经过注释代码排查,确认问题出现在以下代码中<br /><br /> for (i=0;i<EFFECTIVE_SWITCH_NUM;i++)<br /> {<br /> switch(g_ctrllight)<br /> {<br /> case CTRL_STATE_DEFAULT:<br /> LED_SET(l_led_lun,FALSE);<br /> break;<br /> case CTRL_STATE_JUMP:<br /> LED_SET(l_led_lun,TRUE);<br /> break;<br /> case CTRL_STATE_WARN:<br /> LED_SET(l_led_lun,g_curtime.sec&0x1); <br /> break;<br /> }<br />以上代码引用的代码如下:<br />void LED_SET(int i_led,bool i_on)<br />{<br /> if (i_on)<br /> {<br /> LIB_BitClear(&l_led,i_led&0x7);<br /> }<br /> else<br /> {<br /> LIB_BitSet(&l_led,i_led&0x7);<br /> }<br />}<br /><br />void LIB_BitClear(UCHAR *op_value,int in_bit)<br />{<br /> *op_value= (*op_value)&(~(1<<in_bit));<br />}<br /><br />经过检查,如果将case中的LED_Set函数替换成简单代码,就没问题,但是LED_Set在其他地方被调用也不会出现堆栈大小不可知的情况,请问原理上讲,什么情况下才会出现<br />堆栈大小Unknown的情况,该如何解决 |
|