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