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



Teraz jest 25 mar 2026, o 09:23


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
Autor Wiadomość
PostNapisane: 4 maja 2013, o 20:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 sie 2012
Posty: 245
Lokalizacja: Kielce
Pomógł: 6

Przebijam się przez kolejne strony bluebooka i natknąłem się na linkę której całkowicie nie rozumiem:
znak=eeprom_read_byte((uint8_t * )(str++));
co oznacza tutaj (uint8_t * )? Po mojemu w cale tego tu nie powinno być. Pewnie było to gdzieś wcześniej w książce wyjaśniane ale niestety nie jestem tego w stanie teraz odnaleźć.

_________________
1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 maja 2013, o 21:03 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Poczytaj o wskaźnikach i rzutowaniach str 106, 153 niebieska książka. A na pewno będziesz wiedział o co chodzi :)

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 maja 2013, o 21:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 758
Pomógł: 9

str jest inkrementowany, ale jednocześnie rzutowany na wskaźnik do typu uint8_t. Chodzi tu o zgodność typów.
Bo str może być wskaźnikiem innego typu, a funkcja eeprom_read_byte wymaga wskaźnika do uint8_t.

_________________
ATB 1.03, Win XP SP3, ECLIPSE Indigo 3.7.2



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 maja 2013, o 22:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 sie 2012
Posty: 245
Lokalizacja: Kielce
Pomógł: 6

aha, jeszcze jedna wątpliwość

Tutaj mamy pętle for będącą częścią funkcji odpowiedzialnej za definiowanie własnych znaków do LCD:

for(i=0;i<8;i++)
{
c = *(def_znak++);
lcd_write_data(c);
}


Dlaczego wnętzre powyższej pętli jest rozpisane dwustopniowo? Nie można było by tak?

for(i=0;i<8;i++)
{
lcd_write_data(*(def_znak++))
}

_________________
1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 maja 2013, o 22:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 758
Pomógł: 9

Jasne, że tak można. Pewnie tak było dla prostoty analizowania.

_________________
ATB 1.03, Win XP SP3, ECLIPSE Indigo 3.7.2



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 maja 2013, o 22:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 sie 2012
Posty: 245
Lokalizacja: Kielce
Pomógł: 6

Ale to strasznie dziwne że dla prostoty analizowania wprowadzono dodatkowo zmienną "c" która przecież nic więcej nie robi. Tak poza tym dużo jest też takich fragmentów kodu w których nie potrzebnie ładowane są nawiasy (np przy mnożeniu).

_________________
1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 maja 2013, o 23:20 
Offline
Moderator
Avatar użytkownika

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

Wojtek001 napisał(a):
Ale to strasznie dziwne że dla prostoty analizowania wprowadzono dodatkowo zmienną "c" która przecież nic więcej nie robi. Tak poza tym dużo jest też takich fragmentów kodu w których nie potrzebnie ładowane są nawiasy (np przy mnożeniu).


To co dla ciebie jest oczywiste dla wielu innych może nie być oczywiste .... i stąd takie podejście. Jeśli ty wiesz jak można to sobie optymalizować - to jesteś do przodu co nieco ....

A z nawiasami to żadna przesada - czasem dla lepszej czytelności warto ich używać, żeby później np nie dochodziło do takich błędów:

post35732.html#p35732

_________________
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: 4 maja 2013, o 23:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 758
Pomógł: 9

Wg niektórych kod bardziej czytelny to krótkie linijki z minimalną liczbą operacji, wyrażeń. Coś w tym jest.

_________________
ATB 1.03, Win XP SP3, ECLIPSE Indigo 3.7.2



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 maja 2013, o 23:27 
Offline
Moderator
Avatar użytkownika

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

zresztą dla tych którzy dotychczas nie mieli w ogóle do czynienia z programowaniem taki zapis:

Kod:
for(i=0;i<8;i++) lcd_write_data(*(def_znak++));


kolejna rzecz to przykład jest np ze strony nr 220 niebieskiej książki gdzie zmienna c jak również i jest zdefiniowana ze specyfikatorem register:

register uint8_t i,c;

i dlatego została użyta właśnie zamiast tak skróconego opisu .... po to chociażby żeby wspomnieć w ogóle o tym specyfikatorze w praktycznych przykładach ...

ta książka panie kolego to nie wyścigi na zasadzie kto bardziej zoptymalizuje kod ja ? czy ty? .... zapomnij o tym to jest książka, która ma uczyć od podstaw i to jest jej niewątpliwą zaletą.

Masz inny sposób na przekazanie wiedzy na temat języka C ? .... napisz książkę .... a potem dyskutuj co jest potrzebne a co niepotrzebne.

------------------------ [ Dodano po: 4 minutach ]

