Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

Projekt

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty:2653
Rejestracja:24 sty 2005, o 00:39
Lokalizacja:Winny gród

Postautor: pajaczek » 6 lis 2010, o 20:29

Aleście się rozgadali...
localip=eeprom_read_byte(i);

Zmiennej localip przypisuje się to co zwróci funkcja, której nazwa znaczy "czytaj bity z eeprom"...

Panie programista... bit i bajt to nie jest to samo. Sens samego działania już Ci wyjaśnili.

powtarzaj dopóki pierwsze 3 elementy tablicy tab[] są równe temp[]


Nie trzy, tylko cztery, i nie równe, tylko różne.

Jest kilka niejasności odnośnie zmiennych, ich inicjalizacji... ale tego bez większego wycinka (całości) kodu się nie rozwieje.

Co do reszty

Ja w tej całej funkcji, pod kontem użycia w jakimkolwiek uC widzę jeden poważny problem... czas wykonania ;) Jakoś nie widzę uC (zwłaszcze ATMega) potrafiącego uzyskać kilkadziesiąt tys MIPS
Pomóżcie proszę mnie jakoś oświecić, naprowadzić, wytłumaczyć co to ustrojstwo robi...

No taki doświadczony programista, taki ekspert pracujący od dawna, a nie potrafi przeczytać czystego C?? Co prawda mam gorączkę, a z takową ciężko się myśli, ale... W zacytowanym fragmencie kodu nie ma ani jednego bitu charakterystycznego dla uC... wszystko to najzwyklejsze C, które możesz sobie spokojnie skompilować i wykonać na własnej maszynce.

Ps. nie ma nic nadzwyczajnego w cenie kilku tys zł, za mały fragment programu. Druga sprawa że znacznie cenniejsze jest poprawianie czyjegoś kodu, niż pisanie własnego. Ale to na inną bajkę.

Pps. jakoś nie widzę sensu istnienia tego tematu, no może poza polem do chyba zbędnych dyskusji.

A tak już zupełnie poza (czyli kolejne Ppps):
Każdy programista ma swój styl. Ja osobiście uważam, że mój styl jest łatwiejszy do analizy:)

Swój styl sobie, a potrzeby optymalizacji często sobie... zwłaszcza na potrzeby uC...

Awatar użytkownika
Tomasz Gumny
-
-
Posty:685
Rejestracja:4 lut 2004, o 23:31
Lokalizacja:Trzcianka/Poznań

Postautor: Tomasz Gumny » 6 lis 2010, o 22:29

Nie trzy, tylko cztery
To zauważyłem, ale nie chciałem już mieszać edytując post.
i nie równe, tylko różne.
Tego już nie zauważyłem, bo mi wykrzyknik został w pierwszej linii a dzięki temu cała pętla nabiera sensu - czekanie na zgodność tab[] z temp[].
A czy mógłbyś mi Tomaszu rozwinąć swoją propozycję do przepełnień?
Napisz co to ma robić. Jeśli ten fragment nie działa a elementami tab[] są bajty, to nic dziwnego - na ośmiu bitach trudno doliczyć do 256. O ile cykliczne zwiększanie najmłodszego bajtu o jeden i próba wyzerowania go, gdy osiągnie 256 się powiedzie (sam się wyzeruje), to już na pewno zabraknie przeniesienia na starsze bajty.
Generalnie w całym programie, również w kalendarzu, dokonuje się najpierw inkrementacji a potem sprawdzenia czy przypadkiem nie trzeba zerować (lub "jedynkować"). To będzie działać, ale w przypadku błędu można się znaleźć w dacie 32-13-2010 w godzinie 24:60. :611:

wojteq07
-
-
Posty:20
Rejestracja:5 lis 2010, o 21:42
Lokalizacja:Kraków

Postautor: wojteq07 » 6 lis 2010, o 23:03

Nie trzy, tylko cztery, i nie równe, tylko różne.
Wcale fachowco nie muszą być różne. Sens ujęcia tego w nawias wskazuje, że tylko jedno z nich może być fałszem i pętla się wykona. W wyrażeniach w których zdania połączone są spójnikiem "i" czyli && wystarczy, że jedno z nich nie jest PRAWDĄ i całe wyrażenie jest FAŁSZEM + "!" = PRAWDA
Więc nie czepiaj się słów!
Co do reszty

