#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。
mangui zhang:
我觉得这种不应该属于bug
目的是进条件一 还有此变量有没有可能在其他地方被修改
#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。
ray1:
回复 mangui zhang:
就是没有其它地方赋值