malloc rezerwuje bloki pamięci na stercie poprzez _sbrk_r() z syscalls.c. Sprawdź czy sbrk zgrywa się ze skryptem 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...
Tylko w tablicy wektorów musisz poprawki wprowadzić. Skrypt linkera nie ma tu znaczenia. 4\/3!!
Zajrzyj do skryptu linkera, zobacz jaki jest rozmiar stosu. 4\/3!!
Te sekcje nie zajmują pamięci, bo w finalnym "obrazie" ich po prostu nie ma (; Nawet gdyby coś tam było, to --gc-sections i tak usunie te sekcje, bo przecież kod w żaden sposób się do nich nie odnosi, więc z punktu widzenia optymalizacji cokolwiek w nich jest, jest "dead". 4\/3!!
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...
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...
Sprawdź 65. linię kodu - tam zapewne masz błąd. Może to być też problem 7 linii skryptu linkera.
Pokaż startup i skrypt linkera.
Pokaż Twój makefile i skrypt linkera
Panujesz nad stosem w skrypcie 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.*...
Ś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...
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...
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?
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...
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!!
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).
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...
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...
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 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.
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!!
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)...
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"?
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...
Jak znaleźć skrypt linkera? Jakie ma rozszerzenie? makefile chyba nie ma.
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
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ś...
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!!
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
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!!
Chętnie obadam tego tupa. Jeśli możesz to wrzuć tutaj albo na swoją stronkę jakiś szablon projektu. Co do Cmake to jest to rzeczywiście kobyła i ciężko to na początku ogarnąć. Korzystałem z różnych przykładów: https://github.com/ObKo/stm32-cmake https://github.com/adrienbailly/STM32-CM... Oczywiście trzeba też ogarniać dokumentację, która...
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",...
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!
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.
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ś...
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;
Przykładowe projekty dla procesorów NXP LPC2103 i ST STM32F103RB umieszczone na mojej stronie w dziale Download > ARM > Przykłady , doczekały się nowej wersji. Zmiany wprowadzone do przykładów dotyczą głównie tych elementów, o istnieniu których łatwo zapomnieć - tablicy wektorów, skryptu linkera , pliku Makefile , pliku startup . Lista najważniejszych...
chce go uruchomić na tym: http://allegro.pl/stm32-plytka-prototypo... Kodu w sumie zadnego nie spłodziłem. W przykładzie choppina zakomentowałem jedynie samą zawartość pętli while by nie mrugała diodami. | Yagarto w sumie działało to co miało działać. Kod w całości debugował się. była praca krokowa itp. A w tym...
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.
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.
Nie wiem czy gdziekolwiek spisane są jakieś "zasady". Pliki te po prostu muszą robić to co robią obecnie, a jak są napisane to już jest sprawa wtórna - w jednym przypadku są bardziej uniwersalne, w innym mają większe możliwości, w jeszcze innym uwzględniają jakieś dziwne rzeczy itd. Startup ma pozwolić na uruchomienie programu w C, a skrypt linkera...
Cześć, potrzebuję mieć sekcję non-init w RAMie. Z racji tego że się średnio orientuję w skryptach linker, prosze o pomoc. Fragment yaml dla mojego STM32 wygląda tak: [syntax=bash]memories: flash: compatible: - on-chip-flash address: 134217728 size: 1048576 $labels: - flash SRAM: compatible: - on-chip-RAM address: 536870912 size: 131072 $labels: - SRAM...
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...
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...
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ś...
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...
No więc wielkie dzięki dla Freddie Chopin przede wszystkim za cierpliwość. Zastosowałem twój startup i skrypt z tym że nie dodałem skryptu w opcjach i stąd te błędy. Teraz już jest bezbłędnie. Co do optymalizacji to znalazłem odpowiednie flagi w twoim makefile: -ffunction-sections -fdata-sections - dla kompilatora -Wl,--gc-sections - dla linkera i oczywiście...
W tym kawałku skryptu linkera masz rozmiar stosu dla przerwań ustawiony na 0, a przecież FreeRTOS je wykorzystuje. 4\/3!!
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.
Aha okej no więc tak ja chciałem to zrobić przez uVision prze JTAG i ten skrypt linkera wygląda tak: ; ****************************************... ; *** Scatter-Loading Description File generated by uVision *** ; ****************************************... LR_IROM1 0x08000000 0x00020000 { ; load region size_region...
Masz jakoś zdefiniowany rozmiar stosu dla przerwań? Jeśli korzystasz z mojego skryptu linkera, to w pliku tym musisz sobie zdefiniować jaki jest rozmiar stosu, bo bez tego przerwania się sypią. 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...
Problem jest szerszy niż skrypty startowe, z nimi było akurat wszystko w porządku, konkretu żadnego Ci więc nie rzucę. Próbowałem uruchomić freertos-a, ale ciężko było to ruszyć z braku przykładu który pasowałby akurat do mojego środowiska a nie potrafiłem sobie poradzić z konfiguracją, tak samo w przypadku frameworka stm32. To de facto spowodowało...
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))...
ENTRY(Reset_handler), czy przez start = Reset_handler, według cytowanego opisu to wyjdzie na to samo :-/ No nie do końca :) Używając ENTRY(Reset_Handler) w praktyce nie ustawiasz niczego - jedynie informacje w pliku ELF, która to informacja jest w naszym przypadku ignorowana, bo ani binutils-y, ani programatory/debugerry które znam (np oprogramowanie...
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...
Nie zgadzam się ;) Pisałem kiedyś coś na AVRa, w C ale było to dawno, małoskomplikowanie i dodatkowo napisałem ostatnio w C soft do detekcji kolorów na STM32 (na przetworniku TCS3200D) opierałem się na templacie Freddiego (skrypty linkera oraz makefile (bez używania libów)) więc "nie zaglądałem głęboko pod maskę" i myślę, że w końcu powinienem - więc...
Witam, Chciałem przerobić skrypt linkera i startup.s z projektu Freddiego Chopina stm32_blink_led na kopiowanie i uruchamianie aplikacji z pamięci RAM. Dodałem do sekcji .text analogiczne wpisy jak w sekcji .data udostępniające zmienne __text_init_start, __text_start oraz __text_end. .text : { . = ALIGN(4); __text_init_start = LOADADDR...
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...
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ś.
Piszę aplikację na STM32F103 i muszę umieścić niektóre skompiowane pliki pod konkretnym adresem we Flash (a właściwie od konkretnego adresu). Uzywam środowiska Ride7 i kompilatora GCC Wiem, że można to zrobić w pliku skryptu linkera ale za nic nie udaje mi się tego wykonać. Do tej pory nie miałem takiego problemu z innymi kompilatorami. Szukałem jak...
Jak się właśnie dowiedziałem w drugim moim temacie, że też tym sposobem można wgrać do flash, ale jak to zrobić aby te dane znajdowały się w drugiej połowie 128kB flash i zaczynały się dokładnie od początku drugiego 64kB?. Umieść je w oddzielnej sekcji, a następnie przekaż w wywołaniu linkera adres początkowy tej sekcji. Alternatywą, jest utworzenie...
Mimo to nie pozwoliło to na kompilację (czerwony napis "BUILD FAILED"). Zapewne projekt nie został poprawnie skomponowany (CMSIS, startup, ścieżki, skrypt linkera, itd.). Dlaczego piszesz w CooCox i bibliotekach SPL? Całkiem możliwe, że prowadzący zajęcia niestety nic innego nie zna.
Tyle razy edytowałem ten post, że coś zgubiłem. Przede wszystkim próbuję uruchomić ... Error: No flash at address 0x08000000 Error: No flash at address 0x080003a7 Error: No flash at address 0x080003ae Error: No flash at address 0x080003d0 Error: No flash at address 0x080004b0 ... Od wczoraj nie mogę znaleźć jakiś konkretnych opisów...
Witam Może używasz innego skryptu linkera lub StarUp dla Keil i Ecpilse. W main.c masz dwa vTickTask1 i vTickTask2. Zobacz czy to ci działa (cały Setup procesora dałem od kolegi Freddie Chopin) + Rtos611 (ostatni ze strony).
A no dobra, sorry - to jest inny problem. Najszybciej będzie, jak w pliku Makefile wyłączysz generowanie pliku .bin. Rozwiązanie 100% poprawne to dodanie czegoś do skryptu linkera do sekcji w SDRAM, żeby nie pakował ich do obrazu binarnego, ale chwilowo nie jestem 100% pewny co dokładnie [; Chyba (NOLOAD) (do _WSZYSTKICH_ sekcji w pamięci SDRAM), ale...
Nie jest to żadna "druga" partia po 4kB... Spróbuj zrozumieć jak działa ten mechanizm a nie szukaj w nim dziury. malloc() wewnętrznie ma swój "pool" pamięci do przydziału, który domyślnie jest pusty. Jeśli prosisz o alokację i malloc() w swoim poolu nie ma wystarczającej ilości (lub odpowiedniego "układu") pamięci aby spełnić to żądanie, to prosi funkcję...
Zasiadłem dzisiaj do mojej niebieskiej płytki i udało mi się wgrać bootloader od (at)piotrgo a przy jego użyciu własnego blinka. Jakby ktoś tu kiedyś trafił, albo ja sam potrzebowałbym przypominajki to: bootloader wgrywa się przy pomocy: rom (rx) : ORIGIN = 0x08001000, LENGTH = 60K , a następnie wskazać w platformio.ini [syntax=json] board_build.ldscript...
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...
W zależności czego użyjesz... Możesz własnoręcznie wstawić adres końca RAM do vector table dla przykładu w tym artykule tak zrobiłem: https://www.elektroda.pl/rtvforum/topic3... Oczywiście mogłem opisać w skrypcie linkera END_RAM i wrzucić taką zmienną zamiast adresu, co by było nawet bardziej poprawne.
(at)margas60 Ponawiam pytanie, czemu STM? Da się nadal kupić stare AVRy, da się nowe, są Arduina na mniejszych i większych AVRkach. Chcesz się nauczyć STMa? Bo argument z początku tematu o tym że wyzionie ducha i koniec świata jakoś do mnie nie trafia. Bawiłeś się jakimś Arduinem? Co do STMów możesz na to pisać używając HAL - hardware abstraction layer...
No ale przecież nie masz skryptu linkera - bez tego to po prostu nie ma prawa działać... A ta wtyczka z której korzystasz kompiluje pliki assemblera tylko jeśli mają rozszerzenie .S, a nie .s. Zestaw porad jest taki: http://www.elektroda.pl/rtvforum/topic13... http://www.elektroda.pl/rtvforum/topic13... Weź przykładowy projekt dla STM32,...
Myślałem żeby załaczyć Ci mój projekt ale - 1. jest komercyjny 2. jest zbyt myślę złożony Tak że na szybko sama idea - jest to zrobione w 5 minut i skrypt linkera powinno sie przerobic lepiej. Funkcje też są do kitu - bo parametry trzeba przekazywać wskaznikiem do nich) wtedy nie jesteś ograniczony ich ilościa itd itd. Nie jest to reentrant i bezpieczne....
Witam Zdefiniowałem sobie następującą tablicę wskaźników na teksty: [syntax=c] const uint8_t *Tab[3] = { (uint8_t*)("Menu1"), (uint8_t*)("Menu2"), (uint8_t*)("Menu3") }; [/syntax] Mój problem polega na tym, że nie potrafię spowodować aby zarówno tablica Tab jak i napisy: Menu1, Menu2 i Menu3 umieszczone zostały przez linker w pamięci FLASH (sekcji .rodata)....
W emulowanym EEPROMie najwygodniejszą opcją jest przechowywanie danych o stałym rozmiarze, który przy okazji w jakiś sensowny sposób pozwala wykorzystać rozmiar strony. Jeśli możesz się ograniczyć tak że KAŻDY wpis ma ten sam rozmiar, to emulowany EEPROM jest opcją. Choć wiele zależy od tego jaki dokładnie STM32 - w niektórych (np. STM32F4) najmniejszy...
Freddie Chopin korzystam z twojego startup'a oraz skryptu linkera W przykładach jest chyba więcej plików - np. Makefile, którego można albo użyć bezpośrednio, albo choć zobaczyć jakie tam są opcje i założyć że są do czegoś potrzebne. 4\/3!!
Zaczynam się zastanawiać czy odpowiednio zmodyfikowałem skrypt linkera z przykładu (stm32f103xB) bo te cuda które się dzieją wskazują raczej na problemy ze stosem. Objawem problemów ze stosem są "losowe" zawieszenia programu lub tzw. "pójście w maliny". To że jakaś funkcja nie działa raczej nie ma nic wspólnego ze stosem... Modyfikacje skryptu linkera...
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]...
No to po kolei. 1. Wszystko co jest związane z tym drugim obszarem RAMu przenieś na sam koniec skryptu linkera (za stackarea). 2. Sekcja od Twojej dodatkowej pamięci powinna wyglądać mniej więcej tak: .ramII : { . = ALIGN(4); __ram2_init_start = LOADADDR (.ramII); PROVIDE(__ram2_init_start = __ram2_init_start); __ram2_start...
Z kolei modyfikacja skryptu linkera ma tą wadę, że jeśli przeniosę kod na inny MCU to znowu bedę musiał ten skrypt modyfikować. Emulacja oparta na czystm C po prostu zadziała. No... bo każdy mikrokontroler ma dokładnie ten sam rozmiar strony i dokładnie ten sam kontroler pamięci, więc z pewnością zadziała Ci ten kod bez żadnych zmian... Ehe... Kupę,...
Witam! Freddie-jesteś wielki i wszyscy tu to wiedzą. Odwalasz kawał roboty edykacyjnej, porobiłeś przykłady, linkery, skrypty i zestawy-szacun prawdziwy. Sam Ci dziękuję za kilka naprawdę pomocnych postów. Ale... Zwróć uwagę, że powtarzają się sytuacje: W ogóle beznadziejny ten skrypt... Człowiek się męczy starając się zrobić skrypt który jest na prawdę...
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...
Skorzystaj z mojego skryptu linkera - ten który masz jest niewystarczający. W artykule nic nie pisałem o zastępowaniu skryptu linkera innym... Przy okazji: dorzucając FreeRTOS'a do projektu, w makefile'u wystarczy dodać ścieżki do źródeł systemu, czy wymagane są dodatkowe informacje dla kompilatora? Trzeba "przyczepić" 3 funkcje FreeRTOSa do 3 przerwań...
FCh...tak się zastanawiam - w tej chwili mam kompilujący się i działający projekt, w którym z przykładu z F4 wziąłem skrypt linkera, startup i vectors.c. Z tym, że wydaje mi się, że to chyba nie jest do końca dobre podejście, ponieważ przecież vectors.c jest dla F4 a ja działam na F7. Ze swoją wiedzą nie przerobie (chyba) tego vectors.c właściwie :/...
choć wydaje mi się że wskazane obszary pamięci są poprawne (0x80000000 przy BOOT0 ustawionym na 0 powinien wskazywać początek flasha). Co do tego żebym zerknął do noty to nie bardzo rozumiem, jedyne do czego można by się na upartego przyczepić to podciąganie NRST do zasilania, bo jest ono i tak podciągane przez wewnętrzny układ mikrokontrolera, także...
Poza stosem w SRAMie masz jeszcze przynajmniej: - stertę - dynamiczna alokacja (malloc, new) - sekcję data - wszelkie globalne i statyczne zmienne inicjowane jakąś wartością - sekcję bss - jw. ale zerowane przy starcie programu poza tym możesz sobie tworzyć własne sekcje, latać wskaźnikiem po pamięci i cokolwiek Ci przyjdzie do głowy. Alokowanie dużej...
Przyznam się, że jeszcze nie do końca się orientuję w tablicach wektorów i skryptach linkera. Zwyczajnie nigdy nie miałem potrzeby do tego zaglądać wcześniej. Wszystko co mam praktycznie bez zmian pochodzi z dema FreeRTOS dla płytki Premier. Ktoś to demo wpakował pod Eclipse. Miało być szybciej ale jak na razie tylko problemy z nim mam. W jakimś innym...
Cześć, Projekt zaraz będę konfigurował od początku. Fakt, podałem za mało danych, wybaczcie, skrajna nerwica mnie na to wzięła. Od początku: Używam SW4STM32, ale chciałbym od tego odejść mocno, bo za dużo automatów i za mało szczegółów, może dlatego, że nie potrafię tego wszystkiego ogarnąć. Kompilatora używałem poprzez naciśnięcie "build". W ustawieniach...
CMSIS Core - to tylko startup i system i bodajże core_cm3 + skrypt linkera. Zaś ty korzystasz z pełnego CMSIS i to jego deklaracji brak. Rozwiń tą gałąź "Device"... Definicje są (dodałeś sam pewnie), bo ci przechodzi kompilacja. Błąd jest w momencie linkowania.
Praktycznie 100% plików z STM32 będzie kompatybilnych z innymi Cortex'ami. Rzeczy do zmiany: 1. wektory przerwań (to oczywiste [; ) 2. rozmiar i adresy pamięci w skrypcie linkera 3. opcję CORE w pliku Makefile przy Cortex-M0. Jak zwykle więc - http://www.elektroda.pl/rtvforum/topic13... 4\/3!!
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...
Możesz zerknąć na moją stronę, w dziale Download zamieściłem przykład migania diodką dla STM32. Ponieważ Cortex to Cortex, to masz tam gotowy Makefile, startup. Jedynie niewielkie zmiany będą potrzebne dla skryptu linkera (adresy i rozmiary). Duża część kodu również będzie raczej zbliżona. Anyway - pytanie które postawiłeś jest wysoce niekonkretne,...
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...
Witam. Aktualnie walczę z kompilatorem GCC non-eabi. Chcę utwożyć projekt w C++ używając własnego skryptu linkera, jednak po długiej walce nie mam już pomysłu na rozwiązanie. W jaki sposób skonfigurować kompilator, linkera oraz skrypt linkera tak abym mógł własne tablice zdefiniowane w plikach .cpp wstawić w wybrane prze zemnie miejsce w pamięci? Wersja:...
Witam, Korzystając z makefile of projektu FreddiegoChoppina z STM32 blink... po drobnych modyfikacja flagi kompilacji na m4 oraz ścieżki dostępu do pliku linkera konsola wyrzuca mi taką informację: [syntax=actionscript] **** Build of configuration Default for project bob **** cs-make all Linking target: out/bob.elf arm-none-eabi-g++ -mcpu=cortex-m4...
stm32 linker linker stm32 stm32 skrypt linkera
termik silnika wgranie języka polskiego zwłoczny bezpiecznik szybki
schematics diagram schematics diagram
Czarny pasek po prawej stronie ekranu - przyczyny i rozwiązania Sterownik Immergas nie pokazuje dni do przeglądu - przyczyny i rozwiązania