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

[ATMEGA64][C / ASM / WINAVR / AVR STUDIO] Wstawki z ASM

24 Lis 2008 22:40 4903 10
  • #1 5779704
    Konto nie istnieje
    Konto nie istnieje  
  • #2 5779813
    BoskiDialer
    Poziom 34  
    Bootloader zazwyczaj pisze się jako osobny projekt, nie w ramach głównego programu. Korzystanie z linkera wyklucza możliwość operowania na adresach za pomocą .org: .org jest interpretowane na poziomie kompilatora, więc przesunięcie będzie liczone względem początku danego modułu lub zostanie zignorowane - po linkowaniu podany adres będzie się różnił znacząco.
    Co do lokalizacji funkcji: spróbuj zrzucić plik do .hex a potem przekonwertować go zewnętrznym programem do .bin: objcopy, jak zauważyłem, zrzuca sekcje jak idzie bez zachowania przesunięć (chyba, że coś przeoczyłem)

    [AVR][C] - własny bootloader
  • #3 5779834
    Konto nie istnieje
    Konto nie istnieje  
  • #4 5779850
    BoskiDialer
    Poziom 34  
    Jeśli w C wszystko ustawia się tak jak powinno, to przekompiluj plik .c do .s i zobacz jak wymusić w której sekcji ma się znajdować funkcja - nie wiem czy masz sekcję "bootloader" z kropką, czy bez na początku.

    Co do pisania co chwilę asm("...") - jedną wstawką można wstawić wiele instrukcji, pamiętając, aby pomiędzy kolejnymi dawać znak nowej linii \n, dodatkowo można dać \t aby przy zrzucaniu do .s było wyrównane.
  • #5 5779888
    Konto nie istnieje
    Konto nie istnieje  
  • #6 5779899
    Freddie Chopin
    Specjalista - Mikrokontrolery
    stworz plik naglowkowy C w ktorym zadeklarujesz sobie funkcje z pliku assemblerowego jako externy w okreslonej sekcji - a nuz tak zadzaiala. tylko pamietaj, zeby go gdzies dolaczyc [;

    4\/3!!
  • #7 5779969
    Konto nie istnieje
    Konto nie istnieje  
  • #8 5780478
    Dr.Vee
    VIP Zasłużony dla elektroda
    Tutaj masz odpowiedź:
    http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_startup

    A to jest wycinek z pliku gcrt1.S w bibliotece avr-libc:
            .section .vectors,"ax",@progbits
            .global __vectors
            .func   __vectors
    /* ... */
            .section .init4,"ax",@progbits
            .global __do_copy_data
    __do_copy_data:
            /* i tak dalej... */

    Pozdrawiam,
    Dr.Vee
  • #9 5780496
    Konto nie istnieje
    Konto nie istnieje  
  • Pomocny post
    #10 5780522
    Dr.Vee
    VIP Zasłużony dla elektroda
    http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_reloc_code

    Dla Twojego przykładu:
            .section .bootloader,"ax",@progbits
            .global bootloader
    bootloader:
            nop
            nop
            nop

    W ten sposób masz etykietę (symbol) globalny, do którego możesz się odwołać z innych cześci kodu.

    Pozdrawiam,
    Dr.Vee
  • #11 5781103
    Konto nie istnieje
    Konto nie istnieje  
REKLAMA