Ja w tej całej funkcji, pod kontem użycia w jakimkolwiek uC widzę jeden poważny problem... czas wykonania ;) Jakoś nie widzę uC (zwłaszcze ATMega) potrafiącego uzyskać kilkadziesiąt tys MIPS
Jak już to kĄtem.
Akurat fragmentów w których owe ustawianie bitów/bajtów występuje - nie wklejałem. Napisałem, że to jedynie fragment programu, który zajmuje 900linijek, który właśnie mam udoskonalić. Resztę udostępnię komuś kto zadeklaruje pomoc, co w którymś poście napisałem. Jak już włączasz się do rozmowy to zechciej przeczytać chociaż jej całość...
No taki doświadczony programista, taki ekspert pracujący od dawna, a nie potrafi przeczytać czystego C?? Co prawda mam gorączkę, a z takową ciężko się myśli, ale... W zacytowanym fragmencie kodu nie ma ani jednego bitu charakterystycznego dla uC... wszystko to najzwyklejsze C, które możesz sobie spokojnie skompilować i wykonać na własnej maszynce.
Jakby Ci się chciało przeczytać całość rozmowy, to byś zrozumiał, że kod rozumiem. Chyba to przed chwilą już napisałem....
Ale z sensu rozumienia kodu nie wynika zrozumienie jego działania. Pisałem już, że dla mnie ustawienie jakiś poszczególnych bitów/bajtów nic nie znaczy. Kolejna osoba wchodząca w moje kompetencję. Tym razem ktoś, kto ledwo po polsku umie pisać...
Dziękuje bardzo wszystkim, którzy do rozmowy i problemu nie wnoszą nic poza czepianiem się słów, wypisywaniem swoich filozofii i wchodzących w czyjeś kompetencję. Chcesz coś pomóc = pisz. Nic nie wniesiesz do tematu = daruj sobie...
Prosta zasada, której anonimowość w internecie przeszkadza... bo daje przyzwolenie na głupkowate zachowanie bez poniesienia odpowiedzialności za słowa...
Pps. jakoś nie widzę sensu istnienia tego tematu, no może poza polem do chyba zbędnych dyskusji.
Nie pasuje to zignoruj temat i go nie odwiedzaj. Proste, logiczne i optymalizujące działanie forum pod kĄtem zbędnych postów ludzi poniżej pewnego poziomu kultury i merytoryki.

Awatar użytkownika
Darlington
-
-
Posty:574
Rejestracja:12 lis 2007, o 18:18
Lokalizacja:stąd!

Postautor: Darlington » 6 lis 2010, o 23:08

Z taką gadką do moderatora to daleko kolega nie zajdzie. :)

wojteq07
-
-
Posty:20
Rejestracja:5 lis 2010, o 21:42
Lokalizacja:Kraków

Postautor: wojteq07 » 6 lis 2010, o 23:13

Napisz co to ma robić. Jeśli ten fragment nie działa a elementami tab[] są bajty, to nic dziwnego - na ośmiu bitach trudno doliczyć do 256. O ile cykliczne zwiększanie najmłodszego bajtu o jeden i próba wyzerowania go, gdy osiągnie 256 się powiedzie (sam się wyzeruje), to już na pewno zabraknie przeniesienia na starsze bajty.
Generalnie w całym programie, również w kalendarzu, dokonuje się najpierw inkrementacji a potem sprawdzenia czy przypadkiem nie trzeba zerować (lub "jedynkować"). To będzie działać, ale w przypadku błędu można się znaleźć w dacie 32-13-2010 w godzinie 24:60. :611:
Więc tak Tomaszu:
Zegar ma pobierać z serwera NTP czas i wyświetlać go na trzech dwucyfrowych wyświetlaczach (kolejno np. 14:51:32).
Nie wiem po co kod zajmuje się dniem, miesiącem i rokiem skoro wyświetlacz tego nie ukazuje... Przecież można tylko wyzerować licznik gdy czas osiągnie stan 24:59:60 i wyświetlić go jako 00:00:00...

Mogę Ci jakoś wysłać kod skoro deklarujesz pomoc... Byś wiedział o czym mowa... Podaj maila bo publicznie go nie wkleję.

wojteq07
-
-
Posty:20
Rejestracja:5 lis 2010, o 21:42
Lokalizacja:Kraków

Postautor: wojteq07 » 6 lis 2010, o 23:20

