To że generowane jest przerwanie i kod się zawiesza nie jest winą OpenOCD tylko kodu... sub.w sp, sp, #24576 ; 0x6000 sub sp, #32 w tym miejscu funkcja alokuje sobie na stosie 24576 + 32 bajtów - nie sądzę aby twój stos to przeżył... 4\/3!!
prawoklik na katalogu webserver -> properties => C/C++ Build -> odhacz exclude from build
Zastosować structure, nie licz na powtarzalność działań linkera.
To trochę dziwne odpowiadać samemu. Ale odpowiedź nie pochodzi ode mnie. Napisał do mnie na PW kolega (nick na razie pominę) nieco sfrustrowany tym, że dyskusja pewnie by się skończyła głupimi uwagami niektórych kolegów, którzy uważają - że już zjedli wszystkie rozumy i nikt nie może ich nic już nauczyć . Kolega ów podpowiedział mniej więcej to, że...
malloc rezerwuje bloki pamięci na stercie poprzez _sbrk_r() z syscalls.c. Sprawdź czy sbrk zgrywa się ze skryptem linkera.
Skrypt linkera z Cube'a "działa" tak, że na początku pamięci ram ląduje sekcja data (zmienne inicjalizowane przy starcie programu - lokalne statyczne i globalne), potem jest bss (zmienne zerowane przy starcie programu - nie inicjalizowane statyczne i globalne). Następny kawałek to _user_heap_stack - czyli sterta i stos "w jednym". Rozmiar data i bss...
Skoro tak to spróbuj ręcznie. Patrzysz na listę błędów, znajdujesz po kolei pliki w bibliotece i dołączasz je do projektu. Nie znam iar, ale w eclipse keilu reisonanse nie wystarczy skopiowanie do wspólnego folderu, trzeba zrobić add...
Zajrzyj do skryptu linkera, zobacz jaki jest rozmiar stosu. 4\/3!!
Ok, łapię:) Ale compilator musi wiedzieć które pliki skompilować (tworzy pliki obiektowe?) a linker musi wiedzieć które pliki połączyć. Dołącza się plik nagłówkowy plik.h, który zawiera deklaracje funkcji, ale same funkcje są w pliku .c, jak on jest dołączany? Poza tym potrzebne sa wyliczenia fizycznych adresów funkcji - to robi także linker?
To zależy od środowiska, którego używasz - w dialogu ustawień projektu, załadka linker, albo w pliku definicji pamięci dla linkera.
Sprawdź 65. linię kodu - tam zapewne masz błąd. Może to być też problem 7 linii skryptu linkera.
Tylko w tablicy wektorów musisz poprawki wprowadzić. Skrypt linkera nie ma tu znaczenia. 4\/3!!
Pokaż startup i skrypt linkera.
Panujesz nad stosem w skrypcie linkera ?
Pokaż Twój makefile i skrypt linkera
Jeśli chcesz wpłynąć na kolejność plików, to jest to również możliwe z poziomu skryptu linkera, bez żadnych modyfikacji w plikach źródłowych. Robi się to zasadniczo tak, że znajdujesz sobie w skrypcie miejsce w którym jest "wstawiona" sekcja .text, czyli pewnie coś w ten deseń: ... SECTIONS { ... .text : { ... *(.text .stub .text.*...
Jeszcze jeden ciekawy przypadek (wg mnie). Jeżeli mógłby mi ktoś wytłumaczyć jak to działa. Przykład pochodzi z http://olimex.com/dev/soft/arm/STR/STM32... (Nie kompilowałem ale zakładam że działa) W przykładzie tym nie ma pliku startup'a. Jest skrypt linkera jeszcze krótszy! Skrypt linkera: MEMORY { ram (rwx)...
Ok, ale rozumiem w takim razie, że to ma niewiele wspólnego już z wynikową binarką, skokiem do programu itp. i ja nie powinienem tego uwzględniać z poziomu bootloadera wiedząc, że na sztywno program zaczyna się od 0x8002000. To bardziej wartość dla parsera ELF / linkera...
Fajnie by było jakbyś podał też więcej konkretów, może sam program nie działa ? Może układ elektroniczny jest zły? Generalnie jak freddie napisał wystarczy skrypt linkera
Ta linia: [cc] 0 total files to be compiled. Powinna Ci dać do myślenia. Pokaż więcej plików z Twojego projektu (Makefile, źródła, skrypt linkera).
to aplikację możny łatwiutko skompilować jako "wolnostojącą" lub ładowaną i uruchamianą z loadera. Dokładnie, wystarczy zmieniać tylko adres bazowy głównego programu w skrypcie linkera.
Czy działa Systick to łatwo sprawdzić w debuggerze. Zresztą wiele spraw można sprawdzić. Ja bym zaczął od tego czy właściwe rejestry podlegają zmianom. To nie jest nic trudnego, w krokowym trybie Też jaka wartość jest SystemCoreClock, to zmienna globalna. Może ląduje gdzieś w HardFault, zaraz po uruchomieniu. EDIT. Często problemem przy kopiowaniu plików,...
błąd już w trzeciej linii. Dodatkowo potrzebujesz plik asm z wektorami i plik linkera aby to wszystko zebrał do kupy. Bez tego żaden program się nie uruchomi :) Po co się katować? Zaznacz Stm32Cube project. Jak nie chcesz HAL to skasuj jego pliki. będziesz miał wszystkie **aktualne** pliki CMSIS, statup i pliki linkera.
Witam! Chcę wgrać parę danych do pamięci mikrokontrolera STM32F107 (ustawienia domyślne). Nie wiem za bardzo jak powinien wyglądać kod linkera do takiego zapisu? Korzystam z CodeSourcery ze strony Freddiego. Nie posiadam debuggera, więc kod mogę wgrywać tylko poprzez bootloader na USART. Pamięć chciałbym zapisać paroma danymi 32bit, a następnie mieć...
(...) ustawiłem wektor przerwań i początku pamięci flash w linkerze z odpowiednim offsetem (0x3800) Co to za magiczny offset? :D
Ja mam tak: __attribute__ ((section(".bootloader&... int program_page(unsigned short *data, unsigned int adr) {... } i linker: .bootloader 0x08000000+128K-1K : { *(.bootloader) } i działa
Słuszna uwaga z tym startupem. Mam go w katalogu projektu, który jest wskazany w ścieżkach eclipsa, ale nie wiem dlaczego nie jest linkowany. Może ma nieprawidłowe rozszerzenie? Teoretycznie istotna jest wielkość liter. Freddie, czy masz może jakiś ładny przykładowy projekt dla CM0? Dla STM32F0 nie, ale możesz spokojnie zrobić małego frankensteina...
A w skrypcie linkera sekcja z atrybutem KEEP? Wtedy nie powinien tego odśmiecacz wywalić, i potem po prostu sekcja #pragma? :/ Nwm tak sobie pomyslałem. Może zadziałać :D Zawsze też możesz zapisać coś do flasha pod odp oadresem jeden raz a potem to będzie. Jeśli zapiszesz to we fragmencie pamięci którego programator nie wyczyści :/ Edit: Pozwolę sobie...
Faktycznie w datasheet zakres pamięci flash dla tego STM'a to 0x4002 3C00 - 0x4002 3FFF. Bzdura Flash zaczyna się od 0x8000000. Gdzie można zmienić ten adres w eclipse ? W skrypcie linkera
Udało się. Skrypt linkera skopiowałem z przykładu z diodami. Musiałem pozmieniać tylko kilka zmiennych w moim pliku startupa. Udało mi się odpalić moją funkcje printf, ale z 10k kodu zrobiło mi się 32k :| Trochę przesada. Mója funkcja printf wygląda następująco: #include <stdarg.h> #include <stdio.h> #include "lcd.h" int _printf(const...
Tutorial jest pisany dla LPC2xxx. Dla STM32 nie ma to żadnego znaczenia, ale pominięcie tej komendy nic nie zmienia w kwestii adresu ładowanego programu - adres jest definiowany przez skrypt linkera. 4\/3!!
Dzięki za odpowiedź! Udało się całość skompilować. Przykład jest dostarczany przez STM jako "STM32F107xx connectivity line Ethernet low-level driver and web server demonstration based on uIP TCP/IP stack". Co do podwójnego includowania tych plików. Należy przenieść dwie ostatnie definicje (z samego końca pliku) z fsdata.c do fs.c (zaraz po include)...
Po wyczyszczeniu wszystkiego zbędnego, wgraniu nowych czystych plików wszystko ruszyło. Najgorsze rozwiązanie - nie wiadomo co było. Od dzisiaj zanim zacznę jakiekolwiek prace: git init; gid add*; git commit -a :) Jedyna zaleta, to że przy okazji szukania bardzo dużo nauczyłem się o wnętrznościach debugger'a, linkera, i rejestrach CM3 :-) Nie ma tego...
Dziwne te niektóre pliki, ale z grubsza wszystko wygląda jak należy... Wiele rzeczy mogłoby spokojnie być we flash, ale w skrypcie linkera są umieszczone w RAM. Niemniej jednak zacznij od dodania "__STARTUP_CLEAR_BSS" do AS_DEFS w Makefile i zobacz czy może dzięki temu problem zniknie. Masz debugger?
A ustawiłeś sobie rozmiar stosu dla przerwań (w pliku linkera)? 4\/3!!
w załączniku archiwum z kilkoma ciekawymi plikami dla STM32F0. 1. Cortex-M0.ld oraz STM32F051x8.ld Skrypty linkera - w projekcie używać należy bezpośrednio tylko tego drugiego, który zaś w środku dołącza ten pierwszy. Podział spowodowany jest tym, że "mapa" pamięci generalnie jest wspólna, więc wszystkie takie rzeczy są w tym Cortex-M0.ld, zaś w tym...
Od niedawna wróciłem do zabawy z ARMami. Mam płytkę ewaluacyną z procesorem: STM32F103VBT6. Oczywiście przeszperałem forum, poczytałem, skonfigurowałem środowisko i odpaliłem (z flasha) klasyczne miganie diodą zrobione przez Freddiego - za co dzięki. Kompilacja, linkowanie i flashowanie bez problemów. Uruchomiło się i działa. Potem kolejne coraz bardziej...
Jaki masz skrypt linkera, syscallsy i rozbiegówkę?
To trzeba w linkerze dopisać jeszcze jedną pamięć ?
Tak, dokładnie o to chodziło.
Jedyne "pewne" podejście do tej kwestii, to zmniejszenie rozmiaru flash w skrypcie linkera o rozmiar przynajmniej dwóch ostatnich stron i użycie właśnie tych dwóch ostatnich stron. Każda inna opcja to proszenie się o kłopoty.
Bootloader przestawia wektory przed skokiem do softu użytkownika więc wydaje mi się że nic dodatkowo nie trzeba robić poza kompilacją pod 0x08001000. Niestety. CubeMX robi to tak że ustawia na początku rejestr VTOR (funkcja SystemInit): [syntax=c] SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */ [/syntax]...
Darmowa wersja Keila dla STM32 (a w zasadzie linker) obsługuje maksymalnie 32KB kodu. Jeżeli chcesz więcej, to szykuj cca 10 000pln na MDK-Basic, który pracuję do 256KB :)
Przydałoby się jeszcze 2 rzeczy: 1. zmniejszyć FLASH o odpowiednią wartość, tak aby na siebie nie najeżdżały - możesz od LENGTH odjąć ile tam potrzeba ... LENGTH = 128k - XXX 2. Dodać profilaktycznie } > VAR AT > VAR Tym sposobem skrypt linkera będzie w 100% poprawny. Jeśli nadal będą jakieś błędy, to już nie po stronie linkera. Jeśli dalej coś nie...
Jaki komplilator? Jeśli gcc to skąd wziąłeś implementację sbrk() i czy na pewno pasuje ona do pozostałych plików (szczególnie skryptu linkera)? 4\/3!!
1. Ta płytka nie ma wbudowanego JTAGa. W przeciwnym wypadku po do by jej było złącze JTAG 20-pin? 2 + 3. Na stronce dostępny jest trial wersji "rozbudowanej", w darmowej musisz sam zadbać o skrypt linkera i startup. Wbrew pozorom nie jest to takie trudne - dobry przykład (polecam te z mojej stronki dla stm32 - http://www.elektroda.pl/rtvforum/topic13...
Ściągnij z mojej strony przykładowy projekt dla stm32. Będziesz w nim musiał zmienić następujące rzeczy: - w skrypcie linkera adresy i rozmiary pamięci - w tabeli wektorów nazwy i lokalizację "dodatkowych" przerwań (kilkanaście pierwszych jest standardowych dla całej rodziny Cortex-M3) - podstawowy kod w pliku main.c - oczywiste (; Startup i Makefile...
To być może cała filozofia jest przestarzała, może kompilator i linker powinny działać jednocześnie i wymieniać między sobą informacje?
Funkcja SystemInit jest wywoływana w obu przypadkach na początku main. Podałem ją w kodzie. Może tutaj faktycznie jest problem. Pliki startup.s Keila i Cube się różnią. Zauważyłem, że funkcja SystemInit jest wywołana w pliku dla Cube. Niestety te pliki to dla mnie czarna magia. Czytałem o nim artykuł waszego kolegi z elektrody. https://www.elektroda.pl/rtvforum/topic3...
Patrzę na skrypty linkera udostępnione np. przez Freddiego i widzę tam takie cuś: [syntax=c] .stab 0 (NOLOAD) : { *(.stab) } .stabstr 0 (NOLOAD) : { *(.stabstr) } /* DWARF debug sections. * Symbols in the DWARF debugging sections are relative to the beginning * of the section so we begin them at 0. */ /* DWARF 1 */ .debug 0 : { *(.debug) } .line 0 :...
Ten fragment skryptu linkera jest "ciekawy": DISCARD : { libc.a(*) libm.a(*) libgcc.a(*) } Flagi na które zwrócił Ci uwagę (at)GrzegorzKostka nie są żadnym problemem, wiec możesz je zostawić. Dodaj do skryptu linkera (gdzieś na początku) coś takiego: OUTPUT_FORMAT("elf32-littlearm&... "elf32-bigarm",...
http://www.elektroda.pl/rtvforum/topic13... http://www.elektroda.pl/rtvforum/topic13... Na początek może pożegnaj się ze starociami i zainstaluj coś nowego (CodeSourcery). Co do reszty: Moim zdaniem nie ma sensu pisanie samemu tych plików, ale warto rozumieć co i dlaczego tam jest. Szczególnie nie warto pisać ich "tylko pod konkretny zestaw",...
Tak, właśnie dla samego edytora. Kompilator Keila daje lepiej skopilowany kod. Jak się używa małych procków to jaki jest problem? mickpr Co masz na myśli mówiąc o Linkerach i skryptach oraz "dziergniu"?
Witam ponownie! Odkopuję temat. użyłem Twojego skryptu linkera od stm32 (zmienilem tylko sekcję memory i o dziwo działa), do tego wrzuciłem Twoje callbacki. niestety... wywala mnie przy sprintf. mało tego wcześniej działał dla zmiennych typu int, a przy floatach się wywalal.. teraz niestety wywala się przy obu... jeszcze jakies propozycję? generalnie...
Pierwsza opcja to oczywiście zdefiniowanie NAPRAWDĘ DUŻEGO stosu, ale to średnie rozwiązanie jak wiadomo [; Do rozbudowanej aplikacji na ARMa myślę że należy liczyć minimum 1kB, jeśli używa się jakichś potwornych funkcji standardowych (printf!) i to głęboko to lepiej zaopatrzyć się w 2kB (o apetycie tych funkcji na pamięć pisałem ostatnio http://www.elektroda.pl/rtvforum/topic13...
Proponuję zainstalować eclipse a następnie SW4 czy tez zwane tez OpenStm http://www.openstm32.org/Downloading+the... Tam masz instrukcję co zrobić dla liuxa. Zaleta jest też taka że projekty wygenerowane przez CubeMx importują się bez specjalnego jednokliknięciowo. Masz wtedy najbardziej aktualne pliki CMSIS i HAL (jak...
Twój program jest źle skompilowany, bo nie używasz skryptu linkera, który jest zasadniczo niezbędny. Jakbyś go zdezassemblował, to zapewne kod będzie pod jakimś abstrakcyjnym adresem. W przykładach masz dobry skrypt linkera i Makefile, który skompiluje również Twój plik assemblerowy - proponuję wtedy jednak nazwać funkcję "Reset_Handler". Poza tym przed...
Kompilator języka C (zakładając poprawną konfigurację projektu/make'a) nawet jakbyś wrzucił milion niepotrzebnych plików, to wyrzuci z nich funkcje, których nie używasz (tak zwany martwy kod). Nie będą więc one w kodzie wynikowym No tak, ale np. gcc zrobi tak tylko gdy wywołasz go z flagami -ffunction-sections i -fdata-sections. A jeszcze potem trzeba...
No ale zrozum, że w każdym module w którym includujesz ten plik tworzy się kolejna kopia tej zmiennej a linker podczas linkowania próbuje ustalić adres takiej zmiennej i stwierdza, że ma kilka o takiej samej nazwie więc zgłasza błąd. Do tego co ty chcesz uzyskać służy słowo kluczowe extern
Nie odpowiem, dlaczego to działa w C, a nie działa w C++, ale pamiętaj, że to wyrażenie musi obliczyć linker, nie kompilator. To wyrażenie oblicza w każdym wypadku kompilator - nawet jeśli generuje zły kod. Wygląda na to, że jeśli w wyrażeniu inicjującym występuje operator "->" kompilator ignoruje const. Sprawdzone do wersji 4.5.0 20090816 (experimental)....
Jak to ta sama seria to nie musisz zmieniać wektora przerwań, ale w skrypcie linkera wypadało by pozmieniać rozmiary pamięci i powinno być ok.
Teraz pozostało mi przenieść projekt z stm32 na lm3s, ponieważ zajmuję się tym w wolnym czasie od pracy, to efektem podzielę się pewnie za kilka dni. To naprawdę nie jest dużo roboty, generalnie (pomijając detale typu zmiana nazw plików czy nazwy projektu) trzeba zrobić mniej więcej "aż" tyle: 1. poprawić tablicę wektorów (to i tak byś miał kiedyś...
W skrypcie linkera. Kompilator tworzy jakieś sekcje (pewnie coś z obsługi wyjątków, takich sekcji jest kilka), które nie mają wpisów w skrypcie linkera, a więc domyślnie trafią one do RAM (tak jakbyś zrobił SECTIONS ... { ... } > RAM AT >RAM), ale zawartość tej sekcji jest inna niż same zera. Linker wypełnia więc obszar od flasha (adresy 0x8000000)...
Skoro linker się nie zajmuje ustawieniem LSB tablicy wektorów, to chciałbym zapytać się jak to się dzieje? Zasugerowałem się informacjami na tej stronie http://pygmy.utoh.org/riscy/cortex/led-s... wprawdzie autor, tylko podejrzewa ;) pzdr.
Czyli nie ma żadnej przeszkody, żeby w tablicach globalnych oznaczonych jako const przechowywać duże zawartości danych ? chciałbym w takich tablicach trzymać rysunki do wyświetlacza LCD. Skoro zostaną one umieszczone w flashu to nic nie stoi na przeszkodzie, żeby zajmowały nawet z 200 kB? (o ile nie przekroczę wolnej pamięci flash oraz pewnie zadeklarowanej...
do "cudownego" ide eclipse dla stm32. To nie wina IDE, ale osoby importującej (czyli Ciebie). Podam Ci najprostszą metodę: Zrób nowy projekt dla swojego procesora. Wywal wszystko oprócz pliku linkera. W eksploratorze windows Copy cały wszystko co jest w projekcie (najperw usuń pliki konfiguracyjne cocoxa czy czegos tam innego). Prawy klawisz myszki...
tadzik85 napisał: Jednak istotnym mankamentem w przypadku ST jest fakt, że wartość kopiowana nijak ma się do ustawień w linkerze. ? Chodzi o to, że do vectora przerwań trafia wartość SP wynikająca z linkera, a w startupie wprost ustawiany jest RAM_END,
Zademonstruję Ci: Nowy projekt w Atollic for STM32: Bez modyfikowania skryptu linkera: https://obrazki.elektroda.pl/4714547300_... A teraz Twoje przezroczyste przypisanie: https://obrazki.elektroda.pl/8906289200_... Dopiero po dodaniu do skryptu linkera: https://obrazki.elektroda.pl/4995382700_...
O adresy kodu chodzi, a nie danych. Adresy kodu mają wpływ na akcelerację dostępu do Flash. Pętla zaczynająca się od adresu podzielnego przez 16 ma szansę wykonywać się szybciej, niż taka od adresu np. 16x + 14. Nie sądzisz chyba, że kompilator przy wyłączonej optymalizacji zrobił dwie różne wersje tej samej funkcji, a linker umieścił je w zupełnie...
Opcja -S, o której pisałem to opcja kompilatora, do użycia w komendzie ...-gcc ..., Z tym, że tak wprost się tego raczej nie da dodać. Niestety, CubeIDE nie znam, więc od ręki nie odpowiem, jak tej opcji użyć. Dobra to po kolei :) To już znam odpowiedz na to co mnie interesowało( czyli że to jest po prostu jakiś śmieciowy rozkaz, którego procek nie...
Czyj plik linkera...? TAK! To plik linkera na koniec usuwał symbole! Dzięki wielkie! To są skutki stosowania "KWIATKÓW" Takie były krótkodystansowe skutki. :) Długodystansowe skutki to wysoko ceniona w branży wiedza, zrozumienie i umiejętność pisana takich skryptów z palca. :)
Startup bez zmian. Skrypt linkera - zmienić rozmiar pamieci. Tablica wektorów - poniżej. 4\/3!!
Piszemy tak nie bez powodu: instalacja bez pluginu nie jst prosta szczególnie jak trzeba sobie wszystko poustawiac, a nie zna sie jeszcze struktury plików, skryptów linkera itp. Dlatego proponujemy cos co "poprowadzi za rękę" www.freddiechopin.info
Trzeba tylko przerobić tablicę wektorów. W każdym razie - zajrzyj do skryptu linkera i poczytaj ze zrozumieniem komentarze przy wartościach które są tam na górze. 4\/3!!
Przejrzałeś choć mój makefile i opcje tego pluginu przed pytaniem? W moim makefile opcje odpowiedzialne za to są podane WPROST - ffunction-sections (kompilator), -fdata-sections (kompilator) i -gc-sections (linker) - teraz tylko je znajdź w parametrach plugina. Są tam na pewno, bo osobiście pisałem patch'a, który by je tam dodawał. Pozatym, ile razy...
http://www.elektroda.pl/rtvforum/viewtop... Masz tu wędkę, ale haczyk musisz sam zaczepić ;) A następny razem zamiast obrażać Forumowiczów albo kompilator, to użyj wyszukiwarki na Forum albo skopiuj wszystkie pliki projektu do nowego folderu, wstaw odpowiednie inkludy i wskaż linkerowi gdzie są pliki. Pozdrawiam, Marek
Bo ten program jest zły! Cortex-M3 pod konkretnymi adresami oczekuje konkretnych rzeczy - na samym początku flasha - wartości dla SP, potem adresu (adresu! nie instrukcji!) wektora obsługi wyjątku reset itd. Zapomnij o takim prostym programiku - to tak po prostu nie zadziała. Potrzebna Ci jest tablica wektorów, potrzebny Ci jest "normalny" skrypt linkera...
Od kiedy można było kupić ARM w postaci układu scalonego u jakiegoś dystrybutora, tak jak kupuje się teraz STM32, SAM czy AVR 8051? Od kiedy w mniejszych czy większych ilościach można było kupić PPC, ColdFire?
Może ktoś ma pomysł z czym jest problem i jak go naprawić? Dodam jeszcze że problem ten występuje nawet w najprostszym programie (inkrementacja zmiennej). A czy jesteś pewien, że szablon z którego skorzystasz odpowiada dokładnie mikrokontrolerowi: STM32F103VD ? Ważna jest każda literka symbolu procka. Z tego co sprawdziłem, to zestaw Kamami ma mikrokontroler...
Ustawiłem FPU w Eclipsie w następujący sposób http://obrazki.elektroda.pl/8684137500_1... ale teraz wywala inne błędy... może czegoś nie ustawiłem ? 12:38:34 **** Incremental Build of configuration Debug for project Stm32f4 **** make all 'Building target: Stm32f4.elf' 'Invoking: Cross ARM C++ Linker' arm-none-eabi-g++...
A tak na serio, to mnie najbardziej interesowałaby opcja opisana na ostatniej stronie jako "najbardziej interesująca", a więc wykorzystanie startupa i skryptów linkera (i tylko tych plików) dostarczanych razem z biblioteką (w połączeniu z "pierdołami" typu sbrk, malloc itp itp) No ale tu nie ma co opisywać, bo to będzie generalnie identycznie jak w...
Bo masz źle skonfigurowany projekt - ma być wszystko w trybie thumb. 4\/3!! Dziekuje za odpowiedz, moglbys jeszcze podpowiedziec jak ustawic ten tryb ? To chyba w opcjach kompilatora tak ? Obecnie mam takie opcje: dla kompilatora C: arm-atollic-eabi-gcc -c dla linkera: arm-atollic-eabi-gcc
nie kompilator, a linker. Słowa kluczowe section i region i makefile . W mapach pamięci wlasciwe dane uklada nie kompilator, a linker. Jemu musisz powiedzieć, jak poukładać sekcje i regiony w obrębie dostępnych adresów...
Tak, zależy mi na stałym umieszczeniu we flash, a wgrywane programy nie przekraczałyby 64kB. Wymyśliłem jeszcze taką wersję ;) żeby program kompilować do pliku binarnego i potem składać całość w "ręcznie". Choć wolałbym nauczyć się pracować na linkerze i poznać więcej informacji o nim. Jak dokładnie (krok po kroku) np.umieścić dane w oddzielnej sekcji...
Witam, sprawdzę wieczorem ale pewnie będzie problem z __attribute__ ((interrupt)) bo teraz jak to dodałem to kod się zmienił (3 linijki w asemblerze na początku i 2 na końcu funkcji ). xQueueSendFromISR dodatkowo używa portSET_INTERRUPT_MASK_FROM_ISR i portCLEAR_INTERRUPT_MASK_FROM_ISR tak samo jak SysTick_Handler, a on ma __attribute__ ((interrupt))...
Wrzuć pełen log kompilacji (zrób najpierw make clean). Adresy o które pytasz są zdefiniowane w skrypcie linkera. W skrypcie linkera z przykładów, a nie w jakimkolwiek innym. 4\/3!!
Może zbyt namieszałem. Zasadniczo chodzi po prostu o to jak stworzyć projekt w SW4STM, który nie zawierałby tych wszystkich śmieci z SPL i HAL i dało się pisać na rejestrach. Taki czysty podstawowy projekt pod rejestry z tylko niezbędnymi rzeczami jak w przypadku pisania na AVRy. Ja robię to tak: I. Potrzebne narzędzia: 1. System Workbench for STM32...
Ustawiasz w skrypcie linkera tak aby wszystko trafiło do RAM, a nie do flasha i to wszystkie zmiany jakie musisz wykonać, jednak ja wciąż sugeruję nie przejmowanie się żywotnością pamięci Flash - więcej z tym problemów niż "korzyści". 4\/3!! Jeszcze musi przestawić zworkę ! :P
Pomysł BlueDracko żeby to bootloader przestawiał offset tablicy wektorów jest bardzo dobry (; (a przynajmniej tak jest w normalnych Cortex-M, nie wiem, jak w STM32F1, który całkiem normalny nie jest). Może Freddie jako ekspert od F1 potwierdzi albo zaprzeczy. Obecny! Tutaj nie ma co zaprzeczać, ale przy okazji jakichś tam dociekań dowiedziałem się w...
PS. co to jest RISC-V toolchain A co RISC-V ma wspólnego z STM32 i mikrokontrolerami ARM (a jest to dział, w którym zadajesz pytanie. Pytanie zatagowałeś STM32. STM32 nie sa RISC-V) Poważnie? Aż tak bardzo trudno napisać że toolchain do RISC-V to zestaw narzędzi potrzebnych do zbudowania na danej platformie kodu dla procesorów RISC-V? Pamiętaj że jesteś...
Problem to jest taki, że keil nie spełnia standardów języka C dotyczących kilku całkiem istotnych spraw. Jeśli kod o którym mówisz jest tym samym o którym myślę (nie chce mi się ściągać 14MB, bo pewnie wrzuciłeś tam pliki bin, elf i nie wiadomo jakie jeszcze zupełnie nie potrzebne do niczego) to w kodzie Keila jest mnóstwo operacji typu: Według mnie...
Flagi są uniwersalne dla kompilator opartych na gcc. Ich opis maszw internecie Google gcc compiler flags. Ale ponieważ jesteś zielony to bym jednak proponował coś co samo wygeneruje makefile do projektu, będzie miało jakiś podstawowy skrypt linkera i ustawi większość flag samodzielnie. Czyli eclipse + plugin. Szkoda Twojego czasu i wysiłku.
3 proces uruchomiony działa wspaniale aktualnie jest gruz z podłączeniem FATFS linker nie widzi plików najprawdopodobniej literówka gdzieś tylko że znajdowanie literówek to nie moja specjalność :D sytuacja opanowania stm32f10x_conf.h był żle skonfigurowany :D
Ze skryptu linkera nic nie musisz usuwać - po prostu ustaw rozmiar stosu którego nie będziesz używać (process) na 0. __main_stack_size = 1024; __process_stack_size = 0;
Ja mam Eclipse + CodeSourcery + OpenOCD. undefined reference to `main' startup_stm32f0xx.s /lcd/src line 109 C/C++ Problem Błąd linker'a.
Ze względu na wiek, żebyś się nie na wabił frustracji oraz zniechęcił do świata embedded, to wybierz IDE, które już w pakiecie instalacyjnym zawiera w sobie wszystko co trzeba. Jeśli chcesz uniknąć tej całej magii, która kryje się pod takimi rzeczami jak Makefile, linker, czasem skrypt linkera, to proponuje ściągnąć takie oprogramowanie, które robi...
Efekt dokładnie taki sam jak w przypadku moich wypocin. Zawiesza się i ląduje gdzie? Próbowałeś zmniejszyć w skrypcie linkera rozmiar dostępnej pamięci flash i RAM, np. każdą o połowę? Pokaż te pliki które zmieniłeś.
można jeszcze jedno z definicji ustawić z atrybutem "weak" Po co? ale pewnie wymagałoby to dodatkowego uzasadnienia oraz dodatkowej opcji kompilacji, a właściwie chyba linkera... nie wymagałoby
A gdzie masz konfigurację procesora, jak wygląda u Ciebie plik dla linkera? Gdzie jest konfiguracja zegara? Na początek proponuję zapoznać się z tym [url=http://www.elektroda.pl/rtvforum/to... projekty dla ARMów W pierwszym poście znajdziesz też odnośnik do strony, na której są przykłady, między innymi dla STM32. Miłej lektury...
Twoja linijka od linkowania jest błędna. Biblioteki _MUSZĄ_ być na samym końcu, po wszystkich plikach obiektowych - tak działa linker. W ogóle to połowa flag które przekazujesz linkerowi nie ma dla niego znaczenia.
stm32 linker stm32 skrypt linker linker error
spawarka castolin bosch zmywarka hałas przesunąć tablica
malowanie remont alarm rowerowy
Koszt wymiany wałka rozrządu i głowicy w Passat B6 2008 Tranzystor ГТ7: Charakterystyka i Zamienniki