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



Teraz jest 25 kwi 2024, o 14:39


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 20 ] 
Autor Wiadomość
PostNapisane: 26 lis 2018, o 18:55 
Offline
Użytkownik

Dołączył(a): 27 sie 2015
Posty: 47
Pomógł: 0

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

w takiej postaci napis moge potem wyświetlić na lcd po skopiowaniu przez funkcję ale problem zaczyna się jak biore napis z tablicy:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

przy takiej opcji ekran mam pusty chyba, że usunę przedrostki PROGMEM i tablice wpadną do RAMU wtedy wszystko działa, jednak zależy mi by było to we flashu.
Przy opcji:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

również nie działa prawidłowo :cry: :?: :?:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lis 2018, o 19:13 
Offline
Użytkownik

Dołączył(a): 02 cze 2014
Posty: 68
Pomógł: 4

memcpy_P() lub memcpy_PF()


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lis 2018, o 23:35 
Offline
Użytkownik
Avatar użytkownika

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

Proponuję przeczytać:
http://mirekk36.blogspot.com/2013/11/tablica-wskaznikow-we-flash-progmem.html ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lis 2018, o 19:55 
Offline
Użytkownik

Dołączył(a): 27 sie 2015
Posty: 47
Pomógł: 0

kijas1 napisał(a):
memcpy_P() lub memcpy_PF()

przy zastosowania tego co kolega podał mam "krzaki w miejscu napisu" wczesniej ekran byl pusty



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lis 2018, o 20:04 
Offline
Moderator
Avatar użytkownika

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

panie panie, memcpy() to funkcja powiedziałbym binarna a nie do operacji na łańcuchach ... więc nie kopiuje zera na końcu stringa

czemu nie użyjesz np strcpy() albo strcpy_P()

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


?

_________________
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: 27 lis 2018, o 20:23 
Offline
Użytkownik

Dołączył(a): 27 sie 2015
Posty: 47
Pomógł: 0

mirekk36 napisał(a):
panie panie, memcpy() to funkcja powiedziałbym binarna a nie do operacji na łańcuchach ... więc nie kopiuje zera na końcu stringa

czemu nie użyjesz np strcpy() albo strcpy_P()

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


?

Bo już mam tak napisaną procedurę która działa defakto, do centrowania napisu na LCD i dzielenia na 2 linijki, skoro memcpy działa pobierając napis z ramu to czemu z flashem jest problem??

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: 27 lis 2018, o 20:35 
Offline
Moderator
Avatar użytkownika

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

marcin-9999 napisał(a):
flashem jest problem??

bo nie chcesz zrozumieć co to znaczy stosowanie suffixu "_P" dla danych we flash, poza tym upierasz się troszkę bez sensu - bo stosując memcpy() musisz ręcznie rypać za każdym razem ZERO na koniec i pilnować długości stringów - jaki jest sens ?

_________________
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: 27 lis 2018, o 20:50 
Offline
Użytkownik

Dołączył(a): 27 sie 2015
Posty: 47
Pomógł: 0

mirekk36 napisał(a):
marcin-9999 napisał(a):
flashem jest problem??

bo nie chcesz zrozumieć co to znaczy stosowanie suffixu "_P" dla danych we flash, poza tym upierasz się troszkę bez sensu - bo stosując memcpy() musisz ręcznie rypać za każdym razem ZERO na koniec i pilnować długości stringów - jaki jest sens ?

tak zgadza się ale z tym nie jest problem z z długoscią domyslnie miała sobie radzić funkcja strlen... czyli rozumiem z w taki sposób jak z robiłem nie da się



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lis 2018, o 21:02 
Offline
Moderator
Avatar użytkownika

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

ależ da się ... można nawet własną pętlą for() kopiować "na piechotę"

------------------------ [ Dodano po: 1 minucie ]

tak w ogóle to coś czuję, że "przed chwilą" programowałeś w jakimś andruino, sądząc po takich "kwiatkach"

marcin-9999 napisał(a):
int mm=35;

_________________
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: 27 lis 2018, o 21:12 
Offline
Użytkownik

Dołączył(a): 27 sie 2015
Posty: 47
Pomógł: 0