Z taką gadką do moderatora to daleko kolega nie zajdzie. :)
To że ktoś ma "władzę" to nie znaczy, że ma przyzwolenie na robienie "co dusza zapragnie". Post który napisał moderator to tylko szukanie zaczepki. Poczułem się urażony po tym poście, a kto jak kto, ale moderator powinien trzymać emocję na wodzy...

Nie mam nic do nikogo, dziękuje tym którzy mi pomogli (szczególnie Tomaszowi), ale chamstwa i podważania kompetencji nie zdzierżę...

Sensem wszelakich dyskusji jest wzajemny szacunek. Dopóki wszyscy go zachowują można dojść do jakiegoś konsensusu...
Jeśli wchodzi się na ścieżkę podważania czyichś kompetencji to zaczyna się zbędna dyskusja na temat tego, "kto ma większego penisa"... To nie czas i miejsce na porównywanie umiejętności z dziedziny programowania...
Tym bardziej na czepianie się słów. Jesteśmy ludźmi i naszą cechą jest skłonność do popełniania błędów bądź niewiedzy. Rolą innych jest pomoc, a nie wyśmiewanie. Można spokojnie dać do zrozumienia, że ktoś się pomylił i napisał bit zamiast bajt, bądź nie doszukał się wykrzyknika...

Nie napisałem też że jestem bardzo doświadczonym programistom... Proszę też nie ironizować...

Wytłumacz mi teraz który styl dla optymalizacji jest lepszy...
Ten który najpierw wyszukuje odpowiednią wersję liczby dni i ewentualnie dopasowywuje do niego liczbę miesiąca? Czy kod który za każdym razem sprawdza liczbę dni i miesięcy?
De facto dubluje się sprawdzania liczby dni za każdym następnym zdaniem logicznym.
Oczywiście, że mój styl jest "szybszy", ale to nie ma znaczenia... Kompilator sam zajmuje się kwestią optymalizacji. Sam stworzy kod maszynowy, który wedle niego jest najszybszy. A kod wynikowy w postaci właściwego programu, bądź pliku obiektowego (*.o) będzie zawierał najlepszą metodę...
To jak to wpiszemy w kodzie to tylko kwestia analizy kodu dla NAS...

Awatar użytkownika
Tomasz Gumny
-
-
Posty:685
Rejestracja:4 lut 2004, o 23:31
Lokalizacja:Trzcianka/Poznań

Postautor: Tomasz Gumny » 7 lis 2010, o 00:20

Mogę Ci jakoś wysłać kod skoro deklarujesz pomoc...
Możesz wysłać na imię.nazwisko@ep.com.pl, ale niewielkie są szanse, że będę miał czas (czyt. będzie mi się chciało) wgryzać w tak długi program. Najlepiej wklejaj tutaj fragmenty programu, co do których masz wątpliwości, pisz co powinny robić a my to sprawdzimy. Istotne są również deklaracje występujących zmiennych i komentarz co zawierają.

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty:2653
Rejestracja:24 sty 2005, o 00:39
Lokalizacja:Winny gród

Postautor: pajaczek » 7 lis 2010, o 11:38

Wcale fachowco nie muszą być różne. Sens ujęcia tego w nawias wskazuje, że tylko jedno z nich może być fałszem ... ble ble ble
Wybacz, ale najpierw naucz się czytać ze zrozumieniem, a później poprawiaj innych. Nie napisałem że każdy musi być różny, co implikuje możliwość by tylko jeden, dowolny był różny.
Jak już to kĄtem.
Kolejna osoba wchodząca w moje kompetencję. Tym razem ktoś, kto ledwo po polsku umie pisać...
I kilka innych równie kwiecistych cytatów, których ze względu na dobro ogólne nie będę zamieszczał.
Jak już zaczniemy się tak czepiać słówek, to PROGRAMISTĄ, a nie programistom jak napisałeś.
Ale wiesz co... mając od 3 dni po 38-39 st gorączki i tak dobrze, że chce mi się tu zajrzeć (z nudów) oraz że nie robię więcej byków, oraz klecę sensowne zdania.
Jakby Ci się chciało przeczytać całość rozmowy, to byś zrozumiał, że kod rozumiem. Chyba to przed chwilą już napisałem....
Ale z sensu rozumienia kodu nie wynika zrozumienie jego działania.
No rzeczywiście:
Potrzebuje pomoc od kogoś kto się na tym zna i mi pomoże. Wystarczy tylko przerobić jedną funkcję, która de facto działa, ale jest nie do końca dobrze napisana i to ją mamy poprawić. Czy ktoś byłby mi w stanie popatrzeć w kod?