Ledes napisał(a):
Wg niektórych kod bardziej czytelny to krótkie linijki z minimalną liczbą operacji, wyrażeń. Coś w tym jest.


tak tak - tylko jest takie fajne przysłowie - proszę żeby nikt tego nie brał do siebie:

"zapomniał wół jak cielęciem był"

czyli jak już liznąłem "trochę" wiedzy i potrafię napisać kod w jednej linijce to co ? to po co innym tłumaczyć taką prościznę no nie ? .... Ja za przeproszeniem mam gdzieś takie podejście - i opisuję to po swojemu panowie ... Efekty tego są takie, że książka zbiera jednak dobre opinie - bo wielu ludzi pisze, że w końcu udało im się zaskoczyć ....

Z czym jest o wiele gorzej gdy ktoś wpada, nawet z dużą wiedzą, powiedziałbym ogromną .... ale za chiny nie potrafi tego przekazać - poza tym że napisze parę "szlaczków, ptaszków, krzaczków w C" żeby to pokazać co to nie on ;) ....

Pozwólcie , że ja utrzymam w tej książce taki poziom dydaktyki jak ja to widzę - i na pewno nie zamierzam tego zmieniać.

_________________
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: 4 maja 2013, o 23:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 sie 2012
Posty: 245
Lokalizacja: Kielce
Pomógł: 6

Racja, ale znowu to może zadziałać w drugą stronę.

Ja np. spojrzałem na ten powyżej zacytowany fragment i pomyślałem "ja bym to napisał inaczej, krócej, tzn że czegoś nie rozumiem/ źle myślę"

PS: Akurat w programowaniu w C to daleko mi jeszcze do "woła" :lol:

_________________
1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 maja 2013, o 23:51 
Offline
Moderator
Avatar użytkownika

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

a teraz żeby nie było, że tak sobie tylko gadamy, .... - to proszę bardzo - kompilator w łapki panowie ;) i zróbcie sobie prosty krótki test i skompilujcie sobie taki zapis tej funkcji

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


a także taki zapis jak w książce:

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


no i teraz spójrzcie na listing w asemblerze sobie jednej i drugiej funkcji po kompilacji!

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


i kod z książki:

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


i co widzimy ? tzn widzicie jakąś różnicę ?

-------------------------------------------

a zatem na końcu ktoś może powiedzieć - no DOBRA - skompilowało się tak samo albo prawie tak samo ale wg mnie czytelniejsze jest wtedy GDY .......

no i tu zaczynają się po prostu szaleństwa - gdy znajdzie się jakiś JEDYNY GURU na świecie, który to WYTYCZA JASNY ŚWIETLISTY SZLAK i nakazuje wszystkim aby pisali kody programów DOKŁADNIE TAK JAK ON mówi a nie inaczej ... to jest bzdura .... bo ten sam kod już nawet niezależnie jak się skompiluje do asemblera można w C napisać na 1000 różnych sposobów. I w 99% sytuacji gdy nie gonią nas nie wiadomo jakie zależności czasowe - to każdy programista napisze tak jest jemu wygodniej ..... a nie tak jak PISZE jedyny GURU jakiś tam. I to także staram się przekazać ...

owszem własna optymalizacja kodu to ważna rzecz - ale wystarczy czytać dalej to co piszę w tej książce a także w kolejnych i zobaczyć jak powoli następuje ewolucja w proponowanych rozwiązaniach - bo nie od razu uda się WSZYSTKO przekazać w JEDNYM ZDANIU .... i to jest chyba sztuka - umieć to COŚ przekazać.

_________________
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: 4 maja 2013, o 23:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 sie 2012
Posty: 245
Lokalizacja: Kielce
Pomógł: 6

No to nic tylko pogratulować twórcom kompilatora.
A jeszcze korzystając z okazji zapytam się: czy tutaj ten dodatkowy nawias jest potrzebny?
lcd_write_cmd( (0x80 + x + y) );
nie że wytykam tylko po prostu chciałbym wiedzieć

_________________
1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 maja 2013, o 23:58 
Offline
Moderator
Avatar użytkownika

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

Wojtek001 napisał(a):
No to nic tylko pogratulować twórcom kompilatora.


Z tym się zgodzę w 100% to dobry kawał zespołowej roboty ;)

_________________
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: 5 maja 2013, o 00:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 758
Pomógł: 9

Wojtek001 napisał(a):
A jeszcze korzystając z okazji zapytam się: czy tutaj ten dodatkowy nawias jest potrzebny?
lcd_write_cmd( (0x80 + x + y) );

Niepotrzebny.

_________________
ATB 1.03, Win XP SP3, ECLIPSE Indigo 3.7.2



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

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