2016-12-27 70 views
-3

我无法理解这段代码的某些行,请形容我theise代码做什么: 这个代码是威腾在atmelstudio是AVR443应用笔记ATMELC编程器CodeVision AVR

unsigned char *pTemp; 
fastTemp.word = ((PIN_HALL & hallMask)>>1); 
pTemp = pDrvPattern + fastTemp.word; 
PORT_MC = *(pTemp); 

作为一个示例代码* pDrvPattern定义如下:

__regvar __no_init unsigned char *pDrvPattern 

pDrvPattern = drvPatternsCW; 
unsigned char drvPatternsCW[] = { 
0, //Stop 
// MC_PORT drive config 
PDP2_CW, //Phase2 
PDP6_CW, //Phase6 
PDP1_CW, //Phase1 
PDP4_CW, //Phase4 
PDP3_CW, //Phase3 
PDP5_CW, //Phase5 
// Configuration of Output Compare operation for timer 0 
COM0P2_CW, //Phase2 
COM0P6_CW, //Phase6 
COM0P1_CW, //Phase1 
COM0P4_CW, //Phase4 
COM0P3_CW, //Phase3 
COM0P5_CW, //Phase5 
// Configuration of Output Compare operation for timer 2 
    COM2P2_CW, //Phase2 
COM2P6_CW, //Phase6 
COM2P1_CW, //Phase1 
COM2P4_CW, //Phase4 
COM2P3_CW, //Phase3 
COM2P5_CW //Phase5 
}; 
__regvar __no_init union _fastTemp{ 
unsigned int word; 
struct{ 
unsigned char LByte; 
unsigned char HByte; //Hbyte = Zero 
}; 
} fastTemp @12; 
#define PDP1_CW ((0<<UL)|(0<<VL)|(1<<WL)|(0<<UH)|(1<<VH)|(0<<WH)) 
#define PDP2_CW ((0<<UL)|(0<<VL)|(1<<WL)|(1<<UH)|(0<<VH)|(0<<WH)) 
#define PDP3_CW ((0<<UL)|(1<<VL)|(0<<WL)|(1<<UH)|(0<<VH)|(0<<WH)) 
#define PDP4_CW ((0<<UL)|(1<<VL)|(0<<WL)|(0<<UH)|(0<<VH)|(1<<WH)) 
#define PDP5_CW ((1<<UL)|(0<<VL)|(0<<WL)|(0<<UH)|(0<<VH)|(1<<WH)) 
#define PDP6_CW ((1<<UL)|(0<<VL)|(0<<WL)|(0<<UH)|(1<<VH)|(0<<WH)) 
#define HALL1 PB1 
#define HALL2 PB2 
#define HALL3 PB3 
#define HALL_MASK ((1<<HALL1)|(1<<HALL2)|(1<<HALL3)) 
#define PORT_MC PORTD 
+0

欢迎来到Stack Overflow。请花些时间阅读[The Tour](http://stackoverflow.com/tour),并参阅[帮助中心](http://stackoverflow.com/help/asking)中的资料,了解您可以在这里问。 –

+0

你现在的问题是?哪部分代码你不明白? –

+0

什么茴香2代码行做一个poiner添加到int ?? –

回答

1

您拥有的代码是从内存缓冲区中提取数据字段。代码不是用有意义的字段定义结构,而是创建了一个字符数组drvPatternsCW[],然后用pDrvPattern创建了一个指向该数组的指针。设置pTemppDrvPattern + fastTemp.word相当于pTemp = &pDrvPattern[fastTemp.word]PORT_MC = *(pTemp);最终与PORT_MC = pDrvPattern[fastTemp.word]相同。

+0

非常感谢您帮助我理解了很多,非常感谢 –