nie, to tak na szybko dodałem i zostało :lol: mogę prosić jakąś konkretniejszą podpowiedź prosić odnośnie memcpy? bo nadal nie wiem gdzie tkwi problem, skoro kopiuje z tablicy we flash i używam memcpy_P, to problem tkwi tutaj czy w samej funkcji od wyświetlania :oops: ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2018, o 06:24 
Offline
Moderator
Avatar użytkownika

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

to pokaż że jak ty używasz tego memcpy_P w kodzie w jakimś fragmencie kodu

_________________
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: 28 lis 2018, o 19:08 
Offline
Użytkownik

Dołączył(a): 27 sie 2015
Posty: 47
Pomógł: 0

Panie Mirku więc tak, to wygląda do testów:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

w takim przypadku na wyswietlaczu mam krzaki a jeśli wpiszę w linijkę
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

to działa wszystko.

a jak wybiore element "ręcznie" też działa tzn tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Ostatnio edytowano 28 lis 2018, o 19:42 przez marcin-9999, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2018, o 19:25 
Offline
Użytkownik

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

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


Edytowałem literówkę, oczywiście powinno być const nie cont.


Autor postu otrzymał pochwałę


Ostatnio edytowano 28 lis 2018, o 19:37 przez andrews, łącznie edytowano 3 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2018, o 19:27 
Offline
Użytkownik

Dołączył(a): 27 sie 2015
Posty: 47
Pomógł: 0

przy tym co kolega podał wyżej, ekran pusty (const)
co ciekawe zmienna miała u mnie w programie przedrostek volatile:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


bez volatile działa wszystko :)
tylko jeszcze fajnie było by wiedzieć czemu nie działa z volatile



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2018, o 19:47 
Offline
Użytkownik

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

Nie przedstawiłeś całego kodu, ale ja tutaj nie widzę powodu, dlaczego miałoby nie działać z volatile.
Z jakiego powodu zmienną zadeklarowałeś jako volatile?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2018, o 19:56 
Offline
Użytkownik

Dołączył(a): 27 sie 2015
Posty: 47
Pomógł: 0

było bo używałem w przerwaniu



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2018, o 20:06 
Offline
Użytkownik

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

Nie wiem, o jakie przerwanie chodzi, ale w takim przypadku jest prawdopodobne, że pomiędzy m=1; a memcpy_P() występowało przerwanie i procedura obsługi przerwania mogła zmieniać wartość zmiennej m i dlatego Ci nie działało z volatile.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2018, o 20:26 
Offline
Użytkownik

Dołączył(a): 27 sie 2015
Posty: 47
Pomógł: 0

andrews napisał(a):
Nie wiem, o jakie przerwanie chodzi, ale w takim przypadku jest prawdopodobne, że pomiędzy m=1; a memcpy_P() występowało przerwanie i procedura obsługi przerwania mogła zmieniać wartość zmiennej m i dlatego Ci nie działało z volatile.


przerwanie zewnętrzne na atmedze 32 do obsługi enkodera, zmienna ta inkrementowała lub dekrementowała



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2018, o 22:47 
Offline
Użytkownik

Dołączył(a): 27 sie 2015
Posty: 47
Pomógł: 0

tak z tego co sprawdziłem, zmienna z przedrostkiem volatile nie działa tutaj, co ciekawe jeśli utworze nową zmienną np
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

w takiej postaci równiez nie działa prawidłowo, i nie korzystam z niej nigdzie indziej tylko w celu wyświetlania.
choć wyświetlając tą cyfrę z zmiennej nowa na wyświetlaczu w osobnej funkcji do wyświetlania, zgadza się ona czy jest volatile czy nie a mimo to string z powyzszych wątków nie wyświetla się prawidłowo



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 lis 2018, o 09:44 
Offline
Użytkownik

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

Proponuję w takim razie wydzielić problem.

Stwórz osobny projekt z poniższym kodem (zwróć uwagę na komentarze w kodzie):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Skompiluj, zaprogramuj, przetestuj. Najpierw z volatile, później bez. Sprawdź jaka będzie różnica.

Poza tym proponuję jednak posłuchać kolegi Mirka i używać odpowiednich funkcji (np. strcpy_P()) do obsługi ciągów znaków, bo niepotrzebnie komplikujesz sobie życie, a przy okazji kod jest mało optymalny.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 10 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