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



Teraz jest 12 lut 2026, o 21:17


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 30 cze 2015, o 20:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 mar 2015
Posty: 144
Pomógł: 2

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


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


Dzisiaj jest wtorek, dlaczego na OLED mam wyświetlone wto sro

Przecież w funkcji mk_ssd1306_puts_P(...) jest miedzy innymi 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: 30 cze 2015, o 21:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 mar 2015
Posty: 144
Pomógł: 2

Żeby dobić, podam, że zamiast sob (czyli sobota) jest wyświetlone na OLED s

Na wyświetlaczu LCD jest OK.
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: 30 cze 2015, o 22:51 
Offline
Użytkownik

Dołączył(a): 29 lip 2014
Posty: 195
Pomógł: 44

Witam,

jeśli już koniecznie chcesz mieć string z wszystkimi dniami tygodnia czy w tym wypadku tablicę jednowymiarową, to powinna ona 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.


Czyli 3 litery na dzień, znak o wartości 0 ( \0), kolejne 3 litery ... itd. Zwróć uwagę, że na końcu nie musisz już dawać \0 - literał napisowy ( "to co w cudzysłowiu") jest zawsze zakończony znakiem \0.

Co do drugiej części zagadki - dlaczego na LCD działa - nie wiem ;-).

Pozdrawiam, QuadMan.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2015, o 01:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

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


Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
to odpowiednik
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
dla PROGMEM, więc to tutaj jest chyba zamieszane

zamień na
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łę

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2015, o 08:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 mar 2015
Posty: 144
Pomógł: 2

dt->weekday to typ enum (u mnie i zgodnie z poradnikiem Mirka - patrz Dawca czasu)

Przesuwam sobie wskaźnik str++, bo chcę go poruszać co bajt, a on zapewne przesuwa się co 2 bajty (jakby po integer).

Otrzymane podpowiedzi przemyślę po pracy, ale QuadMan, to \0 zamiast \0x00 to to samo.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2015, o 08:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 mar 2015
Posty: 310
Pomógł: 18

lutekT napisał(a):
Otrzymane podpowiedzi przemyślę po pracy, ale QuadMan, to \0 zamiast \0x00 to to samo.

Ale \0 < "\0" = 0x30 = 48 = OCT 60 ;) :?:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2015, o 12:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 mar 2015
Posty: 144
Pomógł: 2

Chciałem oczywiscie powiedzieć, że \0 to to samo co \x00 ( tak mi się wydaje)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2015, o 13:20 
Offline
Użytkownik

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

Pomógł: 101

Wirnick napisał(a):
Ale \0 < "\0" = 0x30 = 48 = OCT 60

Ależ nie.

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

Oba zapisy dają w efekcie to samo.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2015, o 14:36 
Offline
Użytkownik

Dołączył(a): 29 lip 2014
Posty: 195
Pomógł: 44

Witam,

lutekT napisał(a):
Chciałem oczywiscie powiedzieć, że \0 to to samo co \x00 ( tak mi się wydaje)


Ale oczywiście, że to samo, chodziło mi o te cudzysłowy wewnątrz stringa, byłem przekonany, że zostaną zamienione na dodatkowe znaki:

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

Oba zapisy dają w efekcie to samo.


O tych cudzysłowach właśnie myślałem. Człowiek chce pomóc, palnie głupotę i przy okazji sam się czegoś nauczy :-). Za to lubię to Forum.

Pozdrawiam, QuadMan.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2015, o 18:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 mar 2015
Posty: 144
Pomógł: 2

Jeszcze raz podam o co mi chodzi, podając dalsze szczegóły, aczkolwiek siedzę teraz nad tym problemem i kombinuję.

Mam tak: (kropki zastosowane, aby nie naruszać praw autorskich Mirka):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


oraz:

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


Rozumiem, że typ wyliczeniowy ma swoją reprezentację liczbową elementów listy. Zapewne są to wartości typu signed int?

Ale czy to ważne, jeśli w funkcji poniższej jest const char *str?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Otrzymuję na OLED coś takiego, dla:
poniedziałku p
wtorku wto sro
środy sro
czwartku (nic nie otrzymuję)
piątku pio s
soboty s
niedzieli nie >

Np sprawdzam w funkcji void mk_ssd1306_puts_P(...) ile razy w pętli było zero (NULL) dla wtorku, było 2 razy, ale dlaczego po pierwszym razie nie wyszedł z pętli w warunku while? Kto tu do licha dyktuje warunki?

------------------------ [ Dodano po: 10 minutach ]

Kolega barney rozwiązał moją zagadkę!

Brawo, brawo!

Dziękuję, to była prawidłowa diagnoza, wszystko zaczęło działać zgodnie z założeniami.

------------------------ [ Dodano po: 13 minutach ]

Dlaczego to pomogło, zachęcam do przeanalizowania.

Sam się za chwilę nad tym pochylę, a myślę, że może to i nie tylko dla mnie być pouczające.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2015, o 18:55 
Offline
Użytkownik

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

Pomógł: 101

.

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



Ostatnio edytowano 2 lip 2015, o 07:47 przez xor, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2015, o 19:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 mar 2015
Posty: 144
Pomógł: 2

Sorry, zastosował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 ruszyło zgodnie z założeniami.

------------------------ [ Dodano po: 25 minutach ]

Po głębszej analizie, nie widzę różnicy pomiędzy tym, co zakomentowane.

A jednak, dlaczego teraz chodzi, a przedtem nie chodziło jak trzeba?

------------------------ [ Dodano po: 35 minutach ]

No nie, widzę subtelną różnicę. W drugim przypadku sprawdzamy rezultat funkcji pgm_read_byte(), a w pierwszym wartość tego, na co pokazuje wskaźnik. A on pokazuje na signed int(?). Coś się pogubiłem!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lip 2015, o 07:58 
Offline
Użytkownik

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

Pomógł: 101

To nie ma nic wspólnego z typem lecz wynika z architektury AVRów. Typowe operatory języka C nie potrafią działać na pamięci FLASH, a jedynie na RAM (tak nie do końca, bo gcc potrafi ale na razie to pomińmy) więc to:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

odczyta zawsze zawartość pamięci RAM (zakładamy, że str jest typu char *). Żeby dostać się do pamięci FLASH trzeba zapodać
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

A dalej to już chyba wiadomo?


Autor postu otrzymał pochwałę

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



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

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