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

mega8 - [ASM] Automatyzacja wejścia do bootloadera w 256 bajtach

gpi_unit 14 Kwi 2014 22:00 1419 13
  • #1 13510220
    gpi_unit
    Poziom 12  
    Witam

    Mam problem z obsługą bootloadera, a właściwie z warunkiem wejścia do bootloadera.
    Teraz mam napisane tak, że jak linia portu mikrokontrolera jest w stanie niskim to przechodzi do mikrokontrolera.

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Z perspektywy czasu chciałbym jednak jakoś zautomatyzować proces przejścia do bootloadera. Zbyt dużo wolnego miejsca nie mam, bo chciałbym zmieścić się w 256 bajtach i nie mam pomysłu jak inaczej to zrealizować. W książkach opisuje się właśnie sposób "ze zworką".
    Myślałem nad watchdogiem, ale za każdym razem o resecie przechodziłoby do sekcji bootloadera....

    Proszę o wyrozumiałość, z asemblerem dopiero zaczynam i nie chciałbym się specjalnie zniechęcić
  • #2 13510297
    mi14chal
    Poziom 28  
    No bo sposób ze zworką jest dobry, fakt trzeba na to poświęcić jeden pin. Po za tym na czym według Ciebie miałaby polegać automatyzacja? Albo co ten bootloader miałby robić?
  • #3 13511489
    gpi_unit
    Poziom 12  
    Automatyzację rozumiem w taki sposób, że wystarczy kliknąć "opcję programuj" i już bez żadnych zworek. Coś jak arduino tyle, że ich bootloader jest delikatnie mówiąc zasobożerny...

    Czy układ watchdog-a po resecie znowu przejdzie do sekcji bootstart czy do początku pamięci?

    Jeżeli to ma pomóc to mogę wrzucić cały kod bootloadera.
  • #4 13511618
    mi14chal
    Poziom 28  
    Watchdog tylko resetuje układ nic więcej, ale masz w rejestrze MCUCSR:
    • Bit 1 – EXTRF: External Reset Flag
    This bit is set if an External Reset occurs. The
    bit is reset by a Power-on Reset, or by writing a
    logic zero to the flag.
  • #5 13511681
    gpi_unit
    Poziom 12  
    Czyli zresetuje, ale i tak przejdzie do bootloadera bo tak mu nakazują fusebity

    Napisałem program, który oczekuje na znak, ale jak zrobić żeby on przez jakiś czas oczekiwał na znak z UART. Jak nie ma znaku przejście do programu głównego...

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #6 13511706
    mi14chal
    Poziom 28  
    Użyć timera do odmierzenia czasu i jak czas minie a nic nie zostało odebrane przejść do programu głównego.
  • #7 13511719
    gpi_unit
    Poziom 12  
    I myślisz, że zmieszczę się w 256 bajtach? Czy to nie działa czasem na zasadzie:
    256b - zworka
    512b - znak przez uart
  • #8 13511740
    mi14chal
    Poziom 28  
    Najlepiej sprawdź samemu.
  • #9 13512118
    gpi_unit
    Poziom 12  
    A jak zapisać takie coś w ASM :)

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Wymyśliłem takie coś

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Tylko rjmp USART_Receive będzie tak długo skakał, aż coś nie przyjdzie i nie umiem zrobić zwykłego IF-a. Trochę mnie przerasta ten asembler...
  • #10 13512298
    mi14chal
    Poziom 28  
    Ten if można tak zapisać:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #11 13514004
    LordBlick
    VIP Zasłużony dla elektroda
    Nie rozumiem hardcorów, co nie używają możliwości asemblera od Atmela w pełni, pisze się praktycznie jak w C, też można rejestry „wołać” po ludzku i znaki pisać tekstem bez zerkania do tabeli ASCII.
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #12 13514578
    tmf
    VIP Zasłużony dla elektroda
    gpi_unit napisał:
    A jak zapisać takie coś w ASM :)


    Pytanie pomocnicze - a po co chcesz to napisać w asemblerze?
    Jeśli pytasz jak to napisać w asemblerze to idę o zakład, że nie napiszesz lepszego kodu niż wygeneruje kompilator. Skompiluj powyższy kod i przejrzyj otrzymany plik lss - będziesz tam miał jego tłumaczenie na asembler, potem sobie możesz go ztuningować.
  • #13 13514620
    mi14chal
    Poziom 28  
    LordBlick napisał:
    Nie rozumiem hardcorów, co nie używają możliwości asemblera od Atmela w pełni


    No ja już dawno w asm na avr nie pisałem, więc nie pamiętam wszystkich udogodnień. Autor chciał kod jak wygląda ten if to mu napisałem.

    tmf napisał:
    Jeśli pytasz jak to napisać w asemblerze to idę o zakład, że nie napiszesz lepszego kodu niż wygeneruje kompilator.


    Racja, ale w przypadku tego ifa tutaj już i tak nic się nie da polepszyć.
  • #14 13514747
    gpi_unit
    Poziom 12  
    Witam ponownie

    Spokojnie hardcorem nie jestem, żeby pisać program obsługi jakiegoś interfejsu, żeby zyskać 5 bajtów.

    Po prostu mam misję, żeby użyć jakiegoś narzędzia (watchdog, odczyt znaku) żeby nie wykorzystywać dodatkowego pinu mikrokontrolera, a żeby było trudniej to wszystko to zmieścić w 256 bajtach pamięci i powoli daje sobie z tym spokój, bo mój poziom pisania w asm to raptem kilka wstawek wplecione w C.
REKLAMA