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



Teraz jest 25 sty 2026, o 14:24


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 15 lip 2016, o 23:36 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 141
Lokalizacja: 3-miasto
Pomógł: 0

Witam

pytanie: np. mamy zdefiniowany nowy typ strukturalny
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i chcemy teraz stworzyć zmienna tego typu i umieścić w FLASH
,tą zmienną we flash trzeba za inicjalizować
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Czy taka inicjalizacja jest ok ? chodzi mi tu o to że mamy tablice "char" i czy taką tablicę tak samo się inicjalizuje jak zwykłą zmienną x ?? podając wartości tablicy w nawiasach klamrowych za zmienną x ??
- jakie ogólnie są zasady inicjalizacji zmiennych we flash



Ostatnio edytowano 16 lip 2016, o 10:41 przez Mac, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lip 2016, o 03:53 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27446
Lokalizacja: Szczecin
Pomógł: 1045

Po pierwsze to zacznij od tego:
http://mirekk36.blogspot.com/2013/07/st ... adnie.html

potem przeczytaj to:
http://mirekk36.blogspot.com/2012/08/ec ... zytaj.html

skoro nie dodałeś specyfikatora const dla zmiennej we Flash

Odpowiadając na pytanie - zmienne się inicjalizuje zawsze tak samo niezależnie czy we flash czy RAM.

Poza tym zobacz ile błędów popełniłeś w tej definicji struktury:

1. nie tepedef tylko typedef
2. nie uin8_t tylko uint8_t
3. gdzie masz średniki ?

Zaś jeśli chodzi o inicjalizację twoją to co to jest u ciebie to

a,b,c ?

jakieś zmienne czy elementy tablicy ?

jeśli definiujesz elementy tablicy to co? nie dodajesz nawiasów klamrowych ?

W twoim przypadku powinno wyglądać to tak:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


( na przyszłość stosuj prawidłowe formatowanie kodu w postach - masz przecież instrukcję: topic7402.html )

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lip 2016, o 11:07 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 141
Lokalizacja: 3-miasto
Pomógł: 0

Dziekuje P. Mirku za odpowiedź ( post już poprawiłem ) juz mi się trochę rozjaśniło o co chodzi z inicjalizacją tylko jeszcze parę pytań ;-)

rozumiem że kolejność inicjalizacji jest ważna tzn. nieprawidłowa byłaby taka inicjal. ?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


no i jeszcze korzystając z okazji chciałbym zapytać o wskaźniki

tzn. jak wyglądałby wskaźnik do jakiejś zmiennej zawartej w strukturze we FLASH
czy tak?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lip 2016, o 12:57 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27446
Lokalizacja: Szczecin
Pomógł: 1045

Mac napisał(a):
rozumiem że kolejność inicjalizacji jest ważna

No jak to kolejność miałaby być nie ważna ? ;) no chyba sam nie wierzysz w to co piszesz - nawet nie ma co odpowiadać na to pytanie bo odpowiedź jest oczywista

Mac napisał(a):
tzn. jak wyglądałby wskaźnik do jakiejś zmiennej zawartej w strukturze we FLASH
czy tak?

Jak pytasz o wskaźnik to najpierw zastanów się DOBRZE o jakiego typu tobie wskaźnik chodzi i do czego będzie potrzebny. Bo gdy ktoś tak zadaje w ten sposób pytanie to już czuję przez skórę, że kompletnie ta osoba nie rozumie do czego są typy wskaźników i co one oznaczają ... Widać to zresztą po twoim przykładowym kodzie ...

więc podpowiem ci określając to o co nie zapytałeś na początek:

1. załóżmy że potrzebuję wskaźnik typu char* na przykład do elementów tablicy w strukturze, po to aby później tym wskaźnikiem móc poruszać się po tych elementach tablicy bez korzystania ze struktury. Wtedy nie mogę tego napisać tak:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


dlatego że kompilator od razu dostanie czkawki i rypnie warnigiem, o niezgodności typów wskaźnikowych i ma rację bo znak pobierania adresu postawiony jest przecież przed nazwą struktury a ona jest nazwą wskazującą będącą wskaźnikiem na pierwszy element ale typu TPRZYKŁAD a nie char, więc trzeba wyjaśnić grzecznie kompilatorowi żeby nie bredził, że my wiemy co chcemy zrobić i żeby siedział cicho z warningami - takim oto sposobem - stosując jawne rzutowanie na docelowy typ wskaźnikowy jaki chcemy uzyskać czyli:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i sprawa załatwiona. - teraz możesz sobie np w pętli for() np wysłać wszystkie elementy tablicy do LCD

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


co jest oczywiście odpowiednikiem tego:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


------------------------ [ Dodano po: kilkunastu sekundach ]

A z ciekawości powiedz mi po jasny gwint dałeś tytuł postu "struktury eeprom" jak pytasz o struktury we Flash ?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lip 2016, o 16:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Ja jeszcze wspomnę o innym zapisie inicjowania zmiennych strukturalnych we flashu.
A mianowicie można to zrobić np. tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Szczególnie ten sposób przydaje się jeśli jedną strukturę umieścimy wewnątrz innej struktury
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Wtedy inicjalizacja będzie wyglądać tak
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lip 2016, o 22:37 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 141
Lokalizacja: 3-miasto
Pomógł: 0

hmm... tytuł wziął sie nijako po obejrzeniu poradnika "AVR EEPROM struktury" gdzie jest mowa o umieszczaniu struktur również w pamięci flash.

jak coś to zmienie bo może faktycznie byc mylący

Czyli rozumiem to tak ;-):

definiujemy wskaźnik i jego typ dokładnie taki jaką ma zmienna w strukturze, nastepnie musimy zastosować jawne rzutowanie przed nazwą struktury aby niebyło konfliktu typów , bo & przed nazwą struktury odnosi się do 1 zmiennej nowego typu czyli TPRZYKLAD a a nie do typu pod jakim zoststał zdefiniowany wskaźnik.

czyli chcąc zdefiniować wskaźnik do zmiennnej "x" w strukturze musimy zrobić to tak:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


------------------------ [ Dodano po: 28 minutach ]

Jacek dzieki za alternatywe ten sposób jest jakis taki bardziej czytelny - wiadomo co do czego się przypisuje , ale z kolei sposób P. MIrka jest szybki ( mniej pisania) jak sie zna reguły to łatwo sie korzysta.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lip 2016, o 05:43 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27446
Lokalizacja: Szczecin
Pomógł: 1045

Mac napisał(a):
definiujemy wskaźnik i jego typ dokładnie taki jaką ma zmienna w strukturze

Niekoniecznie taki jak jest w strukturze - już mówiłem może być to wskaźnik jaki ci się żywnie podoba - i pisałem też że dobierasz go wg potrzeb ... w tym przykładzie który podałem może to być równie dobrze uint8_t albo uint16_t gdyby akurat taki był potrzebny z jakichś względów.


Autor postu otrzymał pochwałę

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lip 2016, o 14:53 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 141
Lokalizacja: 3-miasto
Pomógł: 0

Dziekuje w końcu "zatrybiłem" ;-)



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: 8 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO