Frohe Ostern, verstehe ich das richtig das ich das T-Bis im SREG Register für mich frei zur Verfügung habe so das ich es für mich gebrauchen darf. Also nur ich verändere die Werte in dem T-Bit?
Danke für die Antwort. Auf Seite 11 steht das, nur ist mein Englisch nicht das beste und ich wollte mal nummersicher gehen.
Kleiner Tipp: Die Mega48/88/168/328 haben zwei Register (GPIOR1 und GPIOR2) die du als generelle Register für Flags o.ä. benutzen kannst.
Matthias Sch. schrieb: > GPIOR1 Matthias Sch. schrieb: > Kleiner Tipp: Die Mega48/88/168/328 haben zwei Register (GPIOR1 und > GPIOR2) die du als generelle Register für Flags o.ä. benutzen kannst. Klasse Danke. General purpose = Allzweck ... meine rede mein Englisch. Wird mir wohl immer zum Nachteil sein.
Matthias Sch. schrieb: > Kleiner Tipp: Die Mega48/88/168/328 haben zwei Register (GPIOR1 und > GPIOR2) die du als generelle Register für Flags o.ä. benutzen kannst. Die Register hätte ich auch schon wieder fast vergessen. :-) Werden die drei GPIOR eigentlich von Compilern für irgendwelche Zwecke genutzt, oder kann man sie als User bedenkenlos verwenden, um irgendwelche Daten zu speichern? Schneller als Stack-Zugriffe sind "in" und "out" ja allemal.
Markus Weber schrieb: > Werden die drei GPIOR eigentlich von Compilern für irgendwelche Zwecke > genutzt AVR_gcc: Nein, werden sie nicht, solange du sie nicht explizit zuweist, zB. durch #define gflags GPIOR0 Ich würde auch immer mit GPIOR0 loslegen, weil das eine Adresse < 0x20 hat (bei Mega48/88/168/328). Damit kann der Compiler SBI, CBI, SBIS, und SBIC verwenden. Reduziert Codegröße.
@ katastrophenheinz (Gast) >Ich würde auch immer mit GPIOR0 loslegen, weil das eine Adresse < 0x20 >hat (bei Mega48/88/168/328). >Damit kann der Compiler SBI, CBI, SBIS, und SBIC verwenden. Reduziert >Codegröße. Und ist atomar, siehe Interrupt.
katastrophenheinz schrieb: > Ich würde auch immer mit GPIOR0 loslegen, weil das eine Adresse < 0x20 > hat (bei Mega48/88/168/328). Hehehe, und ich habe GPIOR0 vergessen. Sind also wirklich insgesamt 3 von den Dingern: 0x1E GPIOR0 bit addressierbar 0x2A GPIOR1 0x2B GPIOR2 Jetzt wirds aber spannend. Wie legt man denn nun eine Variable da rein?
1 | register volatile uint8_t mFlags asm("GPIOR0"); |
scheint jedenfalls nicht zu klappen. IAR nimmt etwas wie
1 | register volatile uint8_t mFlags @0x1e; |
aber das geht ja bei AVR GCC nicht.
Matthias Sch. schrieb: > Jetzt wirds aber spannend. Wie legt man denn nun eine Variable da rein? Zeitumstellungsgeschädigt? Hatte katstrophenheinz doch geschrieben: #define mFlags GPIOR0
A. K. schrieb: > Zeitumstellungsgeschädigt? Hatte katstrophenheinz doch geschrieben: > #define mFlags GPIOR0 Das habe ich auch gelesen. Also etwas genauer: Die Frage ist, wie erkläre ich ein typedef oder ne union, um tatsächlich einzelne Flags darin anzusprechen. Nehmen wir z.B. an, ich habe so etwas:
1 | typedef struct motorFlags |
2 | {
|
3 | uint8_t motorStopped : 1; //! Is motor stopped? |
4 | uint8_t motorSynchronized: 1; //! Is motor synchronized? |
5 | uint8_t actualDirection : 2; //! The actual direction of rotation. |
6 | uint8_t desiredDirection : 1; //! The desired direction of rotation. |
7 | uint8_t driveWaveform : 2; //! The current waveform that should be produced. |
8 | } mFlags_t; |
9 | // Variable sieht dann so aus:
|
10 | register volatile mFlags_t fastFlags asm("r9"); // direkt im Register |
Wie packe ich so etwas nun in GPIOR0?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.