2016-12-27 10 views
-3

私はこのコードのいくつかの行を理解カント何theiseコードを私に説明してください: をこのコードはatmelstudioでウィッテンあるとATMELCプログラミングCODEVISION AVR

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

*などのAVR443アプリケーションノートのサンプルコードです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

ようこそスタックオーバーフロー。 [The Tour](http://stackoverflow.com/tour)を読み、[ヘルプセンター](http://stackoverflow.com/help/asking)の資料を参考にしてください。ここに聞いてください。 –

+0

あなたの質問は今ですか?コードのどの部分を特に理解していないのですか? –

+0

どの2つのコード行がちょうどpoinerをして​​いるのですか? –

答えて

1

コードは、メモリバッファからデータフィールドを取得しています。意味のあるフィールドを持つ構造体を定義するのではなく、文字配列drvPatternsCW[]を作成し、その配列へのポインタをpDrvPatternで作成しました。 pTemppDrvPattern + fastTemp.wordに設定すると、pTemp = &pDrvPattern[fastTemp.word]に相当します。 PORT_MC = *(pTemp);は、PORT_MC = pDrvPattern[fastTemp.word]と同じになります。

+0

ありがとうございました。 –