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



Teraz jest 11 lut 2025, o 12:31


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 6 sty 2015, o 13:11 
Offline
Użytkownik

Dołączył(a): 09 gru 2013
Posty: 103
Pomógł: 3

Witajcie :)


W pamięci flash trzymam tablicę w stylu:

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 stworzyłem 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.


Tworzę sobie w pamięci flash obiekty tego typu:

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


Stworzyłem sobie funkcję, pobierającą wskaźnik z pamięci flash na daną strukturę Sign:

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 chciałbym stworzyć sobie dynamiczną tablicę wskaźników na typ Sign:

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


Którą uzupełniam w sposób następujący:

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


i próbuję wyświetlić zawartość tablicy __A w sposób następujący:

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


Ale niestety dostaję krzaki. Co robię źle?

Dodam, że takie coś działa znakomicie:

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


Ale zależy mi, by zrobić podobnie do tego, jak wyżej opisałem.

Pozdrawiam i dziękuję za pomoc:)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2015, o 18:58 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

Elektro_maniak napisał(a):
const uint8_t __A[]


My, zwykli śmiertelnicy nie używamy nazw rozpoczynających się od podkreślnika albowiem są zarezerwowane: http://stackoverflow.com/questions/3325815/what-does-double-underscore-mean-in-variable-name-in-c-language
Elektro_maniak napisał(a):
Którą uzupełniam w sposób następujący:

Składnia: [ Pobierz ] [ Ukryj ]
język c

dsp.txt[0] = *GetChar('A');

GeSHi


No nie bardzo "którą uzupełniam", zmienna dsp pojawia się w tym miejscu po raz pierwszy, nic nie wiadomo o jej typie, można tylko snuć spekulacje. Na przykład takie, że jeżeli typem dsp.txt jest Sign* to powyższe przypisanie jest wielce podejrzane. Funkcja GetChar zwraca wskaźnik na Sign, a jeżeli damy tam operator wyłuskania to co uzyskamy? Chyba jakąś lipe?
Jeśli dsp.txt to tablica elementów uint8_t to też wygląda to źle.

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2015, o 19:56 
Offline
Użytkownik

Dołączył(a): 09 gru 2013
Posty: 103
Pomógł: 3

Przepraszam, miało być oczywiście:

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: 6 sty 2015, o 20:43 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

To zastanów się po co ta gwiazdka. Ta linia nie wywala błędu czy warninga?
To nie wszystko: zastanów się co tak naprawdę zwraca funkcja GetChar. W założeniach ma zwracać wskaźnik na _A, a faktycznie zwraca dwa pierwsze bajty _A, nieprawdaż?

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2015, o 21:05 
Offline
Użytkownik

Dołączył(a): 09 gru 2013
Posty: 103
Pomógł: 3

Właśnie ta gwiazdka też mi nie pasowała, ale jedynie tak kompiluje się bez żadnych ostrzeżeń czy warningów.
Jak dam:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

to dostaję: incompatible types in assignment

A z funkcją GetChar, to niestety nie wiem co jest źle. pgm_read_word jest po to, bo chciałbym odczytać wskaźnik w pamięci flash do tablicy _A. Nie wiem jak to powinno inaczej wyglądać. Proszę o pomoc.

Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2015, o 23:16 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

Elektro_maniak napisał(a):
incompatible types in assignment

Bo txt jest (czy raczej powinno być) wskaźnikiem na wskaźniki do Sign, czyli
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

wtedy
txt[0] jest typu Sign* i pasuje do typu zwracanego przez GetChar
Elektro_maniak napisał(a):
A z funkcją GetChar, to niestety nie wiem co jest źle. pgm_read_word jest po to, bo chciałbym odczytać wskaźnik w pamięci flash do tablicy _A.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
nie zwraca wskaźnika do _A tylko zawartość _A, a konkretnie dwa pierwsze bajty zapisane pod adresem _A: http://www.nongnu.org/avr-libc/user-manual/group__avr__pgmspace.html#ga32d8ab354156f4b1ffdb77a275ba6223

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2015, o 23:36 
Offline
Użytkownik

Dołączył(a): 09 gru 2013
Posty: 103
Pomógł: 3

Ok, to w takim razie w jaki sposób mogę uzyskać wskaźnik do tej struktury w pamięci flash?

Próbowałem też w poniższy sposób, ale on powinien zadziałać tylko w przypadku, kiedy _A jest w RAM:
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 jest teraz to wywala krzaki.

Pozdrawiam :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2015, o 09:15 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

Żadne "bo jest warning" tylko typy muszą być zgodne

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


W buffor[0..7][3] jak się domyślam, ma się znaleźć zawartość tablicy __A (uwielbiam takie nazwy :-|)? W takim razie przydało by się po drodze odczytać wskaźnik z _A->sgn, czyli w sumie było by jakoś tak:

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


zamiast txt[0] = &_A; można by wrócić do funkcji:

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


Autor postu otrzymał pochwałę

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2015, o 11:15 
Offline
Użytkownik

Dołączył(a): 09 gru 2013
Posty: 103
Pomógł: 3

Witaj,
Niestety to nadal nie jest to, bo jak dostawałem krzaki tak dostaję nadal. Musi gdzieś tu być wciąż jakiś błąd, który nam ucieka.
Ale i tak bardzo dziękuję Ci za pomoc :)

Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2015, o 12:24 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

Chyba tu będzie błąd:
xor napisał(a):
tmp_ptr = (const uint8_t *)pgm_read_word(txt[0]->sgn);

makro pgm_read_* przyjmuje wskaźnik na komórkę pamięci a podana jest wartość, czyli było by jakoś tak (trzeba sprawdzić priorytet operatorów):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2015, o 12:33 
Offline
Użytkownik

Dołączył(a): 09 gru 2013
Posty: 103
Pomógł: 3

Bardzo dziękuję za pomoc. Teraz działa elegancko.

Pozdrawiam :)



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

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