2016-12-27 55 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

非常感謝您幫助我理解了很多,非常感謝 –