eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › Dlaczego ATmega128 przekłamuje?
Ilość wypowiedzi w tym wątku: 95

  • 21. Data: 2009-10-14 12:38:46
    Temat: Re: Dlaczego ATmega128 przekłamuje?
    Od: "T.M.F." <t...@n...mp.pl>

    > Dzięki za linka. Prawdopodobnie to rozwiąże ten problem. Szkoda tylko że
    > trzeba odwoływać się do różnych chytrych sztuczek żeby uzyskać, tak
    > wydaje się, podstawowe i częste pożądane działania.

    Bo gcc nie byl projektowany do architektury harvardzkiej i nie ma
    koncepcji roznych typow pamieci zajmujacych te same adresy. Co byc moze
    sie zmieni, ale i tak niewiele z tego wyniknie. Natomiast jesli jest to
    takim problemem to sa platne narzedzia.

    > A za to jest bardzo fajna właściwość, bo można zadeklarować zmienne
    > pełniące rolę dwustanowych flag jako "bool". Podejrzewam, że nie zajmują
    > wtedy całego bajtu. Jeśli tak , to przydało by się coś takiego w
    > programowaniu ATmegi. Kupę RAM-u zajmują flagi. Duże marnotrawstwo.
    > Bawienie się w maski, to znów przystosowywanie się do kaprysów komputera.

    Przejrzyj liste instrukcji AVR i nie bedziesz mial zludzen. Mozesz
    zadeklarowac zmienna bool, mozesz wykorzystac pola bitowe, ale to ciagle
    bedzie tlumaczone na operacje na bitach typu ustawianie, zerowanie itd.

    --
    Inteligentny dom - http://idom.wizzard.one.pl
    http://idom.sourceforge.net/
    Teraz takze forum dyskusyjne
    Zobacz, wyslij uwagi, dolacz do projektu.


  • 22. Data: 2009-10-14 12:39:53
    Temat: Re: Dlaczego ATmega128 przekłamuje?
    Od: "T.M.F." <t...@n...mp.pl>

    > Ale to przecież nic innego jak zabawa w maski. Stosowanie chytrych
    > sztuczek i obiegnięć do osiągnięcia, wydawałoby się, prostego celu.
    > Kompilator robi miliony różnych automatycznych operacji, mógłby robić
    > również i to. Wszystko powinno być podporządkowane wygodzie człowieka.
    > Po co zaśmiecać głowę i treść programu operacjami które może zrobić
    > maszyna.
    > Szybkość, łatwość i wygoda, to powinny być priorytety w pracy programisty.

    Postaraj sie zrozumiec na czym polega problem, bo to co piszesz jest
    odpowiednikiem populizmu.

    --
    Inteligentny dom - http://idom.wizzard.one.pl
    http://idom.sourceforge.net/
    Teraz takze forum dyskusyjne
    Zobacz, wyslij uwagi, dolacz do projektu.


  • 23. Data: 2009-10-14 13:15:08
    Temat: Re: Dlaczego ATmega128 przekłamuje?
    Od: DJ <j...@p...onet.pl>

    On 2009-10-14 14:36:32 +0200, "Darkac" <d...@w...pl> said:

    > Użytkownik "DJ" <j...@p...onet.pl> napisał w
    > wiadomości news:hb4f5g$v2f$1@news.dialog.net.pl...
    >> On 2009-10-14 13:59:08 +0200, "Darkac" <d...@w...pl> said:
    >>
    >>> za to jest bardzo fajna właściwość, bo można zadeklarować zmienne
    >>> pełniące rolę dwustanowych flag jako "bool". Podejrzewam, że nie
    >>> zajmują wtedy całego bajtu. Jeśli tak , to przydało by się coś takiego
    >>> w programowaniu ATmegi. Kupę RAM-u zajmują flagi. Duże marnotrawstwo.
    >>
    >> Oj, kłania się C...
    >> http://en.wikipedia.org/wiki/Bit_field
    >>
    >
    > Ale to przecież nic innego jak zabawa w maski.

    struct?
    i nawet nie przejrzałeś całej strony...

    > Szybkość, łatwość i wygoda, to powinny być priorytety w pracy programisty.

    Może jeszcze żeby się program sam napisał, podczas kiedy programista na
    wakacjach.

    --
    DJ

    PS. przy odpisywaniu na priv usun antyspamowy wpis z adresu


  • 24. Data: 2009-10-14 13:17:47
    Temat: Re: Dlaczego ATmega128 przekłamuje?
    Od: Konop <k...@g...pl>

    >>> w sumie liczą. Jak zrobić żeby stałe te były pobierane z pamięci
    >>> programu we Flashu? Dlaczego powielane są do RAM-u? Czy słowo "const"
    >>> oprócz
    >> http://www.nongnu.org/avr-libc/user-manual/pgmspace.
    html
    > Dzięki za linka. Prawdopodobnie to rozwiąże ten problem. Szkoda tylko że
    > trzeba odwoływać się do różnych chytrych sztuczek żeby uzyskać, tak
    > wydaje się, podstawowe i częste pożądane działania.

    Witam!!

    Proponuję Tobie zapoznanie się z architekturą AVRów!! To nie jest
    prosta sprawa w tym procku... są instrukcje LPM i SPM, wymagają
    adresowania rejestrem Z. To nie jest ARM, w którym wszystko leży w
    jednej przestrzeni adresowej i możesz odwoływać się do pamięci Flash tak
    jak do pamięci RAM. Uważam, że dobrze, że pamięć Flash w AVRze obsługuje
    się nie jak zwykłe zmienne, bo wymusza to na programiście odpowiednie
    podejście do tego typu zmiennych. Poza tym, język C powinien być
    standardowy, niezależnie od architektury docelowej. Stała obsługiwana
    jest jak zwykła zmienna. W komputerach klasy PC stałe (const) trzymane
    są w pamięci RAM, bo nie ma innego wyjścia. W ARMach trafiają do pamięci
    Flash z reguły, bo jest jedna przestrzeń adresowa. Czemu dla AVRów
    miałby być wyjątek??

    > programowanie, gdzie nie jest przewidziany binarny sposób zapisu liczby.
    > Jedynie dec lub hex. Prawdziwy horror, kiedy wciąż trzeba manipulować na
    > pojedynczych bitach zmiennych czy rejestrów.

    Jeśli chodzi tylko o zapis liczby, to ja tam wolę pisać 0x31fc zamiast
    0011000111111100 ;)...

    > A za to jest bardzo fajna właściwość, bo można zadeklarować zmienne
    > pełniące rolę dwustanowych flag jako "bool". Podejrzewam, że nie zajmują
    > wtedy całego bajtu. Jeśli tak , to przydało by się coś takiego w
    > programowaniu ATmegi. Kupę RAM-u zajmują flagi. Duże marnotrawstwo.
    > Bawienie się w maski, to znów przystosowywanie się do kaprysów komputera.

    Hmmm... no to używaj DWUKROPKA :)... albo zrób sobie proste makra...
    fakt, samemu musisz pogrupować flagi w bajty, no ale przynajmniej możesz
    w łatwy sposób wpisywać "komplet" wartości... ja to robię na przykład
    tak - definiuję sobie każdą zmienną stanu oraz kolejne jej bity:

    #define STAN_URZADZENIA ucDeviceStatus
    #define URZADZENIE_WLACZONE 0
    #define URZADZENIE_ZAJETE 1
    ...
    #define URZADZENIE_ZEPSUTE 7


    później tworzę (wspólne dla wszystkich zmiennych stanu) makra do obsługi:

    #define SET_FLAG(x,y) (x) |= (1<<(y))
    #define CLR_FLAG(x,y) (x) &= ~(1<<(y))
    #defien CHECK_FLAG(x,y) ((x) & (1<<y))

    deklaruję zmienną:

    unsigned char ucDeviceStatus;

    i używam:

    SET_FLAG(STAN_URZADZENIA , URZADZENIE_WLACZONE);
    if (CHECK_FLAG (STAN_URZADZENIA , URZADZENIE_ZAJETE) )
    CLR_FLAG (STAN_URZADZENIA, URZADZENIE_ZEPSUTE);

    to taki przykład, nie jest to super, ale jest za to czytelne... mniej
    pisania jest oczywiście, jak się używa DWUKROPKÓW :)...

    Pozdrawiam
    Konop


  • 25. Data: 2009-10-14 13:21:46
    Temat: Re: Dlaczego ATmega128 przekłamuje?
    Od: Konop <k...@g...pl>

    Darkac pisze:
    > Piszę program na ATmega128 za pomocą edytora AVRSide i kompilatora WinAVR.
    > Program jest juz trochę rozbudowany i zawiły. Jest obsługa przerwań
    > czasowych co mniej więcej 1ms i używane jest sporo zmiennych globalnych.
    > Program obrabia równolegle dwa sygnały A i B z przetwornika A/C.
    > Jeśli sygnał A lub B spełni pewien warunek badany w przerwaniu, w pętli
    > głównej wchodzi w odpowiadającą swojemu kanałowi jedną z dwóch
    > bliźniaczych procedur (dość zawiłych).
    > Jedna ze zmiennych ustawiana jest w menu (wyświetlacz LCD i klawiatura
    > multipleksowana) i przyjmuje wartości 1 lub 0.

    Bliźniacze procedury - tzn. ta sama procedura wywoływana z różnymi
    parametrami, czy jednak dwie różne funkcje? Może nie są do końca
    bliźniacze?? :)...

    > Dziwne zjawisko występuje, kiedy program wejdzie w wykonywanie procedury
    > tylko dla kanału B. W trakcie jej wykonywania powoduje samoistne
    > wyzerowanie wspomnianej wcześniej zmiennej. Zmienna ta nie występuje w
    > ogóle w tej procedurze. W całym programie jej wartość może być zmieniana
    > ręcznie tylko w pewnym menu które trzeba specjalnie wywołać sekwencją
    > działań.

    ZAWSZE zeruje?? Nie używasz gdzieś tablic, wskaźników?? Wystarczy drobna
    pomyłka, przekazanie jako wskaźnika nie adresu zmiennej tylko jej
    wartości i już... zapis masz nie tam, gdzie trzeba... przy
    niesprzyjających okolicznościach możesz zawsze zerować pewną pechową
    zmienną...

    Proponuję to, co już ktoś napisał - zostawić tą zmienną w starym
    miejscu, dodać nową i używać nową ;)... jak problem zniknie, to łapać
    moment zapisu do starej zmiennej ;)...

    Pozdrawiam
    Konop


  • 26. Data: 2009-10-14 13:23:30
    Temat: Re: Dlaczego ATmega128 przekłamuje?
    Od: "Darkac" <d...@w...pl>


    Użytkownik "T.M.F." <t...@n...mp.pl> napisał w wiadomości
    news:hb4gsl$bd$1@atlantis.news.neostrada.pl...
    >> Dzięki za linka. Prawdopodobnie to rozwiąże ten problem. Szkoda tylko że
    >> trzeba odwoływać się do różnych chytrych sztuczek żeby uzyskać, tak
    >> wydaje się, podstawowe i częste pożądane działania.
    >
    > Bo gcc nie byl projektowany do architektury harvardzkiej i nie ma
    > koncepcji roznych typow pamieci zajmujacych te same adresy. Co byc moze
    > sie zmieni, ale i tak niewiele z tego wyniknie. Natomiast jesli jest to
    > takim problemem to sa platne narzedzia.
    >
    >> A za to jest bardzo fajna właściwość, bo można zadeklarować zmienne
    >> pełniące rolę dwustanowych flag jako "bool". Podejrzewam, że nie zajmują
    >> wtedy całego bajtu. Jeśli tak , to przydało by się coś takiego w
    >> programowaniu ATmegi. Kupę RAM-u zajmują flagi. Duże marnotrawstwo.
    >> Bawienie się w maski, to znów przystosowywanie się do kaprysów komputera.
    >
    > Przejrzyj liste instrukcji AVR i nie bedziesz mial zludzen. Mozesz
    > zadeklarowac zmienna bool, mozesz wykorzystac pola bitowe, ale to ciagle
    > bedzie tlumaczone na operacje na bitach typu ustawianie, zerowanie itd.

    No tak, kopilator i edytor są bezpłatne. Darowanemu koniowi nie zagląda się
    w zęby.
    Nie powinienem narzekać.


  • 27. Data: 2009-10-14 13:31:02
    Temat: Re: Dlaczego ATmega128 przekłamuje?
    Od: "Darkac" <d...@w...pl>


    Użytkownik "Konop" <k...@g...pl> napisał w wiadomości
    news:hb4j1q$gq2$1@inews.gazeta.pl...
    >>>> w sumie liczą. Jak zrobić żeby stałe te były pobierane z pamięci
    >>>> programu we Flashu? Dlaczego powielane są do RAM-u? Czy słowo "const"
    >>>> oprócz
    > Hmmm... no to używaj DWUKROPKA :)

    Nie wiem o co chodzi z tym dwukropkiem, możesz przybliżyć?


  • 28. Data: 2009-10-14 13:41:36
    Temat: Re: Dlaczego ATmega128 przekłamuje?
    Od: "T.M.F." <t...@n...mp.pl>

    > SET_FLAG(STAN_URZADZENIA , URZADZENIE_WLACZONE);
    > if (CHECK_FLAG (STAN_URZADZENIA , URZADZENIE_ZAJETE) )
    > CLR_FLAG (STAN_URZADZENIA, URZADZENIE_ZEPSUTE);
    >
    > to taki przykład, nie jest to super, ale jest za to czytelne... mniej
    > pisania jest oczywiście, jak się używa DWUKROPKÓW :)...

    Oj, jednak pola bitowe sa czytelniejsze. No i jesli zmienisz ich
    kolejnosc to nie pociaga to potem zazwyczaj uperdliwej zmiany we
    wszytkich plikach.

    --
    Inteligentny dom - http://idom.wizzard.one.pl
    http://idom.sourceforge.net/
    Teraz takze forum dyskusyjne
    Zobacz, wyslij uwagi, dolacz do projektu.


  • 29. Data: 2009-10-14 13:52:26
    Temat: Re: Dlaczego ATmega128 przekłamuje?
    Od: "Darkac" <d...@w...pl>


    Użytkownik "Konop" <k...@g...pl> napisał w wiadomości
    news:hb4j99$hoj$1@inews.gazeta.pl...
    > Darkac pisze:
    >> Piszę program na ATmega128 za pomocą edytora AVRSide i kompilatora
    >> WinAVR.
    >> Program jest juz trochę rozbudowany i zawiły. Jest obsługa przerwań
    >> czasowych co mniej więcej 1ms i używane jest sporo zmiennych globalnych.
    >> Program obrabia równolegle dwa sygnały A i B z przetwornika A/C.
    >> Jeśli sygnał A lub B spełni pewien warunek badany w przerwaniu, w pętli
    >> głównej wchodzi w odpowiadającą swojemu kanałowi jedną z dwóch
    >> bliźniaczych procedur (dość zawiłych).
    >> Jedna ze zmiennych ustawiana jest w menu (wyświetlacz LCD i klawiatura
    >> multipleksowana) i przyjmuje wartości 1 lub 0.
    >
    > Bliźniacze procedury - tzn. ta sama procedura wywoływana z różnymi
    > parametrami, czy jednak dwie różne funkcje? Może nie są do końca
    > bliźniacze?? :)...
    >

    Na tyle są bliźniacze, że mają treść w zasadzie taką samą, ale wszelkie
    dane, parametry, flagi stanów i tabele na których operują pamiętane są w
    innym zestawie (A lub B). Jakby się uprzeć, to może dałoby się napisać jedną
    procedurę, która co chwila musiałaby się pytać, który kanał jest w tym
    momencie obrabiany albo jako parametry trzeba by przesłać kilkadziesiąt
    zmiennych. A większość tych parametrów i tak jest globalnych i znów przy
    wyjściu trzeba by je odzyskiwać z procedury.
    Historycznie tak było łatwiej i szybciej i bezpieczniej. Najpierw był w
    programie tylko jeden kanał i kiedy powstała potrzeba dwóch, łatwo było
    powielić procedurę na dwie i dodać do każdej nie wspólnej w niej zmiennej,
    końcówkę _a w jednej i _b w drugiej. Pamięci programu jest jeszcze bardzo
    dużo.


  • 30. Data: 2009-10-14 19:24:23
    Temat: Re: Dlaczego ATmega128 przekłamuje?
    Od: John Smith <d...@b...pl>

    >>>> Za to kocham MSP430, w hardware-owym debugerze można ustawić pułapkę
    >>>> na zapis do obszaru pamięci i już wiadomo w wyniku jakiej instrukcji
    >>>> nastąpił problem. Sprawę rozwiązuje się w chwilkę.
    >>>
    >>> Przeciez korzystajac z JTAG na ATMedze128 moze zrobic to samo...
    >>
    >> Za to kocham JTAG.
    >
    > To czemu tego autor wątku nie zrobi, a Wy nie doradzacie od początku?

    Nie odpowiedziałeś na pytanie, to ja spróbuję.
    Twoja miłość do JTAG-a chyba nie jest odwzajemniona, nie widzę
    możliwości aby samodzielnie łącze JTAG-a miało możliwości
    debugowania w systemie uC. W ATMega jest dodatkowo
    moduł OCD w MSP430 jest moduł EEM.
    Sugeruję zapoznać się z dokumentem SLAA263B, mozliwości tego modułu
    są niesamowite i znacznie przerastają założenie prostej pułapki.
    K.

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: