Czy można utworzyć tablicę, która nie przekracza granicy 256 bajtów? To znaczy, że adresy poszczególnych elementów tablicy różnią się tylko dolnym bajtem. Jest to słabsze wymaganie niż utrzymanie wyrównania tablicy do 256 bajtów. Jedyne rozwiązanie, jakie mogłem wymyślić, to dopasowanie do next_power_of_two(sizeof(array))
, ale nie jestem pewien co do luk, które pojawiłyby się w ten sposób.Tablica nie przekraczająca granicę 256 bajtów
Jest to biblioteka dla mikrokontrolerów AVR, a to zaoszczędziłoby mi kilka cennych instrukcji w obsłudze przerwań. Tablica, która powinna mieć tę właściwość, ma 54 bajty na około 80 bajtów całkowitej pamięci statycznej używanej przez biblioteka. Szukam sposobu, który nie zwiększa wymagań pamięci.
Używam avr-as asembler gnu i linkera avr-ld.
Przykład: jeśli tablica zaczyna się od adresu 0x00f0, wówczas wyższe słowo zmieni się z 0x00 na 0x01 podczas przechodzenia przez tablicę.
Nie obchodzi mnie, czy zaczyna się pod adresem 0x0100 lub 0x0101, o ile nie przekracza granicy.
Musisz zachować adres tablicy wyrównany? W jaki sposób zmniejsza to liczbę instrukcji, ponieważ już wiesz, że tablica ma <= 256 elementów? – MSN
Nie muszę utrzymywać wyrównania. Zobacz przykład dodany. – cube
Pamiętaj jednak, że zachowanie tablicy wyrównane do granicy ** 64 ** bajtów spełni twoje wymagania - twój linker * powinien * mieć możliwość sortowania tych alokacji, aby nie marnować pamięci. –