Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 25 lut 2025, o 14:11


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 2 ] 
Autor Wiadomość
PostNapisane: 28 mar 2015, o 15:19 
Offline
Nowy

Dołączył(a): 28 mar 2015
Posty: 2
Pomógł: 0

Witam wszystkich:)

Jest to mój pierwszy post tutaj, chociaż wiele razy korzystałem z porad przeglądając to forum:)

Piszę dlatego, że od dwóch dni dręczy mnie pewna zagwozdka, otóż stworzyłem sobie tablice struktur przedstawioną poniżej, która ma nawiasem mówiąc służyć do obsługi menu:

(Aby ładnie było widać składnię proponuje ctrl + scroll down aby zmniejszyć obraz gdyż kod jest dość szeroki:))
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Wszystko elegancko działało dopóki nie uparłem się jak widać żeby wpakować całą tą tablice do flash'a żeby zaoszczędzić trochę RAMu.
Mianowicie mam problem z odczytaniem stringa "first_line", próbowałem na wiele sposobów, oczywiście używając lcd_str_P() i zawsze wyświetla mi krzaki. Na mój rozum takie coś:
Kod:
lcd_str_P( first_line);
powinno hulać, a tak nie jest.

Zauważyłem, że gdy zmienię w deklaracji struktury:
Kod:
char* first_line;
na
Kod:
char first_line[];
i wyświetlę string w taki sposób:
Kod:
lcd_str_P( first_line);

to wszystko elegancko działa.

Moje pytanie brzmi jaka jest różnica? Jak wiadomo użycie nazwy tablicy bez nawiasów jest po prostu adresem pierwszego elementu tablicy w tym przypadku znaków. W pierwotnym przypadku również jest to adres pierwszego elementu string'a więc w czym problem?

Jak dla mnie nie robi mi większej różnicy czy użyję tam tych nawiasów czy wstawię gwiazdkę ale z czystej ciekawości chciałbym się dowiedzieć co jest nie tak, a przy okazji czegoś nauczyć. :)

Dodam że kompilator w żadnym z tych przypadków nie wywala błędów ani ostrzeżeń.

Pozdrawiam:)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 mar 2015, o 19:45 
Offline
Nowy

Dołączył(a): 28 mar 2015
Posty: 2
Pomógł: 0

Dzięki za pomoc, wiele się wyjaśniło. Myślałem, że to makro działa troszkę inteligentniej:) Mam zamiar jeszcze pozostać w C, może jak przesiądę się na ARMy to zainteresuję się C++ :)

Tak żeby sie upewnić, że dobrze zrozumiałem.
Sama tablica została umieszczona w flashu ale definicje struktur juz nie, tak?
Więc żeby wszystko umieścić we flashu muszę jak napisałeś osobno zdefiniować struktury z użyciem PGMSPACE i wskaźniki do nich umieścić w tablicy menu[]. Ale żeby te stringi też umieścić w pamięci programu muszę znowu "stworzyć " tablice dla każdego stringa i wskaźniki do tych stringów użyć w definicjach struktur. Oczywiście wszystko z użyciem PGMSPACE. Trochę zagmatwałem... ale mam nadzieje że w miarę zrozumiałe.

Trochę ciężkie byłoby operowanie na adresach żeby się dostać do danego stringa....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 2 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO