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
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...
Zastosować structure, nie licz na powtarzalność działań linkera.
malloc rezerwuje bloki pamięci na stercie poprzez _sbrk_r() z syscalls.c. Sprawdź czy sbrk zgrywa się ze skryptem linkera.
Zajrzyj do skryptu linkera, zobacz jaki jest rozmiar stosu. 4\/3!!
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...
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...
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)...
A w kontekście licencji to na stronie jest napisane: Simplified BSD Licence, GNU GPL v2, GNU GPL v3, GNU LGPL v2.1, GNU LGPL v3, MIT / X / Expat Licence Czyli mimo iż może nie czyste BSD to i tak otwarte i darmowe. Ale zrozum, że żaden "packager" nie może zmienić licencji komponentów. Licencja pakietu CodeSourcery jest identyczna jak dowolnego innego...
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ć...
Tylko w tablicy wektorów musisz poprawki wprowadzić. Skrypt linkera nie ma tu znaczenia. 4\/3!!
Czyj plik linkera...? TAK! To plik linkera na koniec usuwał symbole! Dzięki wielkie! To są skutki stosowania "KWIATKÓW"
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!!
Próbuję pożenić template Freddiego (stm32_blink_led) z StdPeriph Ale to widziałeś? http://www.freddiechopin.info/pl/artykul... Ma ktoś pomysł co może być nie tak ? W skrypcie linkera należy ustawić rozmiar stosu dla przerwań - domyślnie jest zero, co zwykle źle się kończy. Ustawiłeś...
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...
Tylko tych funkcji będzie bardzo dużo, najlepiej żeby to dodać do całych plików, bo raczej do katalogu się nie da z poziomu gcc Jeśli te funkcje umieścisz w jednym pliku, to powstanie z nich jeden plik obiektowy. Wystarczy dopisać do makefile linijkę wywołującą dla niego objcopy i zmienić nazwę segmentu .text, a potem linkerowi podać gdzie ta sekcja...
(...) ustawiłem wektor przerwań i początku pamięci flash w linkerze z odpowiednim offsetem (0x3800) Co to za magiczny offset? :D
To zależy od środowiska, którego używasz - w dialogu ustawień projektu, załadka linker, albo w pliku definicji pamięci dla linkera.
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
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,...
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 :)
Błąd jest gdzieś tu: .data : { _data_begin_ = .; *(.data) _data_end_ = .; } > FLASH Myślę, że w tym małym kawałku widać go od razu [; 4\/3!!
W skrypcie linkera nie można tego ustawić? Albo zerknij do źródeł NVIC_SetVector i tam dodaj offset. No właśnie. Chodzi mi o to, ile jeszcze podobnych "niespodzianek" można się spodziewać po standardowych bibliotekach STM, przy relokacji kodu. Oczywiście wyjdzie to i tak "w praniu", ale tak sobie pomyślałem że może już to przerabiałeś, więc po co wyważać...
Co do Twojego problemu deklaracji typu układu - typ ten zdefiniowany jest w Makefile (MD, HD, CL, ...) Jeśli używasz przerwań, to ustaw jakąś wielkość stosu dla przerwań w skrypcie linkera (domyślnie jest 0, bo nie ma przerwań w przykładach). 4\/3!!
Sprawdź 65. linię kodu - tam zapewne masz błąd. Może to być też problem 7 linii skryptu linkera.
Panujesz nad stosem w skrypcie linkera ?
Pokaż startup i skrypt linkera.
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?
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.
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?
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.
Ś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...
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...
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...
wiesz - moze jest cos o czym nie wiem, niemniej jednak dla testow sprawdzilem taki ultra proty kod (bez startupa i innych bajerow, po prostu jakis main i jakies operacje) i wygladalo w miare ok. moze biblioteki sa jakies dziwne i nie beda dzialac na stm? tak czy siak zamiast toolchain'a yagarto mozna sciagnac toolchaina codesourcery, ktory oficjalnie...
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
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 :...
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...
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.
To trzeba w linkerze dopisać jeszcze jedną pamięć ?
A ustawiłeś sobie rozmiar stosu dla przerwań (w pliku linkera)? 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...
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
Jaki masz skrypt linkera, syscallsy i rozbiegówkę?
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...
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.
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
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",...
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...
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...
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?
W pliku linkera zastąp to co masz tam tymi wartościami /* Highest address of the user mode stack */ _estack = 0x20002800; /* end of RAM */ /* Generate a link error if heap and stack don't fit into RAM */ _Min_Heap_Size = 0x200; /* required amount of heap */ _Min_Stack_Size = 0x400; /* required amount of stack */ /* Specify the memory areas */ MEMORY...
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.
Niektóre narzędzia pozostawiają wiele do życzenia. Można mieć setki opcji, ale jeśli te opcje nie są opisane, albo opisane lakonicznie, bo narzędzie nie pozwala na obszerny komentarz, to tak naprawdę niczego to nie ułatwia. Trzeba się domyślać co autor miał na myśli, albo szukać gdzieś w zewnętrznej dokumentacji, jeśli w ogóle ona istnieje. Jeszcze...
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!!
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...
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...
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
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ś...
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"?
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_...
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)...
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...
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...
Witam po raz ostatni. Pomogło wykorzystanie Twojego skryptu do spółki z Twoim linkerem. Bazowałem na projekcie z stm32. Działa teraz bez zarzutu. Wielkie dzięki!
Dołącza - libc, libm, libgcc. Może one się różnią wersjami? Z drugiej strony jak widzę w pierwszym przypadku wskazujesz mu na skrypt linkera stm32_ROM.ld, może tam tkwi odpowiedź.
Dzień dobry. Szukałem w Internecie już kilkukrotnie tego problemu, niestety nie znalazłem żadnego rozwiążania. Owszem, ludzie piszą, co zrobić - jak np sprawdzić odniesienia do bibliotek, linkery itp - tylko że to zbyt ogólne, a kompletnie się na tym nie znam. Proszę więc o pokierowanie mnie, co konkretnie mam zrobić, aby rozwiązac ten problem.
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,
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...
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...
Linker nie widzi tych funkcji, które są wypisane, napewno zaincludowałeś przed main-em te fragmenty bibliotek od ST, które zawierają te funkcje?
Proszę o pomoc szczególnie freddiego chopina ponieważ jest autorem plików linkera, startup-a i wektora przerwać(vectors.c), które w innych projektach jak dotąd działałają mi niezawodnie. Zajrzyj do skryptu linkera, przeczytaj ze zrozumieniem jego początkowy fragment, ustaw tak jak trzeba i będzie działać. Kluczową sprawą jest przyswojenie sobie tego...
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?
Chyba tak jest, tutaj plik startup_stm32f10x_md.c [syntax=c]/** ****************************************... * (at)file startup_stm32f10x_md.c * (at)author Coocox * (at)version V1.0 * (at)date 12/23/2009 * (at)brief STM32F10x Medium Density Devices Startup code. * This module performs: * - Set the initial SP * - Set...
Witajcie, Kontynuując moją przygodę "chirurga ARM" doszedłem (i zatrzymałem się) do plików startup'owych i linkera. Przeglądając czarne zakamarki internetu znalazłem jakieś przykłady (Fredie'go też) lecz nie rozumiem na jakiej podstawie one powstały. Jako główne źródło podawana jest biblioteka standardowa STM i zawarte tam przykłady. Interesuje mnie...
Czy chodzi o ten fragment skryptu? MEMORY { rom (rx): org = 0x08000000, len = 128k ram (rwx): org = 0x20000000, len = 20k } Problem rozwiązany. Wartości powyżej są ok, tylko podałem złą ścieżkę w ustawieniach projektu. Tamta była nakierowana na plik linkera z ustawieniami 32k ROM i 4k RAM. Dziękuje za pomoc.
A jeśli chciałbym mój program wgrać do RAM to musiałbym w tym Twoim skrypcie linkera dla sekcji np .text zamiast > rom AT > rom wpisać > ram AT > ram czy wewnątrz {} tez trzeba coś zmieniać? Jeśli wystarczy Ci, że program będzie działał jedynie przez debugger, to wystarczy ta pierwsza opcja. Jeśli byś chciał, żeby program normalnie działał z RAM, to...
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!!
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...
kod nie wygląda źle, ale... usunąłeś inicjalizację Serial a pozostały wywołania metod obiektu Serial. pousuwaj wszystko to może przez to. Poza tym dokładnie przyjrzyj się połączeniom do i2c aby nie kolidowały z innymi we/wy Dodano po 36 po 20 sekundach lub naciśnięciu jakiegokolwiek klawisza program to trafiłem... Serial.printf został w kodzie a i wypierdziel...
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
Hej, na 'dzień dobry' : eclipse linaro syscalls od Freddiego linker skrypt -od Freddiego, zmodyfikowany lekko pod c8: __main_stack_size = 2048; __process_stack_size = 2048; rom (rx): org = 0x08000000, len = 64k ram (rwx): org = 0x20000000, len = 20k Makefile -od Freddiego (niewielkie poprawki) teraz kod: INFO("NOT ABLE TO ADD ANOTHER MESSAGE -MALLOC...
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...
Co trzeba w nim zmienić poza wpisaniem rozmiaru ram i flash ( flash - 512K; ram - 64K ) w skrypcie linkera aby uruchomić go na STM32F103ZE. Prawdopodobnie nic. Sprawdź jedynie czy tablica wektorów przerwań jest taka sama w obu modelach.
Pokaż te zmienne w kodzie oraz skrypt linkera.
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...
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...
Przecież ten układ nie ma FPU, więc flagi kompilacji są zupełnie bezsensowne... Wystarczy samo -mcpu, -march jest zbędne. Flaga "-nodefaultlibs" dla linkera też jest dziwnym pomysłem, biorąc pod uwagę fakt, że w tych "default libs" jest pewnie nawet dzielenie liczb całkowitych.
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
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
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...
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!!
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)....
Było problemem, ale akurat dlatego, że autor się uparł jak osioł, że wina leży w linkerze/startupie i tak tam naprawiał, że aż zepsuł :) Ja na skrypcie linkera i startupie Freddiego odpaliłem usb bez problemu. Jedyna modyfikacja to rozmiar stosu bo standardowo jest za mały.
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",...
linker stm32 stm32 skrypt linker linker error
wózek curtis suszarka bęben ciężko silnik vivaro
mikrokomputer cobra1 elektrolux suszarka
Volvo S60 II - Niedziałające sterowanie szyby i fotela Peugeot 307: Opis pinów modułu podnoszenia szyby kierowcy