Das ganze bezieht sich auf das Atmel-Projekt AVR443.
Zu finden hier:
http://www.atmel.com/dyn/resources/prod_documents/doc2596.pdf
IAR-Quellcode hier:
http://www.atmel.com/dyn/resources/prod_documents/avr443.zip
Die fastTemp-Variable wird in der PCInt0-Interruptroutine benötigt.
Die sieht so aus:
1 | #pragma interrupt_handler PCINT0_handler:iv_PCINT0
|
2 | //!
|
3 | void PCINT0_handler()
|
4 | {
|
5 | unsigned char *pTemp;
|
6 | fastTemp.word = ((PIN_HALL & hallMask)>>1); // Read Hall, Mask Pins, shift to use as pointer offset
|
7 | // Line below is desirable performance wise, but causes an internal error in compiler
|
8 | // fastTemp.LByte = (PIN_HALL & HALL_MASK)>>1; // Read Hall, Mask Pins, shift to use as pointer offset
|
9 |
|
10 | pTemp = pDrvPattern + fastTemp.word;
|
11 | // TCCR0A = fastTemp.HByte; //Disable PWM outputs (and thereby close low side FET)
|
12 | // TCCR2A = fastTemp.HByte; //Disable PWM output (and thereby close low side FET)
|
13 |
|
14 | PORT_MC = *(pTemp); //Change drive levels on high side
|
15 |
|
16 | TCCR0A = *(pTemp + PATTERN_COM0_OFFSET); // Reconfigure output compare operation for T0
|
17 | TCCR2A = *(pTemp + PATTERN_COM2_OFFSET); // Reconfigure output compare operation for T2
|
18 | count--;
|
19 | }
|
Wenn ich die Struktur so aufbauen will (also keinen Namen angebe):
1 | union temp{
|
2 | unsigned int word;
|
3 | struct {
|
4 | unsigned char LByte;
|
5 | unsigned char HByte; //Hbyte = Zero
|
6 | };
|
7 | }fastTemp;
|
Gibt mir der Compiler die Fehlermeldung:
sensor_three_phase_BLDC.c(108): field name missing
Mit verschwinden meine ich, das ich im AVR-Studio die Struktur über
einen Watch beobachte.
Sobald aber der erste Programmdurchlauf beendet ist, habe ich nur noch
das LowByte im Watch, das HByte ist verschwunden.