Oto i ona:[...]
Nie mam pojęcia co jeszcze przydatnego powinienem wkleić. Pomóżcie proszę mnie jakoś oświecić, naprowadzić, wytłumaczyć co to ustrojstwo robi...
Akurat fragmentów w których owe ustawianie bitów/bajtów występuje - nie wklejałem. Napisałem, że to jedynie fragment programu
To może wklej ten właśnie fragment, po co wklejasz coś co jak twierdzisz doskonale rozumiesz (choć ciągle udowadniasz że tak nie jest).
I mylisz się, z faktu rozumienia kodu wynika jasno fakt rozumienia jego działania. Inaczej jak można stwierdzić że się coś rozumie.

Teksty w stylu
Jak już włączasz się do rozmowy to zechciej przeczytać chociaż jej całość...
Nie pasuje to zignoruj temat i go nie odwiedzaj. Proste, logiczne i optymalizujące działanie forum pod kĄtem zbędnych postów ludzi poniżej pewnego poziomu kultury i merytoryki.
No właśnie przez to że jestem moderatorem, nie bardzo mogę ignorować tematy... właśnie po to by pilnować tej kultury i merytoryki... której notabene w Twoich postach brakuje (i kultury i merytoryki).
Oczywiście, że mój styl jest "szybszy", ale to nie ma znaczenia... Kompilator sam zajmuje się kwestią optymalizacji. Sam stworzy kod maszynowy, który wedle niego jest najszybszy. A kod wynikowy w postaci właściwego programu, bądź pliku obiektowego (*.o) będzie zawierał najlepszą metodę...
Oj mało jeszcze wiesz o kompilacji i optymalizacji... mało. I nie jest to żadne podważanie kompetencji... to jest wprost wykazanie Twojej niewiedzy.

Dobra rada na zakończenie, nie doszukuj się w każdym słowie chęci dopieczenia Ci do żywego, bo to może być właśnie to oczekiwane przez Ciebie nakierowanie na właściwe tory, a jedynie Ty, przez swoje zacietrzewienie na to nie zwrócisz uwagi. Uwierz mi, że poruszam się po wielu forach informatycznych, i poziom (skupienie) sarkazmu i żartów w tym temacie to nic... odrobina żartu zawsze jest pożądana, przez żarty często uczymy się znacznie szybciej.
I czując się tak bardzo urażonym, zwróć uwagę, czy aby sam nie obrażasz innych w stopniu dużo większym. Bo tak... tak się właśnie teraz czuję (choć szczerze... jakoś mi to...).

I tak już zupełnie na zakończenie. Jak dla mnie to cała ta funkcja jest do napisania od nowa, z zupełnie innym algorytmem, bo ja np. nie wiem czy bym chciał żeby mi zegarek przez godzinę (lub kilka) zmieniał czas o 1 sekundę (a tak się to może skończyć, a nawet tak to może działać zależnie od reszty z tych 900 tajemniczych linijek.
Rzeczy do zrobienia przez Ciebie:
- dowiedzieć się jak są przekazywane czasy przez serwery ntp,
- dlaczego jest tam 4 elementowa tablica (a dokładniej 32 użyteczne bity informacji), i jakie to ma znaczenie dla Ciebie
- ograniczyć agresję na tym forum, i załapać trochę większego dystansu do postów innych

Oczywiście mógłbym Ci na to wszystko odpowiedzieć w jednym, krótkim akapicie, ale po tym co z Twojej strony usłyszałem nie mam najmniejszej ochoty. I tak już się zanadto rozpisałem.

wojteq07
-
-
Posty:20
Rejestracja:5 lis 2010, o 21:42
Lokalizacja:Kraków

Postautor: wojteq07 » 7 lis 2010, o 13:51

Nie masz człowieku pojęcia jak działa kompilator i tym, że mnie poprawiasz kompromitujesz się na całej linii...
Zastanów się co mówisz, bo to brednie.
Wytłumaczę Ci działanie kompilatora bo mnie wkurzasz:
1) Mój styl:

Kod: Zaznacz cały

