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

Добро пожаловать в Переполнение стека. Пожалуйста, найдите время, чтобы прочитать [The Tour] (http://stackoverflow.com/tour) и обратитесь к материалу из [Справочного центра] (http://stackoverflow.com/help/asking) о том, что и как вы можете спросите здесь. –

+0

И ваш вопрос сейчас? Какие части кода вы не понимаете в частности? –

+0

какой тезис 2 строки кода делают ровно poiner добавлен в int ?? –

ответ

1

код у вас есть дергает поле данных из буфера памяти. Вместо того, чтобы определять структуру со значимыми полями, код создал массив символов, drvPatternsCW[], а затем создал указатель на этот массив с pDrvPattern. Установка pTemp - pDrvPattern + fastTemp.word является эквивалентом pTemp = &pDrvPattern[fastTemp.word]. PORT_MC = *(pTemp); заканчивается тем же, что и PORT_MC = pDrvPattern[fastTemp.word].

+0

спасибо большое, что вы мне помогли полностью понять –