#define HALL3_READ_MACRO(v) \ v.CmtnTrigHall = 0; /* Reset trigger, it only handshakes with calling program.*/ \ if (v.EdgeDebounced==0) /* Debounce current position. */ \ { \ HALL3_DEBOUNCE_MACRO(v) \ v.CmtnTrigHall = v.EdgeDebounced; /* Set Commutation trigger here*/ \ } \ else /* If current position is debounced, find match in table */ \ HALL3_NEXT_STATE_MACRO(v) /* and return pointer to current state. Ptr to be incremented*/ \ /* by MOD6CNT after RET.*/ \ \ v.EdgeDebounced = 0; /* Reset trigger*/
在看F2803XHALL3_GPIO.H文件里面一个宏定义的函数,这个函数根本就永远不会执行HALL3_NEXT_STATE_MACRO(v)。因为每次跳出HALL3_READ_MACRO(v)函数时都会执行v.EdgeDebounced = 0; 那么就是说每次进入HALL3_READ_MACRO(v))函数,v.EdgeDebounced都为0,那就永远不会执行HALL3_NEXT_STATE_MACRO(v)了,麻烦大神解释一下这是不是BUG。