(w[2]>31 && (w[1]==1||w[1]==3||w[1]==5||w[1]==7||w[1]==8||w[1]==10||w[1]==12)) || (w[2]>30 && (w[1]==4||w[1]==6||w[1]==9||w[1]==11) || (w[2]>28 && w[1]==2 && w[0] )
Ze względu na podział wyrażeń na nawiasy wykonywane są one oddzielnie.
Kolejne kroki działania:
1. Najpierw sprawdzany jest kanał w[2]. Gdy jest on mniejszy od 31 to cały nawias jest już pomijany z wynikiem FALSE, bo zdania połączone są spójnikiem "i", więc nie ma sensu sprawdzać dalszej części (automatyczna optymalizacja każdego kompilatora).
2. Sprawdzany jest warunek w[2]>30. Jeśli on też jest fałszem, to znów cały nawias jest pomijany i wynik tej koniunkcji jest FALSE
3. Sprawdzany jest warunek w[2]>28. Cała procedura jest powtarzana
4. Jeśli żaden warunek w[2] nie jest spełniony to program omija wykonanie tej instrukcji warunkowej IF (dało to 4 porównania). Natomiast jeśli któreś z warunków w[2] zachodzi to sprawdzana jest alternatywa zdań w[1].
Jeśli mamy w[2]=32, czyli najgorszy wariant, to program sprawdzi wszystkie alternatywy i koniunkcje.

W stylu który był wcześniej nie ma przypadku pesymistycznego, ani otymistycznego. Taki podział zawsze będzie sprawdzał kilkanaście warunków w[2]>x. Gdy nie będzie on spełniony to drugiego warunku w nawiasie połączonego spójnikiem "i" już kompilator nie sprawdzi. Ale zawsze wykona kilkanaście porównań.
Mój styl w optymistycznym przypadku w[2]<28 wykona tylko 4 porównania w[2].

Akurat tak się składa, że w wiekszości przypadków wykonania programu liczba dni będzie mniejsza od 28, co sprawia, że instrukcja IF wykona tylko 4 porównania w[2] (sprawdzenie czy w[2]>31, w[2]>30, w[2]>29 i w[2]>28, gdy one będą FALSE to alternatywy będą pomijane). Miesiąc może mieć max 31 dni, więc tych dni kiedy w[2] będzie większa od 28 daje tylko 4 kombinacje: 29,30,31 i 32. Podczas gdy styl który uznajesz za optymalniejszy wykona nawet 1-go dnia miesiąca kilkanaście porównań w[2]... Bo nawiasów jest kilkanaście i w każdym nawiasie sprawdza się w[2]>x...

Optymalniejszy jest mój styl, chociaż nie ma to znaczenia dla urządzenia. Bo urządzenie kodu w języku C nie widzi. Jeśli dwa style wykonują identyczną pracę, to będą miały jednakową postać kodu maszynowego. Kwestią tworzenia kodu maszynowego zajmuje się kompilator, który ma mnóstwo narzędzi optymalizujących, oraz tylko jedne "przepisy" na kod wynikowy.
Jedyna różnica występuje w procesie kompilowania. Jeśli styl jest idiotyczny to może wydłużyć to pracę kompilatora o ułamki sekund. Przy dzisiejszych wydajnościach procesorów, proces kompilacji nie jest istotny dla programisty. Bo jeśli kod dla niego miałby być czytelniejszy, pomimo że zajmie więcej ms kompilacji, to taki wariant powinien on użyć...

W twoim stylu wykona się w ciągu typowego miesiąca:
60sukundx60minux24hx30dnix13porównań= prawie 34mln porównań

Mój styl przez 28dni miesiąca wykona:
60sekundx60minutx24h*30dnix4porównania= niecałe 10mln porównań.
Nie chce mi się już tego liczyć, ale przez te kolejne maksymalnie cztery dni w miesiącu program nie wykona 24mln porównań...

W obu stylach pominąłem sprawdzanie roku przestępnego bo jest one błędne, a poprawny algorytm zbyt wiele do rozważań nie wnosi.

Mimo wszystko dziękuje za instrukcję odnośnie projektu:)
Ostatnio zmieniony 7 lis 2010, o 14:16 przez wojteq07, łącznie zmieniany 1 raz.

Awatar użytkownika
r-mik
-
-
Posty:351
Rejestracja:14 cze 2005, o 19:18
Lokalizacja:Wawa
Kontaktowanie:

