Ist es möglich, ein Array zu erstellen, das 256-Byte-Grenze nicht überschreitet? Das heißt, die Adressen der einzelnen Array-Objekte unterscheiden sich nur im unteren Byte. Dies ist eine schwächere Anforderung als das Array auf 256 Bytes ausgerichtet zu halten. Die einzige Lösung, die ich mir vorstellen konnte, war die Ausrichtung auf next_power_of_two(sizeof(array))
, aber ich bin mir nicht sicher über die Lücken, die auf diese Weise erscheinen würden.Array überschreitet 256-Byte-Grenze nicht
Es ist für eine Bibliothek für AVR-Mikrocontroller, und das würde mir ein paar wertvolle Anweisungen in einem Interrupt-Handler sparen. Das Array, das diese Eigenschaft haben sollte 54 Byte lang von etwa 80 Bytes der gesamten statischen Speicher von der verwendet Bibliothek. Ich suche nach einem Weg, der die Speicheranforderungen nicht erhöht.
Ich benutze avr-als gnu Assembler und avr-ld Linker.
Beispiel: Wenn das Array an der Adresse 0x00f0 beginnt, ändert sich das höhere Wort von 0x00 nach 0x01, während es das Array durchläuft.
Ich interessiere mich nicht wirklich, ob es bei Adresse 0x0100 oder 0x0101 beginnt, solange es die Grenze nicht überschreitet.
Sie müssen die Adresse des Arrays ausgerichtet halten? Wie verringert das die Anzahl der Instruktionen, da Sie bereits wissen, dass das Array <= 256 Elemente ist? – MSN
Ich muss es nicht ausgerichtet halten. Siehe das Beispiel, das ich hinzugefügt habe. – cube
Beachten Sie jedoch, dass das Halten des Arrays, das auf eine ** 64 ** -Byte-Grenze ausgerichtet ist, Ihren Anforderungen entspricht - Ihr Linker * sollte * in der Lage sein, diese Zuordnungen zu sortieren, damit Sie keinen verschwendeten Speicher erhalten. –