Macht es Sinn beim ATmega für boolsche Variablen/Flags einzelne Bits zu verwenden? Also:
1 | |
UART0__RxStatus ist als unsigned char definiert. Oder macht es mehr Sinn für boolsche Variablen/Flags jeweils ganze Bytes zu verwenden?
1 | |
|
Anzeige
|
AVR Bitbefehle auf das RAM anwenden?Macht es Sinn beim ATmega für boolsche Variablen/Flags einzelne Bits zu verwenden? Also:
UART0__RxStatus ist als unsigned char definiert. Oder macht es mehr Sinn für boolsche Variablen/Flags jeweils ganze Bytes zu verwenden?
Kommt drauf an. Bits sparen RAM, kosten aber ein wenig mehr FLASH und CU-Zeit. Bytes brauchen mehr RAM, sind aber schneller und brauchen weniger FLASH. MFG Falk Es gibt noch eine dritte Variante. Wenn Platz sowohl in RAM wie in ROM kritisch sind, kann man 24 Bits in den 3 frei verwendbaren bitadressierbaren I/O-Registern GPIOR0-2 unterbringen, die genau deshalb in der aktuellen AVR-Generation vorhanden sind (in Tiny2313,Mega88,Mega164 drin, nicht aber in Mega8,Mega16). Einen weiteren Charme entwickeln diese Bits, weil sie mit den I/O-Bitbefehlen ohne Abschaltung der Interrupts atomar manipulierbar sind. Was bei Variablen im RAM nicht der Fall ist. >>Kommt drauf an. Bits sparen RAM, kosten aber ein wenig mehr FLASH und >>CU-Zeit. Bytes brauchen mehr RAM, sind aber schneller und brauchen >>weniger FLASH. Das stimmt für Compiler/Hichsprachen, aber nicht allgemeingültig. Wenn man in reinem ASM arbeitet ist die bitweise Nutzung von Flags die schnellste und GLEICHZEITIG codesparendste Variante, jedenfalls beim AVR, weil es dafür relativ ideale Opcodes gibt. Allerdings sollten diese Flags dann in Registern liegen, nicht im SRam. Jochen Müller > Wenn man in reinem ASM arbeitet ist die bitweise Nutzung von Flags die > schnellste und GLEICHZEITIG codesparendste Variante > Allerdings sollten diese Flags dann in Registern liegen... Die sollten nicht nur, die müssen sogar. Denn soooo schön orthogonal ist der Befehlssatz vom AVR nun auch wieder nicht. Ich habe mir angewöhnt, jeden Zustand auf 1 Byte (bei 8-Bittern) bzw. short (bei 16ern) oder longs (bei 32ern, PC) abzubilden (idealerweise immer die Speicherbusbreite, dann ist für jede Variable nur 1 Buszyklus nötig). Denn dann ist (1) die Tipparbeit am geringsten, und (2) die Lesbarkeit des Codes super. Und ich muß nicht immer nach den doofen (3) Defines für das Bit suchen. Und ich brauche (4) im Debugger nicht das Bit rauspfriemeln, um zu sehen, was Sache ist...usw. usf. Danke für eure Hilfe. Ich werde mich dann wohl an die 1. Variante halten. Grüe, Bernd Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|