Postautor: r-mik » 7 lis 2010, o 14:14

(...)
Ze względu na podział wyrażeń na nawiasy wykonywane są one oddzielnie.
(...)
I to potwierdza, że nie znasz reguł optymalizacji kompilatorów (przynajmniej na mikrokontrolery, gdzie nie ma gigabajtów, gigaherców itp).

W/g ciebie 2+2*2 wykona sie wolniej niż 2+(2*2)!

Jeśli tak to, która pętla będzie szybsza:

Kod: Zaznacz cały

for (i=10; i<20; i++) { b=b+1; }
czy:

Kod: Zaznacz cały

for (i=10; i!=0; i--) { b++; }
?

Zanim zaczniesz się wymądrzać, to powiem ci, że obie zostaną skompilowane do tej samej postaci! Zakładam oczywiście, że optymalizacja jest włączona.

Jak więc widzisz twoja wiedza zaczerpnięta ze starych książek nie jest zbyt aktualna.

wojteq07
-
-
Posty:20
Rejestracja:5 lis 2010, o 21:42
Lokalizacja:Kraków

Postautor: wojteq07 » 7 lis 2010, o 14:18

W przypadku zdań logicznych nawiasy są istotne, podczas gdy w matematyce występuje kolejność wykonywania działań z listy priorytetów operatorów. To całkiem inna rzecz człowieku. Mówisz o kompletnie innych rzeczach...

Wciąż mam rację... doczytaj dodane obliczenia...

Poza tym nie zrozumiałeś co mówiłem. Jeśli instrukcja wykonuje taką samą czynność to kod maszynowy (co napisałem) będzie identyczny... Więc czy napiszesz pętle która się inkrementuje ++i, czy --i, jeśli ma tyle samo kroków i jej ciało jest identyczne to wykona się w takim samym czasie.

A jeśli mogę Ci doradzić to lepsze dla pętli for jest wyrażenie ++i lub --i, czyli wersja operatora ++ lub -- jako PREFIX w określeniu kroku pętli.

Awatar użytkownika
r-mik
-
-
Posty:351
Rejestracja:14 cze 2005, o 19:18
Lokalizacja:Wawa
Kontaktowanie:

Postautor: r-mik » 7 lis 2010, o 14:33

(...)
Wciąż mam rację... (...)
Ja już zgłupiałem. Z tego co piszesz o sobie to jesteś ekspertem w C, ale nie potrafisz poprawić czy napisać od nowa prostej (tak twierdzisz) procedury.
Ta jak w końcu jest z twoją znajomością C?

wojteq07
-
-
Posty:20
Rejestracja:5 lis 2010, o 21:42
Lokalizacja:Kraków

Postautor: wojteq07 » 7 lis 2010, o 14:36

Jeśli chodzi o programowanie komputera to radzę sobie całkiem nieźle. Jeśli chodzi o programowanie urządzeń elektronicznych to jestem prawiczkiem... Nigdy wcześniej tego nie robiłem.

Miałem świetnego nauczyciela od C/C++, który nas bardzo mobilizował to nauki, więc wiedzę teoretyczną mam...

Awatar użytkownika
Darlington
-
-
Posty:574
Rejestracja:12 lis 2007, o 18:18
Lokalizacja:stąd!

Postautor: Darlington » 7 lis 2010, o 15:40

Miałem świetnego nauczyciela od C/C++, który nas bardzo mobilizował to nauki, więc wiedzę teoretyczną mam...
Ja też, ale na Twoim miejscu to bym czym prędzej pobiegł do biblioteki i wypożyczył kilka książek o programowaniu AtMegi32, na pewno bym lepiej na tym wyszedł niż smęcąc na forum...

Na forum jak o coś pytasz to przedstaw wpierw własne rozwiązanie, na tym to polega.

Awatar użytkownika
r-mik
-
-
Posty:351
Rejestracja:14 cze 2005, o 19:18
Lokalizacja:Wawa
Kontaktowanie:

Postautor: r-mik » 7 lis 2010, o 15:47

Jeśli chodzi o programowanie komputera to radzę sobie całkiem nieźle. Jeśli chodzi o programowanie urządzeń elektronicznych to jestem prawiczkiem... Nigdy wcześniej tego nie robiłem..
Pokaż mi w kodzie, który umieściłeś wraz z pytaniem, odwołanie do sprzętu.

