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

[stm32f103] - Atolic -> (Eclipse + CodeSourcery)

kasaidolar 07 Sie 2012 10:26 3419 20
REKLAMA
  • #1 11183380
    kasaidolar
    Poziom 19  
    Posty: 409
    Pomógł: 22
    Ocena: 29
    Cześć!
    Czy ktoś przeniósł bez bólu projekt z Atolica do Eclipsa? Męczę się z tym chyba już tydzień i w żaden sposób nie mogę sobie poradzić.

    Pozdrawiam,
    Paweł
  • REKLAMA
  • #2 11183438
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    Ktoś na pewno to zrobił, ale nie liczyłbym specjalnie na pomoc skoro nie zadajesz konkretnego pytania ani nie opisujesz konkretnego problemu.

    4\/3!!
  • REKLAMA
  • #3 11183681
    kasaidolar
    Poziom 19  
    Posty: 409
    Pomógł: 22
    Ocena: 29
    To może od początku. Twoj projekt "stm32F103RB_template" kompiluje się, tworzy się hex. Podmieniłem biblioteki CMSIS i STM32F10x_StdPeriph_Driver na najnowsze, zmieniłem katalogi w ARM Sourcery Windows GCC C i C++ Compiler bo nowe biblioteki mają troche inny układ.

    Dostaje coś takiego:

    Kod: Text
    Zaloguj się, aby zobaczyć kod
  • #4 11184150
    Konto nie istnieje
    Konto nie istnieje  
  • #5 11184261
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    kasaidolar napisał:
    (C:\Users\Paweł\Desktop\stm32F103RB_template\Libraries\CMSIS\Core\CM3
    Odwróć ukośniki, być może kompilator akceptuje tylko w stylu Unix-owym...
  • REKLAMA
  • #6 11184325
    kasaidolar
    Poziom 19  
    Posty: 409
    Pomógł: 22
    Ocena: 29
    Tak, ze ścieżką był problem ale bardziej martwą mnie te błędy:
    Kod: Text
    Zaloguj się, aby zobaczyć kod

    Wygląda na to, że się kompiluje i hex tworzy się pomimo tych błędów.
  • REKLAMA
  • #7 11184365
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    A warningów wcześniej nie ma przy kompilacji ? Domniemywuję, że robisz make clean przed make(lub odpowiednik z menu IDE). Generalnie bez kodu, do którego można by się odnieść, to tak jakbyś prosił o wróżbę...
  • #8 11184458
    kasaidolar
    Poziom 19  
    Posty: 409
    Pomógł: 22
    Ocena: 29
    Tak wyglada kompilacja w consoli:

    Kod: Text
    Zaloguj się, aby zobaczyć kod


    W template zmieniłem tylko biblioteki.

    main w którym nic nie ma:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #10 11184622
    kasaidolar
    Poziom 19  
    Posty: 409
    Pomógł: 22
    Ocena: 29
    W zakładce "Problems" mam te dwa błędy, a w "Console" ich nie widac. Matrix.
  • #11 11184726
    ollson
    Poziom 11  
    Posty: 8
    Eclipse lubi wyrzucić błędy w zakładce Problems. Jak kobieta, lubi pomarudzić ;) Ale jeśli w Console nie pojawiają się błędy, to program będzie najprawdopodobniej prawidłowo działać. pzdr
  • #12 11185844
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    kasaidolar napisał:
    W template zmieniłem tylko biblioteki.

    ... i nie korzystasz z Makefile, który jakby nie patrzeć jest dosyć istotną częścią projektu.

    Co do problemów z zakładki problems, to musisz sobie wyczyścić ścieżki Discovery.

    4\/3!!
  • #13 11212073
    kasaidolar
    Poziom 19  
    Posty: 409
    Pomógł: 22
    Ocena: 29
    Udało się przenieść, okazało się ze eclipse "pamięta" sobie błędy w Problems pomimo, że już ich nie ma. Dodatkowo miałem problem z "bl __libc_init_array" w kodzie startowym. Ale pozbyłem się tego i jest ok.

    Dzięki za pomoc
  • #14 11212739
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    To jak będziesz kiedyś pisał coś w C++ to problem wróci - "pozbywanie się" czegoś co zostało dodane w konkretnym celu nie jest szczególnie dobrym wyjściem...

    4\/3!!
  • #15 12385945
    kasaidolar
    Poziom 19  
    Posty: 409
    Pomógł: 22
    Ocena: 29
    Cześć
    Miałem projekt w Atolicu dla STM32F103, przeniosłem go do Eclispsa+CodeSourcery program magicznie przestał się mieścić w mikrokontrolerze. Optymalizacje mam włączoną na najmniejszy rozmiar. Czy coś mam jeszcze nie włączone? Jakieś ustawienia w Eclipse? Generalnie to jest bootloader do mikrokontrolera. Przewidziane było dla niego do 20kB.
    Pozdrawiam,
    Paweł

    EDIT:

    Dodanie: vsnprintf(txtbuf, 1024, __fmt, __ap); zwiększa mi kod z 4,5kB do 29,5kB - moze to to? Moze mam włączony zmienny przecinek albo coś?
  • #16 12386335
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    Może to dobry moment na przejrzenie dokumentacji do newliba (libc.pdf) i odkrycie "magicznych" funkcji które nie obsługują formatowania liczb zmiennoprzecinkowych?

    4\/3!!
  • #17 12386460
    kasaidolar
    Poziom 19  
    Posty: 409
    Pomógł: 22
    Ocena: 29
    Dzięki za błyskawiczne info. Wrzuciłem vsniprintf i teraz zajmuje 14kB wiec jest ok. Czy to miałeś na myśli pisząc o odkryciu magicznych funkcji, które nie obsługują formatowania liczb zmiennoprzecinkowych :) ?
  • #18 12386655
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    kasaidolar napisał:
    Czy to miałeś na myśli pisząc o odkryciu magicznych funkcji, które nie obsługują formatowania liczb zmiennoprzecinkowych ?

    Tak - to jest rozszerzenie biblioteki newlib, nie jest więc "standardowe".

    4\/3!!
  • #19 12454317
    kasaidolar
    Poziom 19  
    Posty: 409
    Pomógł: 22
    Ocena: 29
    Cześć
    Robię kolejny przeszczep z Atolica do Eclipsa. Od adresu 8000000 mam bootloader, od 8007000 mam docelową aplikację z freertosem. Dostaje Fault SVC:

    FATAL: SVC

    [Hard fault handler - all numbers in hex]
    R0 = 20005000
    R1 = 2000166c
    R2 = 7
    R3 = 20000588
    R12 = 1
    LR [R14] = 800f713 subroutine call return address
    PC [R15] = 800f6e4 program counter
    PSR = 21000000
    BFAR = e000ed38
    CFSR = 80000
    HFSR = 40000000
    DFSR = 9
    AFSR = 0
    SCB_SHCSR = 0

    Poszukałem w lst program counter i mam coś takiego pod tym adresem

    0800f6d4 <vPortStartFirstTask>:
    800f6d4: 4803 ldr r0, [pc, #12] ; (800f6e4 <vPortStartFirstTask+0x10>)
    800f6d6: 6800 ldr r0, [r0, #0]
    800f6d8: 6800 ldr r0, [r0, #0]
    800f6da: f380 8808 msr MSP, r0
    800f6de: b662 cpsie i
    800f6e0: df00 svc 0
    800f6e2: bf00 nop
    800f6e4: e000ed08 .word 0xe000ed08

    Adres powrotu za to jest w okolicach:

    800f712: 4620 mov r0, r4
    800f714: bd10 pop {r4, pc}

    Jak wyłącze freertosa to nie dostaje tego faulta. Możecie coś doradzić? Co jeszcze sprawdzić?
  • Pomocny post
    #20 12454377
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    Należy "przypiąć" przerwania FreeRTOSa do wektora przerwań w projekcie - wywoływany jest SVC i tak właśnie ma być.

    4\/3!!
  • #21 12454954
    kasaidolar
    Poziom 19  
    Posty: 409
    Pomógł: 22
    Ocena: 29
    Strzał w dziesiątkę. Dzięki za pomoc. Śmiga.

Podsumowanie tematu

✨ Użytkownik miał trudności z przeniesieniem projektu z Atolica do Eclipse, szczególnie z błędami związanymi z bibliotekami CMSIS i STM32F10x_StdPeriph_Driver. Po wymianie bibliotek i dostosowaniu ścieżek, pojawiły się problemy z kompilacją, które nie były widoczne w konsoli, ale były zgłaszane w zakładce "Problems". Użytkownik zdołał przenieść projekt, jednak napotkał nowe wyzwania związane z rozmiarem kodu po dodaniu funkcji `vsnprintf`, co zwiększyło jego objętość. Ostatecznie, po konsultacjach, udało się zredukować rozmiar kodu i rozwiązać problemy z przerwaniami FreeRTOS.
Wygenerowane przez model językowy.
REKLAMA