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...
Zajrzyj do skryptu linkera, zobacz jaki jest rozmiar stosu. 4\/3!!
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.
Pokaż startup i skrypt linkera.
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!!
Panujesz nad stosem w skrypcie 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...
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...
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...
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).
Ś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...
Jaki masz skrypt linkera, syscallsy i rozbiegówkę?
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.*...
Trudno będzie darować sobie rozwiązanie ze skryptu Cube'a, skoro właśnie tego skryptu dotyczy pytanie Autora wątku ;)
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!!
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
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?
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ź.
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_...
Jak znaleźć skrypt linkera? Jakie ma rozszerzenie? makefile chyba nie ma.
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...
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...
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!!
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...
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ś...
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...
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.
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...
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]...
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!!
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)...
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
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...
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.
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",...
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ś...
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",...
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...
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;
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...
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.
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))...
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ś...
W tym kawałku skryptu linkera masz rozmiar stosu dla przerwań ustawiony na 0, a przecież FreeRTOS je wykorzystuje. 4\/3!!
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...
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!!
Większość bonusów ma związek z wyjątkami C++. Kilka elementów ma zapewnić wysoką uniwersalność, teoretycznie mogłoby ich tam nie być (chodzi o glue_7 - z tego co pamiętam są tam fragmenty kodu odpowiedzialne za przejście z ARM->THUMB w ARM7). Adres początku pamięci podany w tamtym skrypcie to pytanie do autorów tamtego kodu. 4\/3!!
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...
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...
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...
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...
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...
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ś.
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. :)
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...
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...
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.
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...
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...
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...
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...
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ę...
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...
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,...
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 :/...
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!!
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...
Startup bez zmian. Skrypt linkera - zmienić rozmiar pamieci. Tablica wektorów - poniżej. 4\/3!!
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 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...
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...
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).
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...
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...
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...
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...
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,...
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...
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)....
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...
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...
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...
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...
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ę...
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!!
Symbole "początek X" i "koniec X" w moim skrypcie nazywają się inaczej niż tego oczekuje "ich" startup. Zmień "ich" _ebss na "moje" __bss_end itd. w startupie albo "moje" na "ich" w skrypcie linkera. Możesz nawet do skryptu linkera dopisac na końcu kilka linijek typu PROVIDE(_sidata = __data_init_start); ("remapując" moje symbole na ich nazwy) i wtedy...
Jak to zrealizować, może jakiś mały przykładzik... Przykład-szablon dla STM32F4 z włączonym wszystkim co trzeba jest na mojej stronie (pewnie już od 3 lat) - jak dasz w nim obliczenia które są wspierane przez koprocesor (+, -, *, /, pierwiastek, ...) to zostaną one przeprowadzone przez koprocesor przy użyciu stosownych instrukcji. Użycie bardziej skomplikowanych...
STM32 zamieniłem na LPC1754. Od kilku dni testuje urządzenie i GPS z tym procesorem działa prawidłowo, startuje z czasami opisanymi w dokumentacji i nawet w mieszkaniu z daleka od okna łapie 7 satelitów. Firma ST potwierdziła zgłoszenie problemu, ale jak na razie nie podała żadnej konkretnej odpowiedzi. Tak jak pisałem wcześniej jeśli będę coś wiedzieć...
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...
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.
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...
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ń...
1. Datasheet w STM32 to nie to samo co datasheet dla AtMegi (jeśli się akurat nimi interesowałeś wcześniej). Potrzebny Ci reference manual dla STM32 - ze strony ST oczywiście. 2. Te trzy kroki o których piszesz wystarczą, ale pod warunkiem, że masz sprawny startup, tablicę wektorów, skrypt linkera oraz poprawnie kompilujesz całość. 3. Odpowiedzią wciąż...
skrypt linkera stm32 linkera skrypt linkera zewnętrzny
zewrzeć matryca samsung schemat wycieraczki asynchroniczny licznik modulo
teltonika konfiguracja sprzedam tp118
Układ paliwowy Audi A4 B5 1.8T - komponenty i działanie Co to jest moc głośników w sinusie (RMS)?