wojteq07
-
-
Posty:20
Rejestracja:5 lis 2010, o 21:42
Lokalizacja:Kraków

Postautor: wojteq07 » 7 lis 2010, o 17:04

Jeśli chodzi o programowanie komputera to radzę sobie całkiem nieźle. Jeśli chodzi o programowanie urządzeń elektronicznych to jestem prawiczkiem... Nigdy wcześniej tego nie robiłem..
Pokaż mi w kodzie, który umieściłeś wraz z pytaniem, odwołanie do sprzętu.
Akurat w kodzie w którym wkleiłem nie było odwołań do sprzętu. Może fakt, przez ścisły umysł źle sformułowałem cały pierwszy post... Czarna magia dotyczyła de facto części której nie wkleiłem... Mała głupota z mojej strony, wynikająca z tego, że fragment który mam poprawić wkleiłem, a tekst mówiący o "czarnej magii" dotyczył całej reszty której nie wkleiłem
Tutaj się przyznaję bez bicia, że wprowadziłem zamieszanie, które zaowocowało w różnego rodzaju incydenty.

Ojjj czuje, że zaraz wszyscy na mnie rykną...

Pośrednio ten kod łączy się z wiedzą o elektronice, bo występuje tam dość dziwny mechanizm obsługi przepełnień i z tego co mi się wydaje to właśnie on jest tym kruczkiem w tym projekcie.
Oprócz nie do końca poprawnej metody tworzenia kalendarza, w drugiej części funkcji występuje inkrementacja tablicy, która współtworzy warunek inicjalizacji pętli.
Żeby wykorzystać swoje umiejętności programowania, musze o tych przepełnieniach się coś dowiedzieć i za waszą radą, jutro wypożyczę książkę do ATmega32... Logicznie myśląc będę w stanie ten fragment poprawić (utworzyć KOD), ale pod warunkiem jeśli będę wiedział JAK (z natury technicznej). To już wiedza elektroniczna.

Mam nadzieję, że z tej stery kłótni z całego tematu coś wyniknie.

W zasadzie to jestem człowiekiem nerwowym i ciętym na sytuację, które w tym temacie zaistniały. Może troszkę zbyt gwałtownie zareagowałem i wypada mi przeprosić za zachowanie... PRZEPRASZAM...
Ale wynika to z faktu istnienia tematów wchodzących w moje kompetencję... To podnosi mi ciśnienie na 500x800...
Sam sobie jestem winien - głupio formułując problem, ale wasze komentarze nie były zawsze uczciwe...

Pozdrawiam

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty:2653
Rejestracja:24 sty 2005, o 00:39
Lokalizacja:Winny gród

Postautor: pajaczek » 7 lis 2010, o 19:05

Nie masz człowieku pojęcia jak działa kompilator i tym, że mnie poprawiasz kompromitujesz się na całej linii...
Zastanów się co mówisz, bo to brednie.
Wytłumaczę Ci działanie kompilatora bo mnie wkurzasz:
Oddaj mi przysługę, i już nic mi nie tłumacz... na prawdę tylko ręce załamać. Całą resztę można skomentować jednym z mądrzejszych zdań, jakie tu wypowiedziałeś (tylko podmiot zły):
Poza tym nie zrozumiałeś co mówiłem.
W twoim stylu wykona się w ciągu typowego miesiąca:
60sukundx60minux24hx30dnix13porównań= prawie 34mln porównań
Po pierwsze nie ma tam żadnego "mojego stylu", nie przekonałeś mnie dotąd że jesteś wart by Ci przedstawiać moje style ;)
Btw. czy to 10 czy 34 mln porównań, to i tak o miliony za dużo jak na taką funkcję... do takiego zastosowania.

Powyższa Twoja notka, jest dobrym prognostykiem, i jeżeli dochowasz obietnic, może jeszcze coś z tego tematu będzie.
Prywatnie Ci powiem, że mnie nie uraziłeś, bo urazić taką formą mogła by mnie osoba którą lubię, szanuję lub cenię... do Ciebie mam raczej stosunek obojętny z pewną irytacją, czy powoli znudzeniem. Pracujesz jednak na swój wizerunek w moich oczach.
Przestrzegam jednak, że jeżeli temat będzie utrzymywał się w klimacie wzajemnych pretensji, zarzutów itd. To zostanie mu przypisana wartość NULL ;P
Unikałbym też ciągłego powtarzania "jaki to jestem guru" przy jednoczesnym proszeniu o pomoc w podstawowych kwestiach - ale tu zrobisz jak zechcesz.

