TI中文支持网
TI专业的中文技术问题搜集分享网站

怀疑例程有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。

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:

就是没有其它地方赋值

赞(0)
未经允许不得转载:TI中文支持网 » 怀疑例程有bug
分享到: 更多 (0)