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...
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!!
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.
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)...
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!!
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...
Tylko w tablicy wektorów musisz poprawki wprowadzić. Skrypt linkera nie ma tu znaczenia. 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.
Pokaż Twój makefile i skrypt linkera
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...
To zależy od środowiska, którego używasz - w dialogu ustawień projektu, załadka linker, albo w pliku definicji pamięci dla 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.
Tak, dokładnie o to chodziło.
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).
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!!
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...
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.
A ustawiłeś sobie rozmiar stosu dla przerwań (w pliku linkera)? 4\/3!!
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
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...
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.*...
Jaki masz skrypt linkera, syscallsy i rozbiegówkę?
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...
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ć...
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)...
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?
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 :...
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ź.
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...
Ś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...
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!!
(...) ustawiłem wektor przerwań i początku pamięci flash w linkerze z odpowiednim offsetem (0x3800) Co to za magiczny offset? :D
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...
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]...
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.
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...
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...
Jak znaleźć skrypt linkera? Jakie ma rozszerzenie? makefile chyba nie ma.
A kiedy będzie projekcik dla STM32F107 ;) ? A tak na poważnie to czy aby dostosować projekt przeznaczony dla STM32F103RB do konkretnego STM32 to wystarczy w pliku linkera poprawić wartości pamięci, a w przypadku pliku z wektorami przerwań skorygować nazwy przerwań i dostosować to występujących dla danego mikrokontrolera ?
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
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.
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...
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ś...
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...
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...
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...
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",...
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_...
To trzeba w linkerze dopisać jeszcze jedną pamięć ?
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"?
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...
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 :)
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...
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...
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!!
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,
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
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
Szukam przykładów programów dla środowiska WinArm na procesory ARM z rdzeniem Cortex-M3 rodziny STM32 firmy ST Microelectronics. Głównie chodzi mi o skrypt linkera, makefile i plik startowy.
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)...
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...
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!!
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))...
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?
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. :)
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, 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...
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
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.
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...
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ś...
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...
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ś.
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;
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...
Kolego Gib. W jaki sposób udało Ci się skompilować i zlinkować to demo? Mam na myśli \uCOSII2.91\uCOSII2.91+UCGUI3.90A(FSMC)\... Demonstracyjna wersja Keil ma ograniczenie linkera na wielkość kodu wynikowego.
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
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?
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.
Najpewniej nie linkuje ci biblioteki math. Trzeba dodać do opcji linkera w ustawieniach projektu opcję -lm jeżeli korzystasz z kompilatora na bazie gcc (jeżeli dobrze pamiętam to TrueStudio jest oparte o gcc).
W tym kawałku skryptu linkera masz rozmiar stosu dla przerwań ustawiony na 0, a przecież FreeRTOS je wykorzystuje. 4\/3!!
Startup bez zmian. Skrypt linkera - zmienić rozmiar pamieci. Tablica wektorów - poniżej. 4\/3!!
Pytanie czy platforma arduino pozwala na tego typu modyfikacje? To jest kwestia wyboru IDE. Jeżeli np. zostanie użyte PlatformIO do budowy projektu z STM32, to jest możliwość modyfikowania i pisania własnych skryptów linkera. Niezależnie od tego, czy w tym projekcie zostanie użyte Arduino HAL, czy też nie. https://docs.platformio.org/en/latest/pr...
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...
Jak go rozwiązałeś? W pliku startup wywaliłem 2 rozkazy i wstawiłem tam "siłowe" wpisanie adresu 0x20005000 do SP tuż przed wejściem do funkcji main. Jednocześnie testuję jednak drugi projekt w którym stos ustawiany jest z sugestiami Freediego - zwiększyłem po prostu rozmiar stosu w ustawieniach linkera i przetestuję czy stos nie wejdzie na dane.
Dodanie podstawowego wsparcia dla innych układów jest porównywalne z postawieniem projektu na FreeRTOSie - ot po prostu musisz mieć tablicę wektorów i skonfigurowane rozmiary/adresy pamięci i dokładny typ układu. We FreeRTOSie przecież wsparcie dla STM32 czy dla LPC tak samo nie istnieje - tablicę wektorów, skrypt linkera, startup, Makefile (czy konfigurację...
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...
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...
Rozumiem że mam to ustawić w skrypcie linkera... ale co, gdzie i jak to nie mam pojęcia... w takim razie będę szperał u wuja G w poszukiwaniu odpowiedzi. Otworzyłeś choć ten plik? 4\/3!!
Wpadłem na pomysł jak to "obejść". - w bootloaderze przekierować tablice na RAM; - "skoczyć" pod adres Reset_Handler w aplikacji użytkowej; - podczas inicjalizacji przekopiować adresy wektorów z flash do RAM (sekcja .data); Na razie próbuję: 1. umieścić wektor przerwań w sekcji .data; 2. umieścić startup.S na początku aplikacji użytkowej; Jak ktoś ma...
Witam Rozumiem, że chcesz aby cały kod wynikowy został umieszczony w pamięci RAM. Żeby tego dokonać należy zmienić adres sekcji ROM w skrypcie linkera: "rom (rx): org = 0x08000000, len = 128k" na pamięć RAM(zaczyna się od adresu 0x20000000 dla stm32). Pamięć RAM również należy przesunąć o odpowiedni adres. Jeżeli masz w kodzie przerwania to nie zapomnij...
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...
stm32 skrypt linkera sekcja linkera skrypt linkera
napełnianie kartridży canon opalarka grzeje rezystor objętościowy
traktorek silnik briggs traktorek silnik briggs
Beko HDMC32400TX – migająca dioda kłódki po naprawie zasilacza, blokada panelu, Child Lock Najlepsze małolitrażowe benzynowe auto odporne na korozję – Toyota Yaris, Honda Jazz, Mazda 2