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



Teraz jest 22 cze 2026, o 18:15


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 1 sty 2018, o 15:15 
Offline
Nowy

Dołączył(a): 04 sty 2017
Posty: 19
Pomógł: 0

Witam, wiem ze dzis nowy rok i kazdy pewnie sie leczy po wczoraj ale moze ktos tu jest:)
mam pewne pytanie, zapewne trywialne ale blokuje mnie i nie potrafie znalesc jednoznacznej odpowiedzi w sieci

Otoż, mam pewna tablice uzupelniona wartosciami tylko 0 i 1, oto fragment tej tablicy:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Musze sprawdzac po kolei 8 kolejnych liczb z tablicy zaczynajac od jakiegos tam indeksu, wymyslilem to tak ze wprowadzam dodatkowa zmienna, ktora jest wlasnie tym indeksem i dodaje po kolei do niego wartosc +1 aby sprawdzac kolejne liczby
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


niestety moj sposob nie dziala, program wariuje, jesli wpisze "z palca" wartosci, tj tab[1], tab[2] wszystko dziala, ale tab[zmienna+1] juz nie, wyjasni mi ktos czemu? probowalem tez "wprowadzic" zmienna przez argument funkcji, efekt byl ten sam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 sty 2018, o 16:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

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: 1 sty 2018, o 18:46 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

miksior napisał(a):
jesli wpisze "z palca" wartosci, tj tab[1], tab[2] wszystko dziala, ale tab[zmienna+1] juz nie, wyjasni mi ktos czemu?

Wartości elementów tablicy są stałe i znane w momencie kompilacji.

Kiedy użyjesz tab[1], indeks tablicy jest stały i znany w momencie kompilacji, tak samo jak wartość elementu tablicy pod tym indeksem.

Kiedy sprawdzasz warunek if (tab[1]==1), wyrażenie w nawiasie może być obliczone w momencie kompilacji, i najprawdopodobniej to właśnie robi kompilator optymalizując kod - kompilator wcale nie generuje kodu odczytującego wartość elementu tablicy, tylko w momencie kompilacji sprawdza, czy wyrażenie tab[1]==1 jest prawdą, czy też nie.

Kiedy sprawdzasz warunek if (tab[zmienna]==1), kompilator nie może przewidzieć w momencie kompilacji, jaka będzie wartość zmiennej zmienna w trakcie wykonywania programu, musi więc faktycznie wygenerować kod pobierający wartość z tablicy tab[]. Tablice zapisujesz w pamięci FLASH za pomocą atrybutu PROGMEM, jednak jak koledzy wyżej zwrócili Ci uwagę, nie odczytujesz elementów prawidłowo. W przypadku użycia atrybutu PROGMEM powinieneś do odczytu użyć makra pgm_read_byte().

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

_________________
AVR-GCC - dane w pamięci FLASH


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 sty 2018, o 19:48 
Offline
Nowy

Dołączył(a): 04 sty 2017
Posty: 19
Pomógł: 0

dzieki koledzy! faktycznie podany przez was sposob z pgm_read_byte dziala! 2 dni kminienia na darmo :D

andrews, dzieki, sposob kolegow wyzej juz mi wszystko wyjasnil, ewentualnie pozniej przetestuje kod ktory wrzuciles



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2018, o 23:18 
Offline
Użytkownik

Dołączył(a): 28 paź 2013
Posty: 28
Pomógł: 1

Jeśli zamiast przestarzałego PGOGMEM uzyłbyś __flash, to od razu dobrze by Ci działało. Ponieważ wtedy odwołujemy się do danych tak jakby były zwykłymi zmiennymi w RAM. Kompilator dzięki definicji wie, że dane są w ROZM i wygeneruje prawidłowy kod. Także nic nie tracimy na takim zapisie. Zyskujemy zaś zdecydowaną poprawę czytelności i jeszcze parę innych korzyści [emoji3]

Wysłane z mojego Redmi Note 4 przy użyciu Tapatalka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 sty 2018, o 00:54 
Offline
Użytkownik
Avatar użytkownika

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

A czy na pewno __flash działa w AVR GCC? Bo to jest składnia IAR ...

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 sty 2018, o 08:29 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

czarusgg napisał(a):
Jeśli zamiast przestarzałego PGOGMEM uzyłbyś __flash, to od razu dobrze by Ci działało. Ponieważ wtedy odwołujemy się do danych tak jakby były zwykłymi zmiennymi w RAM.

Przecież dokładnie to próbowałem uświadomić autorowi wątku już w moim poście powyżej (patrz komentarze w kodzie).

rskup napisał(a):
A czy na pewno __flash działa w AVR GCC? Bo to jest składnia IAR ...

Wystarczy kliknąć link, który podałem w poście powyżej (AVR-GCC - dane w pamięci FLASH) i wszystko się wyjaśni.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 sty 2018, o 10:28 
Offline
Użytkownik
Avatar użytkownika

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

andrews napisał(a):
Wystarczy kliknąć link, który podałem w poście powyżej (AVR-GCC - dane w pamięci FLASH) i wszystko się wyjaśni.
Popatrzę :). Odkreślone było na dole maila jak stopka, więc zostało za nią uznane a nie jako link do przejrzenia :(.

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sty 2018, o 11:27 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

rskup napisał(a):
Odkreślone było na dole maila jak stopka, więc zostało za nią uznane a nie jako link do przejrzenia

Faktycznie moim zamiarem było to upodobnić do stopki ;), ale sądzilłem, że temat łącza jest na tyle zbliżony do tego, o czym pisałem, że może ktoś się zainteresuje... :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sty 2018, o 12:44 
Offline
Użytkownik
Avatar użytkownika

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

andrews napisał(a):
Faktycznie moim zamiarem było to upodobnić do stopki ;),

Mój post był
Cytuj:
Napisane: wczoraj, o 00:54
więc takie działania przy takiej porze tak się kończą ;)

--
Pozdrawiam,
Robert

PS. Bardzo fajny artykuł. Będę musiał pokorzystać z __flash :)



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

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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO