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



Teraz jest 29 mar 2026, o 10:47


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
Autor Wiadomość
PostNapisane: 16 sty 2016, o 22:16 
Offline
Użytkownik

Dołączył(a): 12 kwi 2012
Posty: 107
Pomógł: 0

Witam, mam problem z zainicjowaniem wartości początkowej struktury zagnieżdżonej w pamięci programu.

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


chcę teraz zadeklarować i zainicjować zmienną w pamięci programu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


czy łańcuch powinien wyglądać tak (uwzględniając typy zmiennych):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Dodam, że pokazałem tu małą strukturę. Moja będzie dużo większa tj. około 300 pozycji i chciałbym ją zainicjować zmiennymi o wartości 0 (zero!). Co się stanie gdy pozostawię łańcuch pusty? Przyjmie wartości zerowe?
Nie jestem też pewny kolejności zmiennych w łańcuchu. Czy to będzie:
{nastawa1.wartosc, nastawa1.ilosc, nastawa2.wartosc, nastawa2.ilosc, nastawa3.wartosc, nastawa.ilosc, powtorz}


Poproszę o jakieś sugestie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sty 2016, o 12:04 
Offline
Użytkownik

Dołączył(a): 12 kwi 2012
Posty: 107
Pomógł: 0

Zacznę sam sobie odpowiadać. Znalazłem w sieci że inicjowanie takiej struktury powinno wyglądać raczej tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

A kolejność zmiennych będzie taka:
{{nastawa1.wartosc, nastawa1.ilosc}, {nastawa2.wartosc, nastawa2.ilosc}, {nastawa3.wartosc, nastawa3.ilosc}, powtorz}

Poproszę o pomoc kolegów z forum! :?:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sty 2016, o 13:38 
Offline
Moderator
Avatar użytkownika

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

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 ]

kolejność będzie dokładnie taka jaką masz kolejność zmiennych w strukturze

_________________
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 sty 2016, o 15:43 
Offline
Użytkownik

Dołączył(a): 12 kwi 2012
Posty: 107
Pomógł: 0

Cytuj:
kolejność będzie dokładnie taka jaką masz kolejność zmiennych w strukturze


Dziękuję za podpowiedź. Sprawdziłem w pliku hex (przerobionym na bin) i kompilator inicjuje mi wartości początkowe tak jak napisałeś. :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 sty 2016, o 17:07 
Offline
Użytkownik

Dołączył(a): 12 kwi 2012
Posty: 107
Pomógł: 0

Panie Mirku,
kontynuując moje dywagacje na temat struktur zrobiłem coś takiego jak niżej.
Zdefiniowałem sobie:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Zależało mi na tym aby mieć dostęp poprzez indeksy do zmiennych dlatego stworzyłem w strukturach tablice.
Postępując zgodnie z tym co pisaliśmy w poprzednich postach deklaracja i inicjalizacja pustej zmiennej pgm_cfg (tu oczywiście jest to stała z racji umieszczenia jej w pamięci programu) powinna 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.

Niestety kompilator wyrzuca przysłowiowy "milion" błędów których fragment widać na zrzucie ekranu:
Obrazek

Gdzie popełniam błąd? Jakaś sugestia? Wychodzi na to, że jestem niedouczony. I pewnie zrobiłem coś głupiego. Poproszę o pomoc!



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

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

Nie jestem pewien bo ciężko mi analizować twój pomysł tak ogólnie ale wydaje mi się, że zaczynasz iść w przepaść .... z takimi pomysłami w ten sposób rozbudowaną strukturą - ale jak mówię bez analizy mogę się mylić.

andrzej381 napisał(a):
Gdzie popełniam błąd?

Przede wszystkim popełniasz błąd - że zamiast sobie testować to na jakimś krótkim zapisie to ty testujesz to na kodzie docelowym. Zapytałbym (gdybym był złośliwy) ;) .... a dlaczego nie pokazałeś tu przykładu z tablicami, które mają po 1200 elementów ? a tylko po 10 i 20 ? No sam sobie kładziesz kłody pod nogi


dziel problem na mniejsze - to się tyczy wszystkiego - toż z komunikatu widać , że gdzieś pierdyknąłeś się z nawiasami .... więc czemu sobie nie sprawdzasz na początku zapisu na kilku dosłownie elementach - po kolei .....

no bo teraz to wychodzi - że za każdym razem jak zwiększysz ilość danych to będziesz pytał gdzie wstawiłeś zły nawias ;) .... tzn nie zrozum mnie źle - pytaj ile wlezie - no ale jak dajesz pytanie to pokazuj chociaż testowy i jak najkrótszy kod z którego wynika problem

a podejrzewam, że jak zaczniesz od mniejszych kawałków i będziesz analizował to sam dojdziesz gdzie on leży