wojteq07
-
-
Posty:20
Rejestracja:5 lis 2010, o 21:42
Lokalizacja:Kraków

Postautor: wojteq07 » 7 lis 2010, o 19:21

Nie masz człowieku pojęcia jak działa kompilator i tym, że mnie poprawiasz kompromitujesz się na całej linii...
Zastanów się co mówisz, bo to brednie.
Wytłumaczę Ci działanie kompilatora bo mnie wkurzasz:
Oddaj mi przysługę, i już nic mi nie tłumacz... na prawdę tylko ręce załamać. Całą resztę można skomentować jednym z mądrzejszych zdań, jakie tu wypowiedziałeś:
To w takim razie wytłumacz mi jak według Ciebie działa kompilator... Skoro mówisz, że to jest złe myślenie to podaj poprawne... Takie stwierdzenia są warte tyle co nic, jeśli nie podasz argumentacji = nie przekonasz grona, to zamilcz.

Nie dam spokoju bo mnie koleś wkurzasz...

Awatar użytkownika
Tomasz Gumny
-
-
Posty:685
Rejestracja:4 lut 2004, o 23:31
Lokalizacja:Trzcianka/Poznań

Postautor: Tomasz Gumny » 7 lis 2010, o 19:59

Nie sądzę, żeby w książce "o procesorach ATmega" było coś o matematyce "bajtowej".
[...] w drugiej części funkcji występuje inkrementacja tablicy, która współtworzy warunek inicjalizacji pętli.
Zatem podejrzewasz ten fragment:

Kod: Zaznacz cały

//przechodzenie przez koelejne pozycje licznika hex. tab[3]++; if (tab[3]==256) { tab[3]=0; tab[2]++; if (tab[2]==256) { tab[2]=0; tab[1]++; if (tab[1]==256) { tab[1]=0; tab[0]++; } } }
Nadal nie wiem jakiego typu są elementy tab[], bo to dość istotne i co generalnie ten fragment ma robić, bo wygląda na kulawy czterobajtowy licznik.

Dodane:
Jeśli kompilator obsługuje unie, to można spróbować takiej deklaracji:

Kod: Zaznacz cały

union ip { unsigned longint licz; unsigned char tab[4]; }
Dzięki temu inkrementacja 4-bajtowego licznika wymaga tylko wykonania instrukcji:

Kod: Zaznacz cały

licz++;
Poszczególne bajty odczytuje się jako elementy tablicy tab[];
Ostatnio zmieniony 7 lis 2010, o 20:24 przez Tomasz Gumny, łącznie zmieniany 1 raz.

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty:2653
Rejestracja:24 sty 2005, o 00:39
Lokalizacja:Winny gród

Postautor: pajaczek » 7 lis 2010, o 20:18

Przeczytaj sobie jakąś definicję, to się dowiesz jak działa kompilator. Przy okazji poszukaj definicji optymalizacji. Zrozum że ja wciąż mam coraz mniejszą ochotę na tłumaczenie Ci czegokolwiek. Ja się odnoszę do konkretnych cytatów, Ty wysuwasz swoje idee. Ja zwracam uwagę, że zbyt lekko podchodzisz do tego co wypisujesz, czy mieszasz różne rzeczy. Ty się obrażasz, dodatkowo dostało mi się za to personalnymi atakami.

No więc miej teraz pretensje do złego moderatora, który wlepia Ci jakże niezasłużone ostrzeżenie "za całokształt", bo pomimo zapowiedzi nie widzi żadnych zmian w postępowaniu. I uwierz mi, gdyby nie to, że dałem się wciągnąć w tą dyskusję, to ostrzegł bym Cię już wcześniej. Dopóki jestem tutaj moderatorem nie będę tolerował takich przepychanek i pyskówek w stosunku do nikogo... zwłaszcza od osób które nie pokazały jeszcze na forum nic pozytywnego.
Pohamuj się, albo temat zostanie zamknięty. Trochę nerwosolku, mniej wkurzania się, a więcej słuchania co do Ciebie mówią, przeczytaj 3 razy zanim odpowiesz następnym razem.

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 14 gości