eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › książka o programowniu AVR w C
Ilość wypowiedzi w tym wątku: 96

  • 21. Data: 2011-01-31 15:38:43
    Temat: Re: książka o programowniu AVR w C
    Od: J.F. <j...@p...onet.pl>

    On Mon, 31 Jan 2011 15:30:22 +0100, Michoo wrote:
    >W dniu 31.01.2011 15:11, Marcin Wasilewski pisze:
    >>>> pierwszy projekt dobrze jest napisać w assemblerze, bo wtedy ma się
    >>>> pojęcie o rzeczach, o których dłubacz kodu w C, nigdy nie będzie miał
    >>>> pojęcia.
    >>> Jak na przykład?
    >>
    >> Np. tak:
    >> a) co jest zrzucane na stos i dlaczego w takiej kolejności,
    >Jakie to ma znaczenie w kodzie C?

    Mozna sie zastanowic nad glebokoscia wywolan, adresowaniem parametrow
    itp.


    >> b) że są rejestry w obszarze I/O i w ext. I/O, a w związku z tym sporo
    >> inaczej je się obsługuje, w szczególności jeśli chodzi o operacje bitowe.
    >Jakie to ma znaczenie w kodzie C, poza informacją, że porty mają
    >możliwość ustawiania/gaszenia atomowo jednego bitu? (Co jest w
    >dokumentacji.)

    Bywaja niuanse ze jedne maja, inne nie maja, a jeszce inne maja gdzie
    indziej.

    Albo ze np nie ma posredniego adresowania I/O.

    >> c) że czasami po zapisie do rejestru warto wstawić nop, zanim zaczniemy
    >> go czytać.
    >O co powinien zadbać kompilator.

    W zasadzie tak.

    >Tak samo jak o uporządkowany zapis do rejestrów 16b.

    No i tu moze byc problem, bo rejestry specjalne moga wymagac
    specjalnie, a dla zwyklej pamiec rzadko jest potrzeba zawsze blokowac
    przerwania - ale czasem jest.

    >> d) że pewne instrukcje działają wyłącznie na dedykowanych rejestrach,
    >Jakie to ma znaczenie w kodzie C?

    Sprawdzic czy kompilator o tym wie :-)

    >> g) że znacznie lepiej mnożyć/dzielić przez 2, 4, 8 itd., niż przez 10.
    >Dlaczego? Jeżeli procesor ma układ sprzętowego mnożenia to jest to jeden
    >cykl różnicy.

    No, tu faktycznie moze sie kompilator wykazac pomyslowoscia i
    optymalizowac na rozne sposoby - nawet lepiej niz niedouczony
    programista.

    >Dzielenie przez stałą sensowny kompilator zamienia na
    >mnożenie.

    To mozliwe tylko dla zmiennego przecinka.

    >> I wiele, wiele innych rzeczy o których w tej chwili nie pamiętam.
    >I wiele, wiele innych rzeczy o których programista C _nie musi_ pamiętać.

    Albo musi, i nie tylko pamietac, ale wiedziec jak to jest w procku, i
    jak z tego skorzystac w C. Timery, komunikacja, przerwania ..

    J.


  • 22. Data: 2011-01-31 16:22:58
    Temat: Re: ksišżka o programowniu AVR w C
    Od: "identifikator: 20040501" <N...@g...pl>

    > Albo musi, i nie tylko pamietac, ale wiedziec jak to jest w procku, i
    > jak z tego skorzystac w C. Timery, komunikacja, przerwania ..

    i to zapewne znajdzie w tej książce... EOT


  • 23. Data: 2011-01-31 17:00:48
    Temat: Re: ksišżka o programowniu AVR w C
    Od: Michoo <m...@v...pl>

    W dniu 31.01.2011 16:38, J.F. pisze:
    > On Mon, 31 Jan 2011 15:30:22 +0100, Michoo wrote:
    >> W dniu 31.01.2011 15:11, Marcin Wasilewski pisze:
    >>>>> pierwszy projekt dobrze jest napisać w assemblerze, bo wtedy ma się
    >>>>> pojęcie o rzeczach, o których dłubacz kodu w C, nigdy nie będzie miał
    >>>>> pojęcia.
    >>>> Jak na przykład?
    >>>
    >>> Np. tak:
    >>> a) co jest zrzucane na stos i dlaczego w takiej kolejności,
    >> Jakie to ma znaczenie w kodzie C?
    >
    > Mozna sie zastanowic nad glebokoscia wywolan,
    W tym celu trzeba sprawdzić w dokumentacji kompilatora co ląduje na
    stosie przy danej konwencji wywołań.

    > adresowaniem parametrow
    Jakie to ma znaczenie w kodzie C?

    >>> b) że są rejestry w obszarze I/O i w ext. I/O, a w związku z tym sporo
    >>> inaczej je się obsługuje, w szczególności jeśli chodzi o operacje bitowe.
    >> Jakie to ma znaczenie w kodzie C, poza informacją, że porty mają
    >> możliwość ustawiania/gaszenia atomowo jednego bitu? (Co jest w
    >> dokumentacji.)
    >
    > Bywaja niuanse ze jedne maja, inne nie maja, a jeszce inne maja gdzie
    > indziej.
    >
    > Albo ze np nie ma posredniego adresowania I/O.
    Ale to wynika z dokumentacji a nie ze znajomości asm. Można napisać w
    assemblerze adresujący IO pośrednio i tak samo się zastanawiać dlaczego
    nie działa.


    >> Tak samo jak o uporządkowany zapis do rejestrów 16b.
    >
    > No i tu moze byc problem, bo rejestry specjalne moga wymagac
    > specjalnie, a dla zwyklej pamiec rzadko jest potrzeba zawsze blokowac
    > przerwania - ale czasem jest.
    To jest w dokumentacji przy opisie rejestru. To czy blokować, czy nie
    jest niezależne od tego czy asm czy c.

    >> Dzielenie przez stałą sensowny kompilator zamienia na
    >> mnożenie.
    >
    > To mozliwe tylko dla zmiennego przecinka.
    Hasło:
    Division by invariant integers using multiplication

    >
    >>> I wiele, wiele innych rzeczy o których w tej chwili nie pamiętam.
    >> I wiele, wiele innych rzeczy o których programista C _nie musi_ pamiętać.
    >
    > Albo musi, i nie tylko pamietac, ale wiedziec jak to jest w procku, i
    > jak z tego skorzystac w C. Timery, komunikacja, przerwania ..
    Ale ja nie twierdzę, że nie trzeba wiedzieć co się robi, tylko, że
    wiedza wynikająca z programowania w ASM nie jest konieczna.

    P.S.
    Pisanie na początku w asm potrafi zostawić brzydkie nawyki jak
    przesunięcia binarne zamiast dzielenia, czy "optymalizację" liczników w
    pętlach, które nie mają praktycznego znaczenia a zaciemniają kod. Imo
    optymalizować należy jeżeli są problemy z wydajnością a nie "na zapas".

    --
    Pozdrawiam
    Michoo


  • 24. Data: 2011-01-31 17:27:43
    Temat: Re: ksišżka o programowniu AVR w C
    Od: J.F. <j...@p...onet.pl>

    On Mon, 31 Jan 2011 18:00:48 +0100, Michoo wrote:
    >W dniu 31.01.2011 16:38, J.F. pisze:
    >>>> a) co jest zrzucane na stos i dlaczego w takiej kolejności,
    >>> Jakie to ma znaczenie w kodzie C?
    >> Mozna sie zastanowic nad glebokoscia wywolan,
    >W tym celu trzeba sprawdzić w dokumentacji kompilatora co ląduje na
    >stosie przy danej konwencji wywołań.

    I w dokumentacji procesora jaki ten stos moze byc.

    >> adresowaniem parametrow
    >Jakie to ma znaczenie w kodzie C?

    Na przyklad okresla co jest niemozliwe czy tez bardzo pracochlonne.
    Pamietasz 51 z jej pamieciami ?

    >> Albo ze np nie ma posredniego adresowania I/O.
    >Ale to wynika z dokumentacji a nie ze znajomości asm. Można napisać w

    Jak juz znasz dokumentacje na takim poziomie to znasz i asma

    >assemblerze adresujący IO pośrednio i tak samo się zastanawiać dlaczego
    >nie działa.

    albo nie mozna, bo nie ma takiego rozkazu. Przy czym latwiej da sie
    przeczytac w opisie konkretnej instrukcji niz sie zastanawiac o co
    temu glupiemu kompilatorowi chodzi przy banalnej instrukcji
    out(p,v).


    >>> Tak samo jak o uporządkowany zapis do rejestrów 16b.
    >> No i tu moze byc problem, bo rejestry specjalne moga wymagac
    >> specjalnie, a dla zwyklej pamiec rzadko jest potrzeba zawsze blokowac
    >> przerwania - ale czasem jest.
    >To jest w dokumentacji przy opisie rejestru. To czy blokować, czy nie
    >jest niezależne od tego czy asm czy c.

    C moze to kompilowac inaczej niz myslisz.

    >>> Dzielenie przez stałą sensowny kompilator zamienia na
    >>> mnożenie.
    >> To mozliwe tylko dla zmiennego przecinka.
    >Hasło:
    >Division by invariant integers using multiplication

    O ile pamietam wyniki nie zawsze sa calkowicie zgodne.

    >P.S.
    >Pisanie na początku w asm potrafi zostawić brzydkie nawyki jak
    >przesunięcia binarne zamiast dzielenia,

    No, polemizowalbym nieco czy to brzydki nawyk.
    Za to brak w C operacji "obrotu" bitow, i to juz jest czasem problem.

    >czy "optymalizację" liczników w
    >pętlach, które nie mają praktycznego znaczenia a zaciemniają kod. Imo
    >optymalizować należy jeżeli są problemy z wydajnością a nie "na zapas".

    Od procka zalezy, bo jak sie ma 16 rejestrow po 32 bit to sie pisze
    fajnie, a jak trzy po 8 to kompilator musi sie bardzo mocno wykazac, a
    i programista, zeby sie nie okazalo ze zapasu nie ma :-)

    J.


  • 25. Data: 2011-01-31 19:39:04
    Temat: Re: książka o programowniu AVR w C
    Od: "Marcin Wasilewski" <j...@a...pl>

    Użytkownik "Michoo" <m...@v...pl> napisał w wiadomości
    news:ii6h1t$djb$1@news.onet.pl...

    >> a) co jest zrzucane na stos i dlaczego w takiej kolejności,
    > Jakie to ma znaczenie w kodzie C?

    Takie, że jak się pisze w C na scalaki typu Tiny13, które mają "aż" 64
    bajty RAMu to się można zdziwić, jaką sieczkę odwala (a raczej odkłada na
    stos) kompilator C wchodząc w przerwanie. A zasada jest prosta zrzuca się na
    stos SR i używane w przerwaniu rejestry, a nie wszystko co się da na zapas
    jak robi to kompilator C.

    > Chyba, że się operuje na bitach... Poza tym jest to okropny styl pisania -
    > komunikację z przerwaniami zawsze lepiej objąć w ATOMIC, bo inaczej łatwo
    > o prosty błąd przy późniejszych przeróbkach kodu. (A koszt zazwyczaj
    > pomijalny - 2 cykle +1 cykl opóźnienia.)

    Tak, szczególnie jak masz np. 1K Flash-a i 64B ramu :)
    Ale wtedy co robi programista w C? Zamiast ATtiny13, ładuje się ATtiny2313 i
    problem rozwiązany.

    >> g) że znacznie lepiej mnożyć/dzielić przez 2, 4, 8 itd., niż przez 10.
    > Dlaczego? Jeżeli procesor ma układ sprzętowego mnożenia to jest to jeden
    > cykl różnicy. Dzielenie przez stałą sensowny kompilator zamienia na
    > mnożenie.

    Po pierwsze zajmuje 2 takty samo mnożenie, ale jego wynik ląduje w
    rejestrach R0/R1, co powoduje, że tracimy nast. kilka taktów aby je stamtąd
    wydobyć. A przypominam, że R0-R15 są rejestrami w pewnym stopniu
    upośledzonymi i nie wszystkie instrukcje dostępu do nich działają (np. ldi).
    Rolowanie zajmuje jednak mniej.

    >> I wiele, wiele innych rzeczy o których w tej chwili nie pamiętam.
    > I wiele, wiele innych rzeczy o których programista C _nie musi_ pamiętać.

    Do momentu jak mu się program "zesra", bo stos wlezie na zmienne.

    Podsumowując - pisanie w C wymaga sporo mniej czasu, jednak pewne rzeczy
    dostępne w asm od ręki C ma wyjątkowo upierdliwie rozwiązane (np. dostęp do
    zmiennych w pamięci FLASH). Poza tym, jak ktoś zna assembler, to sobie ze
    wstawkami w newralgicznych miejscach poradzi.


  • 26. Data: 2011-01-31 20:04:26
    Temat: Re: książka o programowniu AVR w C
    Od: Sebastian Biały <h...@p...onet.pl>

    On 2011-01-31 20:39, Marcin Wasilewski wrote:
    > Takie, że jak się pisze w C na scalaki typu Tiny13, które mają "aż" 64
    > bajty RAMu to się można zdziwić, jaką sieczkę odwala (a raczej odkłada
    > na stos) kompilator C wchodząc w przerwanie.

    To bug w kompilatorze jeśli wrzuca za dużo. Nikt nie twierdzi ze avr-gcc
    jest doskonały bo sam wiem że *za* dużo rejestrów używa w przerwaniach.

    > a nie wszystko co się da
    > na zapas jak robi to kompilator C.

    Kompilator C tak nie robi. Tak robi tylko *zły* kompilator C.

    > Tak, szczególnie jak masz np. 1K Flash-a i 64B ramu :)
    > Ale wtedy co robi programista w C? Zamiast ATtiny13, ładuje się
    > ATtiny2313 i problem rozwiązany.

    I ma wiele racji. Dla $0.50 oszczędności per sztuka może sie okazać że
    nie ma co robić rekodzieła w kodzie asm przez 4 miesiące aż się
    *zmieścisz* co do bajta tylko od razu wziąść na zapas i program napisać
    w dwa wieczory.

    > Po pierwsze zajmuje 2 takty samo mnożenie

    Jesli kompilator nie potrafi zamienić a *= 2; na operacje shift bitów to
    jest marnym kompilatorem.

    >> I wiele, wiele innych rzeczy o których programista C _nie musi_ pamiętać.
    > Do momentu jak mu się program "zesra", bo stos wlezie na zmienne.

    Zapewne asm jest tak magiczny że to się nie ma prawa popsuć w ten
    sposób, nie?

    > Podsumowując - pisanie w C wymaga sporo mniej czasu, jednak pewne rzeczy
    > dostępne w asm od ręki C ma wyjątkowo upierdliwie rozwiązane (np. dostęp
    > do zmiennych w pamięci FLASH).

    To raczej brak supportu ze strony kompilatora. C nie ma nic do tego że
    są jakieś rózne pamięci, choć było by miło gdyby miał.

    > Poza tym, jak ktoś zna assembler, to
    > sobie ze wstawkami w newralgicznych miejscach poradzi.

    Rzecz w tym że:

    a) niektórzy programisci starej daty w C piszą dokładnie tak samo jak w
    asm (wlacznie z uzywaniem goto). Dla nich nie ma różnicy bo i tak nie
    potrafia w gruncie rzeczy wykorzystać C.

    b) niektórzy uważają że wstawką może być cały program.

    Wiec jest kwestią zdrowego rozsądku sensownie to podzielić. Osobiście
    jestem zdania że najlepszy jest podział 100% C++ i 0% asm.


  • 27. Data: 2011-01-31 20:13:22
    Temat: Re: książka o programowniu AVR w C
    Od: "kk" <...@...pl>

    > Tak, szczególnie jak masz np. 1K Flash-a i 64B ramu :)
    > Ale wtedy co robi programista w C? Zamiast ATtiny13, ładuje się ATtiny2313
    > i problem rozwiązany.

    Rozwój informatyki w sprzęcie i oprogramowaniu śledzę od czasów ZX spectrum,
    5051, Z1, ...

    Zawsze zastanawiała mnie pewna sprawa.
    Jeżeli program który chodził na kompie XT (procesor intel 86 , zegar coś
    około 4 MHz) uruchomimu na
    komputerze nowszej generacji ( AT - Intel 286) to wynik działania programu
    otrzymamy relatywnie szybciej.

    Biorąc pod uwagę postęp geometryczny w rozojwu sprzętu obecne komputery
    klasy PC powinny śmigać w zastraszającym tempie.

    Ale co ciekawe cały przyrost mocy obliczeniowej skutecznie konsumowany jest
    przez rozdmuchane oprogramowanie zarówno systemowe jak i aplikacje.
    Wiadom, że kiedyś programy były toporne i robiły jedynie to co się od nich
    oczekiwało.
    Teraz program musi się jakoś prezentować - nie wystarczy sam wynik obliczeń.
    Liczy się forma przekazu.

    Ale czasami wk...wia mnie do białości sytuacja gdy np instaluję drukarkę
    gdzie sterowniki do niej zamieszczone są na dwóch płytach DVD.
    Choć wiem, że wystarczą góra dwa pliczki dll + inf i po sprawie.
    Ale zwykłemu userowi ciągle sprzedaje się kit, że tak ma być. Że instalacja
    musi trwać 2 godziny, żę musi zainstalować sobie całe to gówno, że musi
    podać dane osobowe swoje, szefa i strukturę produkcji firmy oraz obowiązkowo
    zamówić oryginalne materiały eksploatacyjne.

    Odbiegam od tematu ...
    A chciałem tyko napisać o oprogramowaniu.
    Patrząc na teorię oprogramowania i twory jakie trzeba póżniej eksploatować
    często się bebechy gotują.
    Najczęściej jest to niestety przerost formy nad treścią.




  • 28. Data: 2011-01-31 20:54:13
    Temat: Re: [OT] ksi??ka o programowniu AVR w C
    Od: Sebastian Biały <h...@p...onet.pl>

    On 2011-01-31 21:13, kk wrote:
    > Bior?c pod uwage postep geometryczny w rozojwu sprzetu obecne komputery
    > klasy PC powinny ?migaae w zastraszaj?cym tempie.

    Złożonośc rozwiązaywanych problemów również rośnie w zastraszającym tempie.


  • 29. Data: 2011-01-31 21:20:31
    Temat: Re: [OT] ksi??ka o programowniu AVR w C
    Od: "kk" <...@...pl>

    > Złożonośc rozwiązaywanych problemów również rośnie w zastraszającym
    > tempie.

    Głównym problemem jest jak namówić klienta do kupna czegoś co mu zupełnie do
    niczego nie będzie potrzebne.

    Machina sprzęt-oprogarmowanie jest samonapędliwa ( piszę tu o PC i
    programach pod windows) tak jak biurokracja.
    Z jednej strony postęp w sprzęcie, z drugiej oprogramowanie które zmusza do
    kupowania co raz lepszego i mocniejszego sprzętu.
    Widząc to co się dzieje uważam, że twórcy oprogramowania komercyjnego nie
    wiedzą co to optymalizacja.
    A pewnie świadomie tworzą potworki typu pakiety office czy kolejne wersje
    przeglądarek Adobe Reader które poza tym, że są coraz większe objetościowo i
    wymagają coraz lepszego sprzętu to właściwie nic nowego poza formą nie
    wnoszą.






  • 30. Data: 2011-01-31 21:27:33
    Temat: Re: ksišżka o programowniu AVR w C
    Od: JDX <j...@o...pl>

    On 2011-01-31 16:38, J.F. wrote:
    [.....]
    > Albo musi, i nie tylko pamietac, ale wiedziec jak to jest w procku, i
    > jak z tego skorzystac w C. Timery, komunikacja, przerwania ..
    Tzn. rzeźbiarz w assemblerze nie musi wiedzieć takich rzeczy? :-)

    Każdy programista systemowy musi mieć jakieś pojęcie o sprzęcie. I to
    nie tylko o CPU/MCU ale również musi wiedzieć np. jak wygląda mapa
    pamięci czy też w jaki sposób są podłączone i jak się komunikują z MCU
    peryferia, np. jakiś RTC na I2C. Poza tym żaden programista systemowy
    rzeźbiący w C dla MCU raczej nie uniknie chociażby szczątkowego kontaktu
    z assemblerem. Natomiast rzeźbiarstwo w assemblerze "dla zasady"
    najzwyczajniej w świecie nie jest uzasadnione ekonomicznie.

strony : 1 . 2 . [ 3 ] . 4 ... 10


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: