(już czuje jaki zaraz podniesie się larum...) A ja polecam to co już zainstalowałeś czyli open stm. Generuj sobie projekty w cubeMx. po zaimportowaniu projektu po prostu wywal to co Cie nie interesuje (czyli np HAL - a jest to jeden katalog i jeden symbol z konfiguracji. A masz automatycznie utworzony makefile, skrypt linkera, wszystkie zależności,...
Linker nie tylko może żonglować zmiennymi, ale wręcz musi to robić. Dopiero na etapie linkowania zmienna uzyskuje konkretny adres, wcześniej to tylko symbol. Twoje rozwiązane jest ryzykowne, ryzyko to jest zależne od tego jak jest skonstruowany makefile. tadzik85 słusznie pisze, żeby przeusnąć data. Nie trrzeba w tym celu ingerować w skrypty linkera,...
A gdzie jest kod, startup i skrypt linkera no i jeszcze makefile?
Chodzi o to, że do vectora przerwań trafia wartość SP wynikająca z linkera, a w startupie wprost ustawiany jest RAM_END, Ja tam nie widzę w ResetHandler operacji z adresem stosu. Symbol _estack jest ustawiany w skrypcie linkera ale faktycznie na sztywno na koniec RAM. (CubeMx firmware dla F1). Ja za to mam pytanie do Freddiego: Mam tu taki przykładowy...
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]...
Jakbym cos takiego robil to wydaje mi sie ze mozna cos takiego osiagnac bez dodatkowej sekcji w skrypcie linkera. Adress crc wyliczylbym na podstawie symboli zdefiniowanych ze skrypcie linkera. A crc dokleilbym do pliku *.bin po skonczonej kompilacji za pomoca komendy: [syntax=bash] echo $(crc32 out.bin) | xxd -r -p >> out.bin [/syntax] Edit: poprawilem...
Tylko po co komu te wektory przerwań w RAM? Przecież mogą być spokojnie we flash... Do wykonywania skoków pod adres z rejestru służy instrukcja "bx ...", a nie "mov pc, ...". Przy okazji zawsze ciekawił mnie ten styl pisania 100x "asm volatile(...)" - pomiędzy tymi wywołaniami kompilator może sobie wstawić co mu się podoba, np. wpisać do rejestru r0...
(at)miszcz310 A masz jakiś specjalny powód aby używać "na żywca" gdb zamiast po prostu użyć jakiegoś IDE gdzie po prostu to się wyświetli w dużo wygodniejszej formie. -g3 zawiera wszystkie niezbędne informacje. Dlaczego nie możesz wyświetlić to już jest inna sprawa. Jest to bardzo ciężko "debugowalne" bez dostępu do Twojego komputera. Myślisz, że debugger...
Teraz mam takie pytania: jak/gdzie ustawić wskaźnik stosu na właściwa aplikację? jak/gdzie przed skokiem do aplikacji użytkownika przestawić offset tablicy wektórów tak aby był właściwy dla aplikacji? Co jeszcze powinienem zrobić? Ja to robiłem np. tak [syntax=C]/// beginning of flash block for firmware extern const uint32_t __firmware_start[]; ......
Domyślam się że jest to kod startowy - stos, wektory przerwań. Ale nie potrafię go zlokalizować. Nie wiem jak się nazywa. Jest to kod domyślnie tworzony przez kompilator w sekcjach startowych: .init0-9, .vectors, .fini9-0 Jego zawartość możesz podejrzeć w plikach .lss oraz .map. Ich edycja niczego jednak nie zmieni. Chcąc coś umieścić w tych sekcjach...
Witam W nowym linaro odblokowana jest opcja -flto (link time optimization), chciałem wypróbować jak to działa, no i właśnie projekt się nie kompiluje :( bez lto oczywiście działa. Błędy to NMI_Handler' referenced in section `.isr_vector' of out/startup_stm32f40xx.o: defined in discarded section `.text' of out/stm32f4xx_it.o (symbol from plugin) dla...
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...
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 :...
Kompilator zgłasza ci warning: "warning: cannot find entry symbol Reset_Handler; defaulting to 08000000 " Błąd może wynikać z kilku rzeczy: - nie kompilujesz rozbiegówki i wektorów przerwań (opcja linkera --gc-sections wyrzuca wszystkie nieużywane funkcje) - nie masz w skrypcie linkera słowa kluczowego KEEP dla sekcji wektorow przerwan /* for Cortex...
Użyj takiej komendy w skrypcie linkera: .data : { . = ALIGN(4); _data = .; *(.data) *(.data*) . = ALIGN(4); _edata = .; } >ram AT >rom _load_data = LOADADDR(.data); W ten sposób informujesz linkera, że sekcja .data ma być umieszczona w pamięci RAM, a dane do inicjalizacji zmiennych tej sekcji są w pamięci ROM. Do tego musisz mieć w startupie komendy,...
Czy jest nadzieja, że pojawi się podobny do LPC1117 projekt dotyczący LPC1759 ? Próbuje zgodnie z helpem w CMSIS NXP stworzyć make i skrypt linkera, ale Eclipse uparcie wyrzuca dwa errory: cs-make: *** [out/test_lpc1759.elf] Error 1 test_lpc1759 C/C++ Problem undefined symbol `__cs3_interrupt_vector_cortex_m' referenced in expression ldscript_rom_gnu.ld...
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...
Kompilator widzi tyle ile ma określone w skrypcie linkera. Symbole __heap_start i _end definiują położenie sterty, nie ma to nic wspólnego z wielkością pamięci SRAM. Przykłady konfiguracji SRAM masz w przykładach z mojej książki (do pobrania za darmo z Helionu). Może ci wystarczą do rozgryzienia jak to działa.
Jestem w błędzie ? Tak, bo do samej kompilacji to Ci jeszcze potrzebne kilka plików - startup, skrypt linkera, tablica przerwań - zakładam tutaj, że sprawę Makefile załatwia Netbeans. Standardowo więc poradzę to co zawsze - ściągnij z mojej strony przykład dla stm32f4 i zobacz jak to jest tam zrobione pod "lepszym" IDE (; http://www.elektroda.pl/rtvforum/topic13...
Dobra, to ja się podczepię: odpaliłem w końcu semihosting, natomiast nie bardzo wiem, co zrobić ze skryptem linkera - bo nie do końca łapię pewne rzeczy: /* Linker script to place sections and symbol values. Should be used together * with other linker script that defines memory regions FLASH and RAM. * It references following symbols, which must be...
(at)ucy74 Brakuje Ci symboli, które powinny być w skrypcie linkera. Powinieneś je zdefiniować w swoim skrypcie linkera. Za przykład weź sobie skrypt linkera z przykładów FCh. . = ALIGN(4); __heap_start = .; PROVIDE(__heap_start = __heap_start); . = ALIGN(4); __heap_end = __ram_end; PROVIDE(__heap_end = __heap_end); (at)ucy74...
A jak przerobić skrypt od Freddiego aby właśnie w taki sposób przydzielał pamięć? Korzystam z jego przykładów sama podmiana nic nie da bo jest on powiązany np. ze startup.s Tak ja tu. wystarczy umieścić najpierw wszystko w CCRAM. Dodać symbol _main_ram_start i powinno śmigać. Miedzy startupem a linkerem chodzi o jedno. Zgodność symboli definiujących...
Dzięki. Czyli będę musiał od nowa napisać skrypt linkera na podstawie Twojego. U mnie nie ma nigdzie tych symboli. Do tej pory wzorowałem się na skrypcie z Coocoxa. Jednak biorąc pod uwagę jakość ich innych rozwiązań można się było spodziewać problemów.
kod nie chce isę kompilować podajac komunikat undifinied reference itd... Wklej komunikaty i pokaż skrypt linkera (pewnie brak symboli dla _sbrk). w konsoli pokazywało sie ze semihosting enabled Włączony, ale na PC. Może tzreba jeszcze jakąś zworkę połączyć na płytce Nie, jak debug działa to i semihosting powinien.
W skrypcie linkera muszą być zadeklarowane symbole o nazwach jak wyżej wyznaczające obszar pamięci przeznaczony dla sterty (heap). Proponuję ściągnąć projekt dla lpc2103 i przystosować postawowe pliki (startup, Makefile, skrypt linkera, tablica wektorów: lpc2103_rom.ld, Makefile, startup.S, vectors.S, hdr\hdr_cpsr.h) do swojego projektu, a większość...
Witam, mam pytanie odnośnie obsługi sterty w arm'ach, używam gnuarm. Problem polega na tym, że funkcja malloc zwraca wartość 0. Słyszałem, że trzeba napisać własną funkcję caddr_t sbrk(int incr), jednak gdy to zrobię to jest ona dołączano do kodu wynikowego, jednak nigdy nie jest wywoływana, wywoływana jest tylko standardowa _sbrk. Moja mapa pamięci...
Wstęp Poradniki pomagające w tworzeniu oprogramowania na mikrokontrolery skupiają się głównie na wykorzystaniu peryferiów samego mikrokontrolera, co jest zrozumiałe, ale niestety rzadko skncentrują się na części programu, która wykonuje się przed funkcją main. Poniższy poradnik ma na celu przybliżenie tej części programu na podstawie GNU ARM toolchain...
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...
Co trzeba zrobić żeby debugowanie było poprawne? Zwykle debuggowanie aplikacji z bootloaderem jest nieco upierdliwe. Po pierwsze - dla pewności - spytam, czy masz wgrany bootloader i czy mniej-więcej jesteś w stanie stwierdzić, czy takie kombo (bootloader + aplikacja) działają prawidłowo (poza debuggowaniem)? Jeśli tak, to u mnie w Eclipse zwykle nie...
Po pierwsze - jak zapewne łatwo się domyślić - nazwa ta bierze się od nazwy pliku (_binary_<nazwa_pliku>_start), więc po pierwsze wystarczy dobrze nazwać plik i już masz lepszą nazwę. Całość zapewne można zmienić przez skrypt linkera, ale przecież w programie możesz sobie te symbole przypisać do dowolnej zmiennej... Opcja pierwsza w skrypcie linkera:...
OK, chodziło o ten folder. Poszło ładnie:) [syntax=actionscript]**** Build of configuration Default for project mch **** make all System nie moľe odnale«† okre?lonej ?cieľki. ECHO jest wy?Ączone. -------- begin -------- xc32-gcc (Microchip Technology) 4.5.1 MPLAB XC32 v1.00 Build date: Jan 19 2012 Copyright (C) 2010 Free Software Foundation,...
Nie rozumiem oporu (at)tmf aby korzystając z gcc nie wykorzystać narzędzia, które właśnie po to zostało wymyślone - i jest w końcu wykorzystywane przez używany przez niego toolchain Niech sobie korzysta jak chce, tyle, że przy takich drobnych modyfikacjach IMHO prościej zmodyfikować te symbole bezpośrednio, przekazując odpowiednie wywołania do linkera,...
Mógłby ktoś podać link do jakiegoś projektu w Microchip Studio Trzy lata temu pisałem ci, że to nie jest kwestia IDE, lecz konfiguracji linkera. Jeśli chcesz, aby dodatkowa pamięć była alokowalna dla zmiennych globalnych, musisz zmienić skrypt linkera. Jeśli ma byc widoczna dla zmiennych alokowanych na stercie lub stosie to należy tylko zmienić wartości...
Jeśli dobrze rozumiem (nie chciało mi się zbytnio analizować przykładu), to handlery "nie-weak" są w bibliotece .a, zgadza się? Miałem podobny problem z moim RTOSem, tyle że akurat z funkcjami "syscalls" dla newliba. Rozwiązań jest kilka. Pierwsze wspomniane w pierwszym poście (dodatkowa funkcja którą trzeba wywołać, w rzeczywistości wystarczy jakiś...
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...
Obszar .bss podzieliłem na symbole i zmienne globalne (działa w 100% ok): .bss1 (NOLOAD) : { . = ALIGN(4); _sbss = . ; *(.bss .bss.*) . = ALIGN(4); _ebss = . ; } >IRAM0 AT>IRAM0 .bss2 (NOLOAD) : { . = ALIGN(4); *(COMMON) *(.gnu.linkonce.b*) . = ALIGN(4); } >IRAM1 AT>IRAM1 Problemem okazało się przepełnianie się pamięci w obszarze stosu przy zmianie...
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...
Witaj Od jakiegoś czasu uczę się rdzenia cortex-m0 i także używam LPCXpresso. Informacja ile zajmuje stos jest zawarta w tablicy wektorów przerwań pod adresem 0x00000000 (MSP) czyli jest to pierwszy element tablicy oznaczany jako _vStackTop zaraz po nim jest adres skoku do procedury wykonywanej po resecie. Element _vStackTop jest opisany w skrypcie...
Nieco podłamany tematem kol. (at)PiotrLenarczyk postanowilem jednak napisac jednak trzeci krótki prosty mikro poradnik dotyczący startupu. Wszystkie dywagacje będą dotyczyć C i najbardziej popularnego wśród hobbystów i nie tylko gcc. Standard C wymaga aby zgodny (nieco upraszczając) ze standardem toolchain ma: 1. Zapewnić obserwolną zgodność działania...
Z Makefile'a (czy tam opcji kompilacji) wywalić parametr -march - jest zbędny, skoro podajesz -mcpu. Kolejne dwa błędy to niedopasowanie skryptu linkera do kodu (powinny tam być symbole oznaczające koniec i początek różnych typów obszarów pamięci - w tym przypadku .bss. Ostatni to brak definicji funkcji _exit() - jednego z syscalls. Przykład takowej...
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...
Witam po dłuższej nieobecności. Po należytym skonfigurowaniu skryptu linkera, flagi mcpu Build mi wywalił: 17:42:41 **** Build of configuration Debug for project ARM_Proj_Tst_02 **** make all Building file: ../src/main.c Invoking: Cross ARM C Compiler arm-none-eabi-gcc -mcpu=arm7tdmi -march=armv4t -marm -O0 -fmessage-length=0 -fsigned-char...
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...
Witam arus85lbn naspisał: Nie wiem o co dokladnie chodzi, moze musze najpeirw jakos wgrac program do pamięci procka aby rozpocząć debugowanie? To zależy czy debugujesz w ramie czy we flash. Jeśli we flashu to program musi tam być żeby go debagować. Spróbuj najpierw wgrać program do flasha i napisz jakie masz błędy. Twój cytat: JTAG tap: sam7s256.cpu...
1. Po pierwsze nie rozumiem po co Ci position independent code w typ projekcie. 2. Proponuję używać typów o ściśle określonej długości w tym przypadku 32 bity. 3. Nie za bardzo rozumiem po co takie dziwne wygibasy z jakimiś funkcjami. Te symbole które masz w skrypcie linkera nie mają "ciała" są tylko adresami i symbolami. [syntax=c]extern uint32_t __bss_start__,...
Domyślne, nie zmieniałem niczego. Skrypt linkera: [syntax=asm] /* Entry Point */ ENTRY(Reset_Handler) /* Highest address of the user mode stack */ _estack = 0x20004000; /* end of 16K RAM */ /* Generate a link error if heap and stack don't fit into RAM */ _Min_Heap_Size = 0; /* required amount of heap */ _Min_Stack_Size = 0x80; /* required amount of...
Jeśli debuggerem, to po prostu podejrzyj sobie plik .dmp - tam masz te adresy i możesz sobie je analizować debuggerem. Tyle że zerowanie stosów jest tylko w nowych przykładowych projektach. Chyba tylko w przykładzie dla LPC4330 - wystarczy jak weźmiesz stamtąd startup i skrypt linkera, a następnie zastąpisz te pliki które masz teraz to powinno być dobrze...
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...
Co za dużo to nie zdrowo. Znowu wywal te 2 definicje, które dodałeś na końcu. W tym momencie prawdopodobnie programy C powinny Ci chodzić, pozostaje C++. Teraz na tapetę idzie skrypt linkera. Porównaj swój z str912_rom.ld z przykładów z openocd z uwzględnieniem tych niezdefiniowanych symboli. Jutro zajrzę, jak Ci poszło. Albert
Normalnie kiedy tworze nowy projekt wybieram typ "Embedded project" I mam już wtedy wszystkie już wszystkie biblioteki itd zainkludowane. Teoretycznie mogę już w tym momencie pisać normalnie na rejestrach, ale przez to że biblioteki muszą się za każdym razem niepotrzebnie kompilować trwa to dłużej. Czy jest możliwość jakoś wyciągnąć z biblioteki tylko...
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ł,...
Hejka, robię właśnie przesiadkę projektu z kompilatora IAR'a do GCC'a i mam problem z przeniesieniem niektórych ustawień, konkretniej chodzi o nie wycinanie przez linker konkretnych, nieużywanych zmiennych globalnych wygenerowanych przez zewnętrzne narzędzie, zawierających informacje np. o dacie buildu, checksumie itp. które są potem w przypadku reklamacji...
Wszystko jest w najlepszym porządku No właśnie jak to jest z tą komendą "load". W user's guide do wersji 0.2.0 najbliższą nazwą komendą jest load_image fillename address i nic nie ma o komendzie load "load" to komenda GDB, a nie OpenOCD. Pamiętajcie, że wszystkie te komendy kierowane są najpierw do GDB. Jesli jakaś komenda (linijka) poprzedzona jest...
Tak że kompilując gcc lub gcc podobnym kompilatorem jest tak jak opisałem. Nope. Dane const i dane do inicjalizacji zmiennych o typie static gcc standardowo dodaje do secji .rodata. Pierwsze tak, drugie nie. Inicjalizatory zmiennych - czyli tego co jest w sekcji .data - znajdują się w dokładnie tej samej sekcji co te zmienne - czyli w sekcji .data....
Musisz w istocie powielić ten fragment kodu który pokazałeś wyżej i zmienić w nim symbole na takie jak użyłeś dla tego drugiego obszaru. Jak ładujesz program przez debugger, to on ładuje też sekcję zmiennych, więc w istocie może się czasem wydawać, że są zainicjalizowane <: Ten startup i skrypt linkera nie jest przygotowany na takie automatyczne...
Witam. Chcem zastosować drugi bootloader USB i wymagane jest przesunięcie kodu o 0x200. Gdy skompiluje program pod Keilem z przesunięciem romu na 0x2000 wszystko działa. Gdy skompiluje inny program pod Eclipse z tym samym przesunięciem kod nie startuje. Wrzucam kod linkiera. Program pod Eclipse bez przesunięcia i bootloadera działa poprawnie. Gdzie...
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...
w LPCXpresso. hmm... a nie martwią cię jego ograniczenia wielkości kodu? Co do przykładu - oto przykładowy skrypt linkera... [syntax=c]/* Linker script for Cortex-M3 * * Version:CodeSourcery Sourcery G++ Lite 2007q3-53 * BugURL:https://support.codesourcery.com/... * * Copyright 2007 CodeSourcery. * * The authors hereby grant permission to...
Skrypt linkera wygląda tak INCLUDE "UART_Utility_Debug_lib.ld" INCLUDE "UART_Utility_Debug_mem.ld" ENTRY(ResetISR) SECTIONS { /* MAIN TEXT SECTION */ .text : ALIGN(4) { FILL(0xff) __vectors_start__ = ABSOLUTE(.) ; KEEP(*(.isr_vector)) /* Global Section Table */ . = ALIGN(4)...
Mikrokontrolery STM32H7 posiadają kilka domen zasilania i kilka bloków pamięci. Niby nic wielkiego, ale sprawa trochę się komplikuje kiedy trzeba korzystać z DMA przy obsłudze peryferiów i dość dużych struktur pamięci. https://obrazki.elektroda.pl/4349869800_... Pamięć danych jest dostępna jako (zielone obszary): DTCM - Pamięć danych...
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...
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. :)
Czołem! W swoim projekcie muszę umieścić kilka struktur w konkretnych miejscach w pamięci. Dodałem sobie atrybut do definicji tych obiektów i obecnie plik źródłowy wygląda tak jak poniżej [syntax=c] /* * config_data.c * * Created on: Jan 12, 2021 * Author: mateusz */ /** * This is NOT an editable configuration file where ParaTNC settings are made! Do...
No dobra, udalo ci sie polechtac moja proznosc wiec moze zrobimy tak. Opisze tutaj przykladowego mekafile-a z nastawieniem na WinAVR, Atmega8 i STK200 tak aby inni tez cos z tego mieli. W zasadzie wszystko jest opisane w angielszczyznie no ale jakby kto nie umial to daje po polsku. # Hey Emacs, this is a -*- makefile -*- #---------------------------------------...
Weźmy na przykład Twój plik linkera oraz plik linkera projektu dsonano (oscyloskopu) ze strony http://code.google.com/p/dsonano/ a dokładnie http://dsonano.googlecode.com/files/DS0%... Znajduje się tutaj skrypt linkera o nastepującej treści: /*for stm32f103VBT6 link scipt*/ /* Stack Sizes */ _STACKSIZE = 512; /* just X2*/ _HEAPSIZE...
Jak chcesz zrobić zarządzenia pamięcią to znacznij od czegoś prostego. Np programowa sterta i alokacja pamięci na zasadzie przydziału części tej sterty. Potem jakiś mechanizm zwalniania pamięci ze sterty etc. Brzmi idealnie jak opis malloc() i free() (; dlaczego malloc nie zwraca NULL jeżeli nie może za alokować danego obszaru pamięci? Oczywiście że...
Wydaje mi się, że cię rozumiem, ale mówimy jednak o czymś innym. Załóżmy kod "SO" : [syntax=c] volatile long long i; int main() { memset(&i, 4, 0); i *= i; i = abs(i); } [/syntax] I kod "aplikacji" - to samo ale bez linii z abs() Mamy więc w bibliotekach dołączonych do SO 3 funkcje: .text 0x0000007c 0x8c /opt/cs/bin/../lib/gcc/arm-none-eabi/4.4... /armv6-m/libgcc.a(_muldi3.o)...
Witam, W moim kodzie chciałbym skorzystać z dobrodziejstwa std::tuple oraz std::apply (wszystko to dostępne pod #include <tuple>). Po umieszczeniu tej dyrektywy w kodzie, program prawidłowo się kompiluje oraz (o dziwo !) prawidłowo działa, jednak moje środowisko (DS-5 od ARM) przestaje poprawnie debugować (brak zmiennych lokalnych w oknie Variables,...
Jest to możliwe, ale jak dokładnie będzie wyglądać, to zależy od Twojego skryptu linkera. Poniżej przykład umieszczenia sekcji stosu pod bardzo konkretnym adresem (__process_stack_start): .process_stack __process_stack_start : AT(__process_stack_start) { . += __process_stack_size; } U Ciebie zamiast powiększać ją o znany rozmiar...
1. Musisz zmienić plik linkera dodając sekcje analogicznie do .bss z odpowiednimi symbolami aby móc zidentyfikować gdzie one są 2. od "label"a CopyDataInit do LoopFillZeroes masz wypełnianie .data - analogicznie zrób dla innych swoich segmentów. Jeśli tych zmiennych nie masz setek, to prościej niż przerabiać startup i skrypt linkera będzie Ci je zainicjalizować...
Zakładam wówczas, że Cube albo jakiś inny "kreator templatek" będzie dostępny zawsze, uaktualniony, z najnowszymi procesorami etc etc.. Skrypty z Cube i tak nie obsługują połowy rzeczy które są dostępne w STM32F7 (ot choćby wykonywania kodu z flash przez magistralę ITCM, dodatkowych pamięci takich ITCM czy BKPSRAM), więc naprawdę mała to strata jak...
Jest to mój debiut na YouTube - chętnie przysłucham się waszym radom, komentarzom, spostrzeżeniom i sugestiom :-) . Niezła robota Adamie. Z mojej strony mogę zaproponować co byś w następnych filmikach skupił się na edycji podstawowych parametrów projektu, a zaczął np. od zakładek: " Path and Symbols" oraz "Settings " - a szczególnie z podzakładkami...
Przede wszystkim kompilator nie rezerwuje pamięci na nic. Przydzielaniem pamięci i zamianą symboli na konkretne adresy zajmuje się linker. Właśnie takie potknięcia pojęciowe miałem na myśli w pierwszym poście ;) Niemniej jednak ta ignorancja zemściła się na mnie, bo gdybym to wiedział, pewnie sam bym wpadł na rozwiązanie ;) Każdy linker ma swoje preferencje...
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. Rozmiary zmiemione na 512k i 64k. Zadnej roznicy w dzialaniu nie ma. Pomyslalem, ze warto jeszcze wstawic co pokazuje GDB (to jest przypadek, w ktorym uruchamiam load i mikrokontroler nie może się doczekać na...
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...
Tak wygląda skrypt linkera po poprawach [syntax=c] /***************************************... * author: Freddie Chopin, http://www.freddiechopin.info/ * file: STM32F4xxxG_rom.ld * last change: 2012-03-15 * * chip: STM32F4xxxG * compiler: arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 4.6.2 * 20110921 (release)...
Co znaczy zbyt mały, czy 1024 bajty to za mało? Używam twojego (jakiegoś może nie najnowszego) skryptu linkera... [syntax=c] /***************************************... * author: Freddie Chopin * file: stm32f103rb_rom.ld * last change: 2009-09-19 * * chip: STM32F103RB * compiler: arm-none-eabi-gcc 4.3.3 * * description:...
Tworzenie aplikacji użytkownika w C++ ma wiele zalet, więc nie jest zaskakujące, że język ten staje się coraz bardziej popularny wszędzie, w tym w systemach opartych na małych mikrokontrolerach. Projekt „mbed” jest w pełni skoncentrowany na tym języku. Wiele RTOSów zapewnia warstwę kompatybilności z C++, ale w przeciwieństwie do „dużych”...
Może zacznę od komunikatu błędu kompilacji: make all arm-none-eabi-gcc ./SRC/startup.o ./SRC/low_level_init.o ./SRC/main.o ./SRC/RTOS/lib_AT91SAM7X256.o ./SRC/RTOS/port.o ./SRC/RTOS/portISR.o ./SRC/RTOS/croutine.o ./SRC/RTOS/heap_2.o ./SRC/RTOS/list.o ./SRC/RTOS/queue.o ./SRC/RTOS/tasks.o -mcpu=arm7tdmi -nostartfiles -T./LNK/sam7s256_rom.ld -Wl,-Map=main_rom.map,--cref,--no-warn-m...
Witam ! Niestety ale to co zaproponował ciastek4, nie działa zrobiłem jak napisałeś, nie wyświetliło się nic. Jak zmieniłem w funkcji stringf return print (&out, varg); na return print (0, varg); to zaczęło wyświetlać coś takiego 0.00 is a double a jeszcze jedno nie ma znaczenia czy wywołam tak jak ty napisałeś czy samego stringfa...
Mam na pewno sterownik WinUsb.sys. Poniżej cały skrypt linkera: Dodano po 10 Zapomniałem dodać, że używam zewnętrznego ST-linka dołączonego do płyty Nucleo-f103rb. Mam drugą taką płytkę i gdy teraz ją podłączyłem ale skorzystałem z wbudowanego ST-linka wszystko zaczęło działać prawidłowo. Co w takim razie może być nie tak?
Jedyny mankament to to ze w tup mozesz napisac szybko tylko reguly wg mnie jednorazowe dla Twojego aktualnego projektu, w momencie gdy bedzie to inny projekt musisz sprawdzic wszystko jeszcze raz zwlaszcza flagi dla innej konfiguracji plytki/procka itp. Czy z każdym systemem nie będzie tak samo? Ja mam np. swoje plik Makefile, jestem w stanie je zastosować...
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ąś...
Witam probuje skompilowac napisany uprzednio i dzialajacy program do RAMu. Niestety nie dziala mi obsluga wyjatkow(prawdopodbnie chodzi o remap wektorow jednak nie udalo mi sie znalezc informacji jak tego dokonac dla tego konkretnego procesora) oraz funkcja atoi(po przejzeniu objdumpa wydaje sie znajdowac pod wlasciwym adresem:/). Zastosowany plik startupu:...
Generalnie to pobrałem skrypt linkera i plik startup ze strony http://www.freddiechopin.info. W datasheet i manualu znalazłem adres pierwszej strony pamięci flash i SRAM, która jest "rozbita" na 96KB i 32KB. Zmieniłem w oparciu o te informacje skrypt linkera. Czy zrobiłem to dobrze? Nie wiem. Poniżej: Skrypt linkera: [syntax=c] /***************************************...
Witam wszystkich. Uzywam Eclipse + OpenOCD (0.9.0) + GCC. Do tej pory używałem STM32F103 (Cortex-M3), a teraz przesiadłem się na STM32F373 (Cortex-M4). Wziąłem ze starego programu skrypt linkera, startup, vectors.c i posklejałem do kupy odpowiednio je modyfikując. Program generalnie odpala się, mogę sterować GPIO. Następnie spróbowałem uruchomić SysTicka....
Witam, Zaczynam właśnie przygodę z programowaniem ARM7. Zaopatrzyłem się w książkę "LPC2000 w przykładach" Emila Stawskiego. Książka ta opisuje proces programowania w środowisku uVision3 połączonym z darmowym kompilatorem GNUARM. Moje środowisko programistyczne: - uVision4 (wersji 3 już nie można pobrać), - GNUARM, - FlashMagic Ale do rzeczy... Ściągnąłem...
Ok, coś jest nie tak. Przede wszystkim systick działa na trybie optymalizacji O1 i O2. Bez zmiany kodu. Na O0 od razu jest hard fault. Ale nie występuje na żadnej linijce kodu. Nie wchodzi do przerwania i wywala od razu błąd. EDIT: Działa w momencie kiedy wywaliłem inicjalizacje: N VIC_Init(&NVIC_InitStructure); A w to miejsce dałem: NVIC->ISER...
Tue Feb 14 22:19:46 2012: The stack 'CSTACK' is filled to 100% (1024 bytes used out of 1024). The warning threshold is set to 90.% Na powyższy błąd natknąłem się, gdy zacząłem używać biblioteki fatfs. Nie mam pojęcia, skąd się może brać. Zwiększenie zajętości stosu nie następuje w miejscach, które mogłyby mieć coś wspólnego z odkładaniem czegoś na stos....
Witam, Potrzebuje zmienić skrypt linkera żeby zwiększyć pamięć dla aplikacji kosztem pamięci USB. Jest to w ogóle możliwe? Poniższy skrypt z którego korzystam chciałem zmienić tak żeby zostawić dla USB bank 0 0x2007 C000 - 0x2007 FFFF AHB SRAM, natomiast bank 1 0x2008 0000 - 0x2008 3FFF zostawić na zmienne aplikacji. Na pewno trzeba zrobić jakoś tak:...
Witam, natknąłem się na następujący problem: Probuję debuggować w środowisku Ethernut dla procesów arm (SAM7X256 jesli chodzi o ścisłość). Niemniej jednak postępując zgodnie z instrukcją umieszczoną na stronie yagarto: http://www.yagarto.de/howto/debugnutos/i... nie mogę skopilować przykładu httpd. Otrzymuję kominikaty: C:\ethernut\nutapp\httpd>make...
skrypt linkera skrypt linkera zewnętrzny stm32 skrypt linkera
comarch optima instrukcja navigon zapalać check mercedes
lodówka bosch termostat lodówka bosch termostat
Jak zdjąć tapicerkę drzwi przednich BMW 1 2018 Czujnik termopary do pieca Junkers ZWE 24-3 KE: Wybór i instalacja