------------------------ [ Dodano po: 3 minutach ]

Na koniec dodam że zakręcasz się jak bączek - bo po jaką kiszkę powoływać taki typ:

typedef struct{
TPARAMPR program[20];
}TPARAM;

toż to masło maślane z maślanką

przecież możesz stworzyć na końcu zmienną tablicową

TPARAMPR program[20];

no chyba że masz na myśli tworzenie jeszcze wyższych zależności typów .... ale jeśli tak - to jak mówiłem wyżej - zacznij od początku i ćwicz nawiasowanie - jeśli nie przychodzi ci do głowy uproszczenie tego wszystkiego ....

bo np potrzebne ci później będą te poszczególne podrzędne typy strukturalne ? coś wątpię (ale może się mylę)

_________________
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: 18 sty 2016, o 18:00 
Offline
Użytkownik

Dołączył(a): 12 kwi 2012
Posty: 107
Pomógł: 0

Po kolei:
Typ struktualny TPARAM powołuję po to aby stworzyć tablicę nie tylko w pamięci program ale również w RAMie procesora jak i w EEROMie.
Ok, przykład który podałem to mój maks który potrzebuję. Do testów w tej chwili zmniejszyłem do:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i analizując krok po kroku inicjalizacja wg mnie powinna 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.

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

niestety, tak jak by się można było spodziewać kompilator nadal krzyczy to samo (coś o brakujących nawiasach) co widać na zrzucie:
Obrazek
A może kompilator "nie lubi" tylukrotnego zagnieżdżenia struktur? Pewnie musiałbym coś pokombinować z tablicą 2-wymiarową. Będę nadal kombinował jakoś to rozwikłać. Panie Mirku, ostatnia porada? Czy jako rozwiązanie alternatywne (prostsze) to dobrze kombinuję aby zastosować tablice 2-wymiarową?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 sty 2016, o 20:50 
Offline
Użytkownik

Dołączył(a): 12 kwi 2012
Posty: 107
Pomógł: 0

Chyba złapałem diabła za rogi! Zrobiłem tak. Najpierw spłaszczyłem sobie definicje typów struktualnych do 2 typów:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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


I to kompiluje mi się bez błędów. Wstawiałem też różne wartości do tej inicjacji i patrzyłem w pliku bin(zrobionym z hex programu) i na szybko wygląda, że jest OK.
Panie Mirku, może pan potwierdzić moje przemyślenia?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 sty 2016, o 20:57 
Offline
Moderator
Avatar użytkownika

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

Posłuchaj - potwierdzeniem jest prawidłowa kompilacja ;) a sprawdzanie tego w HEX'ie to już kompletnie mija się z celem. Nawet nie za bardzo rozumiem po co ty zaglądasz do HEX'a wtedy

Oczywiście, że do inicjalizacji można wykorzystywać nazwy po kropce

_________________
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: 18 sty 2016, o 21:07 
Offline
Użytkownik

Dołączył(a): 12 kwi 2012
Posty: 107
Pomógł: 0

mirekk36 napisał(a):
Posłuchaj - potwierdzeniem jest prawidłowa kompilacja ;) a sprawdzanie tego w HEX'ie to już kompletnie mija się z celem. Nawet nie za bardzo rozumiem po co ty zaglądasz do HEX'a wtedy

Oczywiście, że do inicjalizacji można wykorzystywać nazwy po kropce


Dziękuję bardzo, a do mapy bitowej pamięci programu (zrobionej z HEX-a) zaglądam dla własnego "świętego spokoju" żeby upewnić się że osiągnąłem swój cel. Wynika to z małego doświadczenia z językiem C a bardzo dużym z pracy w asemblerze (co prawda '51-ki a nie AVR-a). Jeszcze raz dziękuję za porady.

A bez nazw nie chciało mi się skompilować w żadnym wariancie!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 sty 2016, o 22:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Cytuj:
A bez nazw nie chciało mi się skompilować w żadnym wariancie!

Nie wiem jak robiłeś, ale wrzuciłem Twój przykład, usunąłem nazwy i kompiluje się bez problemu.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 sty 2016, o 10:18 
Offline
Użytkownik

Dołączył(a): 12 kwi 2012
Posty: 107
Pomógł: 0

rskup napisał(a):
Cytuj:
A bez nazw nie chciało mi się skompilować w żadnym wariancie!

Nie wiem jak robiłeś, ale wrzuciłem Twój przykład, usunąłem nazwy i kompiluje się bez problemu.

rzeczywiście!!! Sprawdziłem, bez nazw też się kompiluje. Z tego wniosek, że gdzieś się "zakręciłem" z nawiasami.
Dziękuję za sprawdzenie i zwrócenie uwagi. :)



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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