Witam, jak przekazac poprawnie wskaznik tablicy dwuwymiarowej do funkcji?
Wyswietla -1 zamiast 10 czyli pierwszy element.
Kod: C / C++
Wyswietla -1 zamiast 10 czyli pierwszy element.
Czy wolisz polską wersję strony elektroda?
Nie, dziękuję Przekieruj mnie tamtmf napisał:Druga sprawa, że jeśli tablica jest we FLASH to żadne z tych wywołań nie powinno zwracać prawidłowych elementów, bo dostęp do nich jest nieprawidłowy - dane są czytane z SRAM a nie z FLASH.
Mictronic napisał:
Ale co w przypadku gdy chce przejsc na ekran drugi i zaladowac buttony na pozycjach z tablicy drugiej? Chcialem przekazac jakos elegancko wskaznik tablicy do funkcji button_init.
BeginEnd napisał:tmf napisał:Druga sprawa, że jeśli tablica jest we FLASH to żadne z tych wywołań nie powinno zwracać prawidłowych elementów, bo dostęp do nich jest nieprawidłowy - dane są czytane z SRAM a nie z FLASH.
A skąd pewność że jakikolwiek odczyt ma miejsce? Obstawiam, że kompilator/linker sobie to optymalizuje (bo po co czytać skoro wartości mam podane na tacy?).
BeginEnd napisał:Co do adresowania to sprawdź czy adres button_pos_1 nie jest większy niż 64KB. Być może będziesz potrzebował użyć PROGMEM/uint_farptr_t. Przestrzeń adresowa AVR nie jest liniowa i pointery do pamięci SRAM nie działają zawsze tak jak pointer do FLASH (PROGMEM)
Zobacz sobie deklaracje funkcji z biblioteki C operujących na danych we FLASHu np: strlen_PF() to zrozumiesz gdzie popełniasz błąd.
Mictronic napisał:Dodam ze pod avrgcc nie odpala bo on nie rozumie czym jest __flash. Avrstudio oferuje o wiele lepsze mozliwosci.
Mictronic napisał:...czym grozi uzywanie opcji optymalizacji 3...
Mictronic napisał:Rzeczywiscie chodzilo mi o atmel studio.
Dziekuje za ludzkie wyjasnienie problemu. Kod w atmel studio jest na starcie mniejwiecej 2x mniejszy niz w avrgcc pomimo tych samych stopni optymalizacji.