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...
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...
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...
Najprościej wygenerować przez jakieś darmowe środowisko, np.: Atollic TrueSTUDIO. [syntax=asm] /* ****************************************... ** ** File : stm32_flash.ld ** ** Abstract : Linker script for STM32F373C8 Device with ** 64KByte FLASH, 32KByte RAM ** ** Set heap size, stack size and stack location according...
GPIOA->BSRR |= GPIO_BSRR_BS5; To nie źródło problemu ale tak się tego rejestru nie używa. To jest write only rejestr czyli tylko samo przypisanie Zgadza się, dzięki :) Co do głównego problemu, punkt 1. Użyj debugera okazał się bardzo pomocny :) Założyłem, że skopałem coś w Makefile (np. brakuje jakiejś flagi) i podczas debugowania nic ciekawego...
Faktycznie! Jeśli nie przekroczę 4 breakpointów to nic się złego nie dzieje. W kail-u wyświetla się okienko informujące że nie można dodać kolejnego breakpointu (max to 5). Dzięki Freddie! Mam jeszcze jedno pytanie. Chciałem użyć w projekcie kontenerów z biblioteki standardowej C++ (konkretnie vektora i kolejki) jednak gdy program chciał wykonać którąś...
Po pierwsze ta linijka jest bardzo ciekawa: DISCARD : { libc.a ( * ) libm.a ( * ) libgcc.a ( * ) } Ja bym to wywalił od razu, bo to wcale nie usuwa informacji debugowania, tylko CAŁOŚĆ kodu biblioteki, który w tym momencie nie będzie zlinkowany - dzielenie, funkcje matematyczne, dowolne funkcje "standardowe" - aż dziwne że z czymś takim się to kompiluje....
No więc zasadniczo w każdym przypadku (w sensie niezależnie od tego jakiego ARMa masz) musisz zmienić skrypt linkera. Z grubsza wywalasz z niego definicję pamięci rom, a następnie wszystkie sekcje umieszczasz w ram ("... } > ram AT > ram"). Poniżej różnice między skryptem dla rom i dla ram z projektu STM32: >diff -u stm32f103rb_rom.ld stm32f103rb_ram.ld...
W celu uruchomienia kodu z pamięci RAM (aby pamięci FLASH nie nadwyrężać zbytnio..) użyłem skryptu linkera przeznaczonego dla Attolic TrueStudio, ze standardowej paczki firmware dla stm32 discovery. Jednakże po wgraniu programu, nie uruchamia się, w związku z tym pytanie, co trzeba jeszcze ustawić aby uruchomić kod z RAM'u ? poniżej wspomniany skrypt...
A czy uważasz że wszystko jest linkowane? Twoje pytanie sporo sugeruje. Jakoś bylem zafiksowany na to, że w ten sposób dołączany kod musi być "wrzucony" w całości, ale cóż błądzenie to rzecz ludzka, sporo wody jeszcze upłynie zanim takie mechanizmy będą dla mnie zrozumiałe :) Cały czas mam przed oczami ten goły kod, który do STM32F103VCTx się nie mieścił,...
Widzę że dosyć cich. dorzucam jeszcze skrypt linkera i startup. nawet mam brakepointa w void Reset_Handler(void) i w niego nie wchodzi. ale na brakepointa w Default_Handler reaguje. Zanaczam że jak wgram program na mikrokontlorer to działa bez zarzutu... [syntax=c]/* Procedura startowa dla STM32 connectivity line devices */ /* NastÄ™pujÄ…ce...
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)...
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...
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_...
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...
Witam można to zrobić tak? Dwa projekty w jednym boot w drugim program wykonywalny. 1. projekt z bootem rom (rx) : org = 0x08000000, len = 16k // akurat 16k ma sektor// linker w tym projekcie mam tylko dwie opcje : - konfiguracja zegara+ czytanie programu np przez spi + zapis do flash - lub skok do adresu 0x08004000 2 projekt z programem. rom (rx) :...
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...
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.
Open On-Chip Debugger 0.10.0 Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'. Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD...
Zrobiłem 1-szy projekt z plikami .S i .ld "nie-od-Freddiego" z automatycznym makefilem (generowanym przez gnuarm plugin). Startupa wziąłem tego dołączonego do biblioteki, a w sieci znalazłem do niego skrypt linkera. Mogę tu zarzucić, jeśli kogoś interesuje. No i już nikomu nie jestem potrzebny [; 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!!
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...
Witam, nigdy nie kombinowałem ze skryptami linkera ale tym razem zaszła taka potrzeba więc zwracam się z poradą do Was. Moim celem jest odseparowanie pewnej pamięci FLASH tak abym mógł sobie tam coś zapisywać bez utraty danych po odłączeniu zasilania. narzazie zrobiłem co takiego: w pliku stm32_flash.ld zmodyfikowalem : MEMORY { FLASH (rx)...
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...
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...
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.
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...
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...
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...
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]...
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:...
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ń...
Co masz na myśli mówiąc o Linkerach i skryptach oraz "dziergniu"? Sam sposób tworzenia konfiguracji projektu i skryptów linker'a jest odmienny, niż ten stosowany w pozostałych toolchainach. Będziesz musiał zagłębić się w dokumentację zamkniętego, komercyjnego Keil'a, która nie udzieli ci odpowiedzi na wszystkie pytania (bo jest "zamknięta"). Tutaj...
malloc rezerwuje bloki pamięci na stercie poprzez _sbrk_r() z syscalls.c. Sprawdź czy sbrk zgrywa się ze skryptem linkera.
No ale ja przecież mówię, że poznać można, warto itd., ale nie w pierwszym kroku z nowym układem, a nawet nie w drugim... Równie dobrze można przeformułować Twoje pytanie i spytać ilu początkujących się zniechęciło, bo z racji braku dobrych i uniwersalnych przykładów (a nie gotowców) musieliby poznawać zawiłości startupów, skryptów linkera itd., zamiast...
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...
Ja nie wiem co wy za historię tu opowiadacie. W ARMie stałe stringi i stałe tablice są we flash, chyba że ktoś używa totalnie skopanego skryptu linkera (co jest całkiem możliwe, biorąc pod uwagę to co dostarcza ST). Wrzuciłem te dwa stringi (wg mojej składni) do pierwszego projektu jaki mi się akurat nawinął pod rękę, jako dwie zmienne globalne w main.cpp....
/* Linker subscript for STM32F103 definitions with 128K Flash and 20K RAM Copyright RAISONANCE 2007 !!! This file is automatically generated by RIDE !!! Do not modify it, as it will be erased at every link. You can use, copy and distribute this file freely, but without any waranty. */ /* Memory Spaces Definitions */ MEMORY { RAM (xrw)...
Zamiast tworzyć sekcję poprzez makefile, stwórz ją normalnie w skrypcie linkera tak samo jak jest stworzona sekcja .text. Ewentualnie (jeśli koniecznie potrzebujesz mieć ją w konkretnym miejscu), to dodaj nowy region pamięci (tam gdzie zadeklarowany jest ram i rom), a swoją sekcję umieść właśnie tam. Problemem może też być to, że kompilator (a w zasadzie...
Zajrzyj do skryptu linkera, zobacz jaki jest rozmiar stosu. 4\/3!!
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. :)
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)....
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...
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.*...
Tylko w tablicy wektorów musisz poprawki wprowadzić. Skrypt linkera nie ma tu znaczenia. 4\/3!!
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",...
Przecież nie ma znaczenia czym odpalisz ten toolchain, możesz nawet z netbeansa, nie wiem tylko jak z konfiguracją debuggera w nim. Poza tym Ty masz swoją firmę więc możesz sobie pozwolić na środowisko za xxx, które instalujesz i nie obchodzi Cię makefile, skrypty linkera, rozbiegówki, tylko dajesz nowy projekt i nadupczasz w C :P Ludzie klepiący w...
Witam, poczytałem sporo informacji nt. skryptów linkera, ale niestety jednej rzeczy nie mogę zrozumieć. Mam przykładowy zapis (sam napisałem): [syntax=c] .text : { . = ALIGN(4); __text_start__ = .; /* zmienna zawierająca początek sekcji text */ *(.text) /* kod wykonywalny aplikacji */ *(.text.*) *(.rodata) /* dane tylko do odczytu przechowujemy we flashu...
Startup bez zmian. Skrypt linkera - zmienić rozmiar pamieci. Tablica wektorów - poniżej. 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...
stm32 linker linker stm32 stm32 skrypt linkera
monta radia samochodowego naprawiać daewoo lanos lampka philips pilot
skuter czujnik temperatury obroty
Brak świateł mijania – diagnostyka, bezpieczniki, przekaźnik, żarówki, LED, BCM Schemat podłączenia adaptera D2B Mercedes ML W163 COMAND 2.0 – emulacja zmieniarki, retention wzmacniacza