Dass ist ja alles machtig interressant und compliziert!

Kannst Du mir erklaren wass hier geschiedt?

  • //Mein Program

    typedef volatile struct{
    //mehere volatile Variabelen
    volatile signed int A;
    }MyStructA;

    typedef volatile struct{
    //mehere volatile Variabelen
    volatile signed int B;
    }MyStructB;

    volatile MyStructA MyA;
    volatile MyStructB MyB;

    int main(void){

    unsigned char CopyA,CopyB;

    CopyA=MyA.A;
    CopyB=MyB.B;

    }


Das Program compiliert zu:

lds r24,MyA+20
lds r25,(MyA+20)+1
lds r24,MyA+20
lds r25,(MyA+20)+1

Die '20' is okay denn in mein Program sind A und B die 20e byte im structure.

Da kann mann doch einfach erkennen dass beide Variabelen MyA.A und MyB.B anschliessend (ohne code dazwischen) dieselben register r24/r25 benutzen???

Dieses Program (hier stark vereinfachtet) lauft nur wenn ich CopyA und CopyB wie 'volatile' declariere. Die generierten code sieht dann auch ganz anders aus!

Wo gibt's hier ein Denk Fehler???

Gruss

Henk