# IAR编译static函数和非函数的问题
被调用函数
static void dn_fsm_cancelEvent(void)
{
dn_fsm_vars.fsmDelay_ms = 0;
dn_fsm_vars.fsmCb = NULL;
dn_fsm_vars.fsmArmed = FALSE;
}
static引用函数
static void dn_reply_getTime()
{
dn_ipmt_getParameter_time_rpt* reply;
dn_fsm_cancelEvent();
...
}
生成的汇编语言
dn_reply_getTime:
0x57e8: 0xb580 PUSH {R7, LR}
dn_fsm_cancelEvent();
0x57ea: 0xf7ff 0xfc93 BL dn_fsm_cancelEvent ; 0x5114
一个跳转语句,简单明了,进入被调用函数
非static引用函数
代码一样,只是dn_reply_getTime前面没有static限定编译出来的代码变成了:
BKPT;
LDC2 …
一执行LDC2就出hardware fault: CFSR.NOCP
the processor has escalated a configurable-priority exception to HardFault.
先定义为非static函数,出这个错。当我把它改为static,然后再删除static之后,居然又和static一样了。再也无法复现刚才的问题了┭┮﹏┭┮