eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › arm-gcc i malloc() - uzywajac yagarto i ADUc7026
Ilość wypowiedzi w tym wątku: 5

  • 1. Data: 2011-01-16 12:42:40
    Temat: arm-gcc i malloc() - uzywajac yagarto i ADUc7026
    Od: Marcin <m...@o...pl>

    Witam,

    Tym razem ja szukam pomocy. Od paru dni walcze z ADuC7026, pierwotnie
    z wersja ewaluacyjna Keila a teraz yagarto ( zglasza sie jako werja
    arm-none-eabi-gcc (GCC) 4.5.1)

    Mam w Keilu napisany programik do obslugo 1-wire i wszystko ladnie
    dziala, tj. przerwania, timery i dynamiczna alokacja pamieci. Chcialem
    caly program przeniesc na gcc i zaczynaja sie schody.
    Poradzilem juz sobie z plikami linkera, przerwaniami - wszystko
    dziala. Ale zachcialo mi sie uzywac malloc() i problem mnie na razie
    przerosl.

    Wiem, ze stdio.h potrzebuje paru funkcji ( stubs). Posilkowalem sie
    przykladami z:
    http://www.yagarto.de/download/yagarto/syscalls.c
    Oznaczenia poczatku i konca sterty zmienione na __heap_start i
    __heap_end, tak zeby sie zgadzalo z tym co jest w pliku linkera.
    No i najgorsze, ze nic nie dziala. W testowym programie moge sobie
    wyrzucic cos dla testo na UART'a wiec widze ze program dziala ale po
    wywolaniu prt = malloc(sizeof(int)); calosc "zawiesza sie" i nie
    powraca z malloc.

    Czy ma ktos moze przyklady dzialajacego malloc ? przygladnal bym sie
    plikom startup.S, jak rozwiazana jest funkcja _sbrk_r (struct _reent
    *r, int incr) oraz jak wyglad plik linkera. Najchetniej na ADuC, ale
    moze byc tez cos ze procesorow Atmela. Przyklady na LPC od nxp maja
    zupelnie inaczej rozwiazywane inicjalizacje wektorow przerwan w
    startup.s.


    Po dissasemblacji mojego pliku .elf widze, ze moje wywolanie malloc()
    wywoluje glebiej _malloc_r a ten z koleji _sbrk_r. I powinno
    dzialac, bo ta funkcje mam w syscalls.c i jes dolinkowana.

    Przegladalem tez strone http://www.freddiechopin.info/ i tamtejsze
    forum, ale nie udalo mi sie nic dzialajacego na moim procku
    skompilowac z malloc();


    Pomocy, siedzenie do 3 nad ranem przy komputerze juz nic nie pomaga ;)


    Pozdrawiam,
    Marcin


  • 2. Data: 2011-01-16 13:08:21
    Temat: Re: arm-gcc i malloc() - uzywajac yagarto i ADUc7026
    Od: Michoo <m...@v...pl>

    W dniu 16.01.2011 13:42, Marcin pisze:
    > Czy ma ktos moze przyklady dzialajacego malloc ?
    At91sam7s256 może być? (Gdzieś powinienem mieć.)

    > Po dissasemblacji mojego pliku .elf widze, ze moje wywolanie malloc()
    > wywoluje glebiej _malloc_r a ten z koleji _sbrk_r. I powinno
    > dzialac, bo ta funkcje mam w syscalls.c i jes dolinkowana.
    Taka krótka uwaga mogąca zaoszczędzić sporo czasu - sporo symboli jest
    zdefiniowanych jako 'weak', w związku z tym się kod linkuje mimo, że
    właściwe symbole nie są zdefiniowane.

    --
    Pozdrawiam
    Michoo


  • 3. Data: 2011-01-16 17:21:28
    Temat: Re: arm-gcc i malloc() - uzywajac yagarto i ADUc7026
    Od: Marcin <m...@o...pl>

    On 16 Sty, 13:08, Michoo <m...@v...pl> wrote:
    > W dniu 16.01.2011 13:42, Marcin pisze:> Czy ma ktos moze przyklady dzialajacego
    malloc ?
    >
    > At91sam7s256 może być? (Gdzieś powinienem mieć.)
    >
    > Taka krótka uwaga mogąca zaoszczędzić sporo czasu - sporo symboli jest
    > zdefiniowanych jako 'weak', w związku z tym się kod linkuje mimo, że
    > właściwe symbole nie są zdefiniowane.

    Pewnie ze AT91 moze byc

    teraz mam tak:
    caddr_t _sbrk_r(struct _reent *r, int size)
    {
    extern char __heap_start; // imported from linker script
    extern char __heap_end; // imported from linker script
    static char *current_heap_end ;//= &__heap_start;
    char *previous_heap_end;


    if (current_heap_end ==0x00)
    {
    current_heap_end = &__heap_start;
    }
    r = r; // suppress warning

    previous_heap_end = current_heap_end;

    if (current_heap_end + size > &__heap_end) // is there enough space
    on the heap left?
    {
    errno = ENOMEM; // not enough memory left
    return (caddr_t) -1; // return immediatelly
    }

    current_heap_end += size; // increase data space

    return (caddr_t)previous_heap_end; // return requested data space
    }


    i np. sprintf dziala poprawnie, a chyba tez korzysta wewnatrz z _sbrk
    i malloc ( przynajmniej cos takiego widze w pliku
    dissasemblacji .lss).
    Bezposrednie wywolanie malloc() zawiesza program. Na razie nie mam
    mozliwsci debbugowania na zywym procku, tylko programuje flash i
    pozniej wewntualnie wyrzucam sobie cos na uart.

    Marcin


  • 4. Data: 2011-01-18 20:06:18
    Temat: Re: arm-gcc i malloc() - uzywajac yagarto i ADUc7026
    Od: Marcin <m...@o...pl>

    Jeszcze raz odpowiem samemu sobie, dla potomnosci i archiwum Googla.

    Udalo mi sie doprowadzic moj projekt na ADuC7026 do porzadku, malloc()
    dziala i zwraca poprawne adresy.
    Chcialem za duzo od razu - i heap i przerwania i RS. Zaczalem od
    przerobienia projektu z
    http://www.freddiechopin.info/index.php/pl/download/
    category/6-przyklady?download=15%3Alpc2103_blink_led
    tak, zeby linkowal sie na czesci analoga, zmieniajac tylko adresy RAM
    i ROM w pliku linkera. ld.
    Wyrzucilem tez cala inicjalizacje PLL i "systemu" w z main.c
    Pozniej dodalem swoja obsluge UARTa a jak to zadzialalo, dodalem
    przerwania na podstawie przykladow ze strony Analoga.
    Teraz pozostaje mi uruchomienie printf'a zeby korzystal z _write i
    bede zadowolony.

    Jesli ktos bedzie chcial gotowe pliki startup.s, vectors.s i
    syscalls.c, i irq.c gdzie mozna podpiac swoja obsluge IRQ w C, to
    chetenie sie podziele.
    Aktualnie mam tez dopisany odczyt pamieci iButton po 1-wire.

    Marcin

    --
    www.bawolski.pl


  • 5. Data: 2011-01-18 22:05:52
    Temat: Re: arm-gcc i malloc() - uzywajac yagarto i ADUc7026
    Od: Michał Baszyński <m...@g...ze.ta.pl>

    W dniu 2011-01-18 21:06, Marcin pisze:

    > Jesli ktos bedzie chcial gotowe pliki startup.s, vectors.s i
    > syscalls.c, i irq.c gdzie mozna podpiac swoja obsluge IRQ w C, to
    > chetenie sie podziele.
    > Aktualnie mam tez dopisany odczyt pamieci iButton po 1-wire.

    a chętnie poproszę, choć nie wiem kiedy z tego skorzystam..
    W adresie jest @gazeta.pl

    --
    Pozdr.
    Michał

strony : [ 1 ]


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: