Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Mnożenie w asemblerze. Kod w C i tłumaczenie na asembler.

lukaspaw 05 Maj 2006 19:17 2759 12
  • #1 05 Maj 2006 19:17
    lukaspaw
    Poziom 12  

    Witam.
    mam pewien problem z funkcją - programuję ATM16 w asemblerze (C dopiero planuję się uczyć) i do czujnika mam pewną funkcję:
    RHL=-4+0,0405*X-2,8e-6*X²
    RHT=(T-25)*(0,01+0,00008*X)+RHL
    T=-40+0,01*Y
    przy czym:
    X-wartość mierzona 12-bitowa (odpowiednik wilgoci)
    Y-wartość mierzona 14-bitowa (odpowiednik temperatury)

    wiem że coś takiego da się zrobić w C w asemblerze przypuszczam, że też ale to jest wyzsza szkoła jazdy.
    gdzieś na forach wyczytałem, że można napisać kod w C a następnie zmienić go na asemblera-jest to możliwe? czy w takim wypadku nie mógłby ktoś mi te funkcje "przekonwerterować". A jeśli to nie jest możliwe czy ma ktoś może jakiś pomysł jak to rozgryźć (mógłbym zastosować wzory przybliżone ale wtedy poważnie wzrastają błędy).
    Dzięki za jakąkolwiek pomoc.

    0 12
  • #2 05 Maj 2006 20:19
    GienekS
    Poziom 32  

    To masz akurat mobilizację rozpocząć naukę C bo bez potrzeby to nigdy nie zaczniesz, wież mi.

    0
  • #3 05 Maj 2006 22:39
    ZlyDotyk
    Poziom 19  

    w katalogu z AVRStudio gdzes masz katalog appnotes i tam biblioteki z funkcjami matematycznymi robiacymi dokladnie to czego potrzebujesz. A jezeli chodzi o C to jestem zdania ze i tak czlowiek potrafi zrobic program lepiej niz jakis tam kompilator... ;] zatem moja rada jest taka: poznawaj dalej asembler...

    0
  • #4 05 Maj 2006 22:50
    robson_s-ec
    Poziom 14  

    ZlyDotyk napisał:
    A jezeli chodzi o C to jestem zdania ze i tak czlowiek potrafi zrobic program lepiej niz jakis tam kompilator... ;]


    No, ale kompilator zrobi to bezbłędnie i za Ciebie :]
    PS. Też pisze tylko w asmie ;) (przynajmniej na mikrokontrolery).

    0
  • #5 06 Maj 2006 09:09
    piterfromwawa
    Poziom 11  

    lukaspaw napisał:
    Witam.

    wiem że coś takiego da się zrobić w C w asemblerze przypuszczam, że też ale to jest wyzsza szkoła jazdy.
    gdzieś na forach wyczytałem, że można napisać kod w C a następnie zmienić go na asemblera-jest to możliwe? czy w takim wypadku nie mógłby ktoś mi te funkcje "przekonwerterować". A jeśli to nie jest możliwe czy ma ktoś może jakiś pomysł jak to rozgryźć (mógłbym zastosować wzory przybliżone ale wtedy poważnie wzrastają błędy).
    Dzięki za jakąkolwiek pomoc.


    wystarczy skompilowac gcc -s i wtedy kompilator generuje skladnie assemblerowa.

    0
  • #6 06 Maj 2006 12:14
    LordBlick
    VIP Zasłużony dla elektroda

    Czasem warto najpierw usiąść z kartką papieru i rozwiązać dane równanie matematycznie - uprościć, to co się da(np. wyłączyć przed nawias, doprowadzić do postaci, gdy mamy tylko 1 stałą), a mikrokontroler liczył tylko to, co niezbędne - to co może być przeliczone wcześniej, należy dokonać najpóźniej w procesie kompilacji(asemblacji).

    0
  • #7 06 Maj 2006 13:08
    lukaspaw
    Poziom 12  

    przy każdym programie siedzę z kilkoma kartkami gęsto zapisanego papieru-fakt jest niepodważalny, że to najlepsza metoda, dopiero potem komputer.
    W asemblerze mnożyć x2 czy dzielić /2 i ich wielokrotności nawet jakby to były liczby 16 czy 32 bitowe - to da się zrobić ale jak mam liczbę 2,8 i to jeszcze na 6-tym miejscu po przecinku to się zaczynają schody-mogę to zrobić ale z pewnym przybliżeniem-a jak zrobię małą symulację to znowu wyskakuja czasem duże błędy. Na razie kożystam z rady kolegi ZłyDotyk i zagłębiam się w noty z AVRStudio

    0
  • #8 07 Maj 2006 00:56
    Nawigator
    Poziom 33  

    Kiedyś potrzebowałem liczyć dość trudną funkcję i co gorsza z dzieleniem kilkubajtowym i skorzystałem z Codevision. Jest wersja darmowa na mały kod ale ma dobre biblioteki. Napisz tę funkcję, to jest kilka zdań i podglądnij asembler, jest taka możliwość. Dokładnie Ci nie powiem jak to zrobić bo piszę tylko w asemblerze ale to nie było trudne. Z tego asemblera zorientujesz się jak działa kod wynikowy i na tej podstawie szybko zrobisz swoją wersję.
    Zobacz też: http://avr.15.forumer.com/index.php?s=6cc3b507d3e1d07ee78d701f3503b192&showforum=11
    Pozdr. N.

    0
  • #9 07 Maj 2006 14:32
    lukaspaw
    Poziom 12  

    nie wiem-zainstalowałem tego Codevision ale z tego co wyczytałem to tam poruszać się tylko można w C a dla mnie to czarna magia. Próbowałem skopiować kilka programów w C na ATM16 i dodawałem tam komendy zwiazane z funkcjami ale podglądu do asemblera nigdzie tam nie widzę.
    Chyba dalej bedę siedział nad jak najprostszym liczeniem moze z przybliżeniem ale zawsze coś.

    0
  • #10 07 Maj 2006 14:41
    LordBlick
    VIP Zasłużony dla elektroda

    przy kompilacji powinny tworzyć się pliki *.lst lub *.lss

    0
  • #11 07 Maj 2006 16:25
    lukaspaw
    Poziom 12  

    przekształciłem wzory do postaci w których występują liczby 2 do n-tej - czyli w asemblerze bez problemu (przesuwam w prawo lub w lewo i to mi dzieli lub mnoży x2). nie wiem jak mi to jeszcze wyjdzie (bo ze wzoru mam tam liczby 2do20) bo symulacje sobie przeprowadze jutro-kiedyś już coś podobnego robiłem i chodziło (tyle że na dużo mniejszych liczbach) muszę tylko opracować dzielenie liczb 32bitowych i mnożenie tych samych i powinno pójść. chyba ze ma ktoś jeszcze jakieś pomysły ew. gotowe procedury do tego co robie. Dam znać o wynikach prób.

    0
  • #12 07 Maj 2006 16:43
    LordBlick
    VIP Zasłużony dla elektroda

    Dzielenie jest łatwe w uproszczeniu, jeśli np. obie liczby mają jednakową ilość zer z prawej strony, to o tyle mozna je przesunąć w prawo. Ogólnie algorytm dzielenia jak liczb dziesiętnych w podstawówce. Mnożenie jest już w µkontrolerze i to nawet w postaci cząstkowej fmul.

    0
  • #13 15 Sie 2006 15:55
    lukaspaw
    Poziom 12  

    mnozenie wykonałem i po paru poprawkach wychodzi mi z dokładnością +-0,1% Rh na wyświetlaczu co w porównaniu z dokładnością czujnika jest praktycznie wartością znikomą. Dzięki za odświezenie informacji. Mam teraz trochę gotowych zebranych "algorytmów działań" więc jakby ktoś potrzebował to dajcie znać.

    0
  Szukaj w 5mln produktów