logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[attiny2313][bascom] Problem przy wstawianiu asm

m2x 13 Gru 2009 12:52 1130 4
  • #1 7382505
    m2x
    Poziom 11  
    Witam
    Problem polega na tym że jak robię wstawkę do programu w asm to przy kompilacji wychodzi mi error61: label not found [ramend]. Dotyczy to linii "ldi R16,LOW(RAMEND)" . Błąd wyskakuje oczywiście w części asm. Wstawiam ten fragment bo mam dobrego gotowca na procedurę. Szukam już dość długo rozwiązania i nic.
  • #2 7382865
    mirekk36
    Poziom 42  
    No i dobrze ci wychodzi error bo niby skąd?

    po pierwsze Bascom ma wiedzieć co znaczy RAMEND

    a po drugie LOW to polecenie czysto Bascomowe a ty mieszasz to z asemblerem we wstawce

    Podejrzewam, że znalazłeś gdzieś jakiś kawałek kodu w asemblerze, który coś tam robi ale nawet nie jest dla ciebie do końca zrozumiały i zachciałeś go ot tak wstawić do Bascoma jako wstawkę pomiędzy dyrektywami



    Tymczasem warto poczytać helpa Bascoma oraz troszkę netu żeby zobaczyć jak w ogóle trzeba podchodzić do pisania wstawek asemblerowych w Bascomie. Bo oczywiście można i fajnie się to robi - jednak rządzą tym pewne prawa Bascomowe i już. Tego nie przeskoczysz wstawiając "na żywca" jakieś tam kody w asemblerze.

    tymczasem ta twoja linijka LDI R16, Low(RAMEND) byłaby bardzo dobrze skompilowana w jakimkolwiek asemblerze dla tych procków. Bo kompilator asemblera "wie" co to jest RAMEND oraz posiada własną funkcję preprocesora LOW
  • #3 7383130
    m2x
    Poziom 11  
    Nie ma nic do podejrzewania bo napisałem że używam tego jako procedury. Spędziłem nieco czsu na szukaniu rozwiązania tego problemu i nic nie znalazłem więc może kolega da jakąś wskazówkę gdzie możliwy jest błąd. Program (jako samodzielny) oczywiście kompiluje się dobrze w odpowiednim kompilatorze asm. Zadam przy okazji pytanie: czy bascom nie skompiluje czegoś takiego?
    
    do
    $asm
    .
    .
    .
    program w asm
    .
    .
    .
    $end asm
    loop
    end
    

    zakładając że każda linijka wstawki jest poprzedzona znakiem ! zeby nie było nieporozumień asm/bascom.
  • #4 7383657
    mirekk36
    Poziom 42  
    Niestety w ogóle nie ma takiej możliwości i nigdy nie będzie, żebyś mógł wziąć sobie jakiś program w całości napisany w asm i wstawić go tak wprost do Bascoma. To troszkę przeczy w ogóle idei - wstawek w asemblerze. Wstawka to napisany przez ciebie fragment kodu w asemblerze który umie zadziałać w tym środowisku.

    Pomyśl sobie ten twój gotowy program kompilujący za pomocą kompilatora asemblera - musi robić wszystko od początku - tzn : zainicjalizować stos (stąd masz tam coś takiego jak RAMEND), zainicjalizować wszystkie potrzebne porty , rejestry i wystartować. A przecież Bascom jak startuje to robi to samo tyle że po swojemu. Więc jak ty to widzisz? Nawet jakby udało ci się jakoś tam to jednak wkompilować choć to niemożliwe - to co?

    Bascom startuje, coś sobie tam robi a tu nagle - dopuszcza do działania twoją wstawkę w asemblerze jak mówisz. I co dalej - wstawka od nowa inicjalizuje procka, ustawia stos, inicjuje rejestry - czyli cały dotychczasowy kod Bascoma przed wstawką bierze w łeb!!! .... ale popuszczając wodze fantazji idziemy dalej - program w asem (ta niby wstawka) wykonała jak mówisz to co miała zrobić i trzeba by było powrócić znowu do kodu Bascoma po wyjścuu z niej prawda???? a tu niestety - AMBA zeżarła wszystko i jest haos w procku więc i program idzie w przysłowiowe maliny.

    Jak widzisz takie podejście jest w ogóle nie możliwe.

    Już mówiłem w helpie jest co nieco opisane o tym jak robić wstawki więc na pewno musisz to poczytać bo tego nie da się tak w 2 zdaniach wyjaśnić tutaj. Najpierw zapoznaj się ogólnie z tematem i co można a czego nie można robić we wstawkach a potem dopytuj o szczegóły to chętnie nie tylko ja na pewno pomogę.

    A w załączniku podaję ci PDF'a którego też warto przeczytać chcąc pisać wstawki asm do Bascoma - a można go także znaleźć w necie za pomocą googlarki.

    Ale mam nadzieję, że ten załącznik i help - naprowadzą cię chociaż na możliwości - jak z tym w ogóle zaczynać i jak to ugdyźć.
  • #5 7384449
    m2x
    Poziom 11  
    Dziękuję za zainteresowanie. W Twoich słowach znajduję potwierdzenie swoich obaw. Co do inicjalizacji to próbowałem również z parametrem $noinit ale też nie pomagało. Jeżeli chodzi o załącznik to czytałem już go, ale chyba potrzebuję jeszcze trochę obycia z tematem żeby go wykorzystać. Jeszcze raz dzięki za wskazówki i pozdrowienia dla miasta Szczecin :)
REKLAMA