Przy okazji sprawdź, czy w ustawieniach debuggera nie masz włączonego czyszczenia całej pamięci Flash przy programowaniu. Jeśli używasz jawnej wartości wskaźnika - nie musisz w ogóle definiować nowej sekcji dla linkera, wystarczy, że skrócisz główną sekcję Flash. Elegancko byłoby zadeklaropwać nową sekcję,a nestępnie zdefiniować zmienne z atrybutami...
Błąd jest gdzieś tu: .data : { _data_begin_ = .; *(.data) _data_end_ = .; } > FLASH Myślę, że w tym małym kawałku widać go od razu [; 4\/3!!
Nie mozna tak zrobic, bo nie masz gwarancji gdzie linker umiesci zmienna - zwykle robi to w kolejnosci deklaracji, ale wcale nie musi. Zreszta to moze sie popsuc nawet i bez ingerencji linkera - wystarczy, ze ktorys naglowek stworzy zmienna w EEPROM. Sekcje pamieci EEPROM mozna przesunac przekazujac linkerowi polecenie --section-start (pamietaj o tym,...
... ale gdy dodawałem to samo linijkę --section-start=.bootloader=0x1F000 w AVR Studio Project -> Custom Options i tam do All dodawałem to linijkę... Wszystko ładnie i pięknie , tylko że ... to linker ma wiedzieć gdzie "wepchać" daną sekcję. W AVRStudio , masz conajmniej 2 możliwości: 1)Project -> Custom Options i tam do [Linker Options] -Wl,-section-start=.bootloader=0x1F000.....
Przykładowy linker dodany do cubef4 dla mikrokontrolera np. stm32f439NI ma tak podzielone obszary pamięci: We fragmencie kodu który pokazałeś widać "jak na dłoni", że pamięć flash _NIE_ jest podzielona, więc nie wiem w czym problem... Czy używając pamięci 2MB z dual bankiem mogę zapisać program na obydwu obszarach pamięci bez żadnych dodatkowych kroków...
To z rozmiarem rozumie i znalazłem. Uzupełnię ten wcześniejszy opis w poście #5, bo mi się wcisnął nie ten klawisz :oops: : Na początku swojego programu dajesz: Wychodzi na to, że moje obawy były uzasadnione (bałem się, że wpisując coś na chama do flash mogę naruszyć strukturę tego co tam docelowo ma być wgrane). Tam na mbed w pliku eeprom.c jest taki...
https://obrazki.elektroda.pl/9633138900_... Chciałbym zaprezentować wnętrze oscyloskopu Siglent SDS1052DL+. Niestety oscyloskop ten, W przypadku takich kłopotów można napisać do producenta: info-eu(at)siglent.com Nawet potrafią coś odpisać. Dostałem więc instrukcję i stosowne pliki odzyskiwania. Bardzo pomocny okazał się też kolega...
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...
Hm... jak pisałem bootloader do swojej centralki to nie używałem __attribute do przesunięcia przestrzeni adresowej tylko zmieniłem w ustawieniach AVR Studio zakres dostępnej przestrzeni pamięci programu na zakres przewidziany dla bootloadera(różnie dla różnych procków). Było o tym pisane na forum, o ile dobrze pamiętam(proszę mnie poprawić jeżeli bredzę)...
Niveasoft miał rację, Twój pierwotny hex w obszarze niewykorzystanym (za kodem programu) wypełniał go 0xff (po kasowaniu flash cała jego pamięć zawiera 0xff) w tym również adresy zajmowane przez tinybld, dlatego tinbld się zbuntował i odmówił wgrania (by siebie nie nadpisać). To dość nietopowy hex, nie wiem dlaczego został tak wygenerowany by adresował...
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...
Może to jest błędne, nie mogę powiedzieć. ale dałem gpt ładunek rzeczy. powiedział to. Dodano po 2 . https://obrazki.elektroda.pl/5079534600_...
https://obrazki.elektroda.pl/2718988000_... Witajcie moi drodzy W tym temacie pokażę jak każdy początkujący może najprościej uruchomić w warunkach amatorskich mikrokontroler PIC32MX795F512H bez potrzeby trawienia/kupowania pod niego konkretnego PCB. Oprócz minimalnego niezbędnego układu pracy tego mikrokontrolera umieszczę tutaj kilka...
anyka$help ? - alias for 'help' bootm - boot application image from memory bootp - boot image via network using BOOTP/TFTP protocol chpart - change active partition env - environment handling commands erase - erase FLASH memory fdt - flattened device tree utility commands flinfo - print FLASH memory information format - erase uboot env go - start application...
Przy uruchamianiu funkcji pomiędzy FLASH i RAM w procku STM32F103 linker dodaje procedury skoku pomiędzy pamięciami swoje w trakcie linkowania. Procek chodzi tylko w trybie trumb ale procedury dodawane są z wykorzystywaniem rozkazów arm. W tym momencie przy wywołaniu takiego skoku dostajemy HardFault-a. dla przykładu fragment z pliku *.list 20004420...
Teoretycznie const powinien także powodować, iż dane są pobierane z FLASH a nie RAM (zmniejsza to zużycie pamięci), ale zauważyłem, iż różnie to bywa. Pewnie dla optymalizacji czasu dostępu do pamięci, dane są przerzucane z FLASH do RAM i potem wykorzystywane. Bzdura. Tylko-const jako "lokalne w funkcji" nie będzie nigdy we flash - musi być "static...
ZTCW to elf jest większy, ale nie jest ładowany w całości. Komenda `size` podaje Ci rozmiar dokładnie tych sekcji, które są ładowane. Do flash trafia zwykle .text + .data. Sam plik zajmuje pewnie z megabajt i rozmiar ten ma niewiele wspólnego z tym co zostanie wrzucone. Rozmiar twoich obiektów (to co podajesz w pierwszej linijce) ma małe znaczenie,...
gcc od wersji 4.8 obsługuje typy stałopozycyjn Owszem, ale nie w tym rzecz. Mój kompilator: [syntax=bash]$ ./avr-gcc -v (...) gcc version 4.9.2 (AVR_8_bit_GNU_Toolchain_3.5.4_1709) [/syntax] Kompilacja w standardzie (albo jak napisałem wcześniej: dialekcie) C99+GNU Extensions (przełącznik -std=gnu99): [syntax=bash]make all Building file: ../main.c...
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) :...
ednak przy kompilacji znowu (co ma sens bo uzywam tablicy zawierajacej wszystkie wskazniki) wszystkie tablice ze czcionkami sa dodawane do flash. Jak to rozwiazac, zeby do flash byly dolaczane czcionki tylko te , ktore sa uzyte w programie a nie ograniczac jednoczesnie calego zestawu czcionek? Już sobie odpowiedziałeś na to pytanie - nie odwoływać...
Dzień dobry, Zastanawiam się nad stworzeniem własnego bootloadera. Zamysł jest taki, że w sektorze 1-3 (razem 48KB) będzie Bootloader, sektor 0 zostaje dla ISR_VECTOR, a sektory >=4 dla aplikacji. Mam taką organizację pamięci w linker_scripcie: RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 96K FLASH0 (rx): ORIGIN = 0x8000000, LENGTH = 16K FLASH1 (rx)...
Czytałem wczoraj o zapisie danych do FLASH i to wydawało się trudne. A robisz coś takiego jak wgrywasz program do FLASH używając programatora? To nie Ty programujesz FLASH ze swojego programu. To co poczytałeś dotyczy tego - a to jest coś zupełnie innego. Tutaj linker genetuje binarkę programu na Twoim PC-cie (abstrahuję od formatu), który to programator...
Jak uruchomić STM32 z FLASH by działał później w pamięci RAM. Dedykowane dla Keil: - plik startup_stm32f10x_xx.s Ułatwię niektórym czasu i szukania w necie rozwiązań flashowania z poziomu własnego bootloadera pamięci programu. Ja przyznam szczerze nie znalazłem żadnego opisu w necie, wobec czego napisałem własne rozwiązanie. Jako że asembler ARMów to...
A jaki adres pamięci flash masz ustawiony w skrypcie linkera? Tutaj masz konkrety opis http://sourceware.org/binutils/docs-2.20... Dodatkowo jest też dokumentacja do samego kompilatrora. Prawdopodobnie linker wpakował program pod zły adres więc podczas ładowania programu OpenOCD informuje że pod tym adresem flash'a nie ma.
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...
ak do memory settings dodam typ Sram z nazwą .xram adres 0x08110 Bo to nie jest poprawny adres RAM i dlatego linker myśli, że to kolejny segment wewnętrznej pamięci FLASH mikrokontrolera. AVR ma architekturę Harvardzką i trzeba odróżniać różne typy pamięci. Dlatego w toolchainie dla AVR przyjęto, że RAM musi zaczynać się powyżej określonego adresu...
Sposobów jest kilka. Ale zacnzijmy od tego, czy rzeczywiście potrzebujesz, aby te dane były w określonym miejscu? Nie wystarczy, aby program wiedział, gdzie te dane są? Jeśłi tak, to przetwórz je do obj i potraktuj jako blob. W programie możesz uzyskać dostęp do takiego obiektu, a linker wszystko ładnie połączy. Jeśli koniecznie musi być w określonym...
Chciałbym użyć przykładowego bootloadera z AES z Microchipa AVR231 [url=http://ww1.microchip.com/downloads/... ]Link (oryginalnie dla Atmega 328PB) Jednak chciałbym go używać na Atmega4809. Najpierw zrobiłem drobne przeróbki i przeprowadziłem testy na 328P, wszystko działało poprawnie. Następnie przerobienie obsługi USART dostosowując...
Funkcje te są w nagłówku <avr/pgmspace.h>: http://www.tuxgraphics.org/common/src2/a... Te, które mają sufiks _PF obsługują wskaźniki 24 i 32 bitowe do FLASH. Pozostałe funkcje - np. sprintf_P i inne z IO.h z _P obsługują __memx ale tylko w obrębie pierwszych 64 kB - nie ma potrzeby,...
pomyslales o uzyciu scatter file? ;] W tam: target->options->linker odkliknij opcje "use memory layout from target dialog". Klik w przycisk "edit" z prawej strony. LR_IROM1 0x08000000 0x3C000 { ; load region size_region, zalozmy ze flash ma 256KiB ER_IROM1 0x08000000 0x3C000 { ; load address = execution address *.o (RESET, +First)...
Ten problem raczej wynika z biblioteki AVR-libc i libgcc. W ramach "usprawnień" zmieniono biblioteki z którymi domyślnie są linkowane aplikacje. Pewne funkcje przerzucono do libgcc (m.in. funkcje arytmetyczne, żeby pokryć funkcje oferowane przez gcc i dostosować je do specyfiki AVR), najwyraźniej o czymś zapominając. Efekt jest taki, że kompilator widząc...
Przy połączeniu UART. Ping na 192.168.1.10 powinien przechodzić. ipaddr=192.168.1.10 <--- IP Kamery serverip=192.168.1.107 <--- IP twojej karty sieciowej ( twój komputer jest serwerem TFTP) Odpal program tftpd64.exe z załącznika masz tam też plik u-boot.bin.img Następnie jak będziesz w konsoli u-Boot wpisz: U-Boot> sf probe 0 U-Boot> sf...
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)....
Dzień dobry wszystkim. Bardzo Wam dziękuję za chęć pomocy. Nie sądziłem, że będzie taki odzew :-) Przeanalizuję wszystko, postaram się poprawić kod i odpiszę. Pozdrawiam. Dodano po 1 A więc dokonałem poprawek, o których pisaliście. Kompilacja wygląda następująco :-) : //--------------------------------------... 09:05:08...
Nie odpowiem, dlaczego to działa w C, a nie działa w C++, ale pamiętaj, że to wyrażenie musi obliczyć linker, nie kompilator. Natomiat linker ma zapewne ograniczone możliwości operacji na adresach. Przy czym dodawanie przesunięcia, to jednak, w przypadku linkera, operacja standardowa. Mnie tam bardziej dziwi, że to mnożenie działa w C. Może chodzi o...
Jeśli nie jest używane to normalne, że linker to usuwa, po co ci info którego nie odczytujesz? Możesz to zostawić wykorzystując atrybut kompilatora "used" przypisany do zmiennej.
Do tego co napisał kol. (at)Freddie Chopin dodam, że po takiej operacji mamy do dyspozycji symbole _<nazwa>_start, _end i _size, co daje nam możliwość dostępu do tych danych. Poza tym, ponieważ konwersja przy kompilacji może być czasochłonna, warto pliki obiektowe połączyć w bibliotekę: ar rcs <lik.a> <opliki.obj> co jest operacją...
Wyrównanie stosujesz domyślnie dla każdej sekcji ? Czy tylko .text ? Aktualnie stosuję dla wszystkich które lądują w takiej lub innej formie we flash i zawierają kod. Natrafiłes na podobny problem czy dałeś wyrównanie profilaktycznie ? W commicie jest to opisane - obiekt z odpowiednio dużym wyrównaniem potrafił sprawić, że kod przestawał działać prawidłowo,...
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...
Jak procesor wykonuje kod już nie ma tam linkera, jak przekopujesz do tablicy kod działającej funkcji i ją wywołasz to ona się wykona, jak będzie w niej jakiś błąd to procesor to wyłapie Tak, tylko linker łączy pliki i tak powstaje kod maszynowy. Więc według Ciebie mogę wziąć funkcję z innego projektu (innej kompilacji) i też ma się poprawnie wykonać?...
/*--------------------------------------... * Linker script for running in internal Flash on the AT91SAM7X512. *---------------------------------------... OUTPUT_FORMAT("elf32-littlearm&... "elf32-littlearm", "elf32-littlearm") OUTPUT_ARCH(arm)...
Ogólnie pomysł z odczytywaniem flasha procka i sprawdzaniem jaka ma wersje poprzez zaglądanie do pliku binarnego to jakiś dziwny pomysł. Idealny przykład problemu, który został stworzony przez nietrafiany pomysł i teraz jest dzielnie rozwiązywany. Od zarania dziejów wkładało się do ROM takie rzeczy np. copyright i nikt się nie dziwił. I jeśli uwarunkowania...
Zrobiłem coś takiego: #define EXTMEM1 __attribute__((section("... #define EXTMEM2 __attribute__((section("... #define EXTMEM3 __attribute__((section("... #define EXTMEM4 __attribute__((section("...
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:...
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...
tylko że zwróć uwagę na to, że autor wątku NIE CHCE jej wgrywać za każdym razem (tylko jeden raz), więc wychodzi naprawdę na to samo. Wystarczy zmniejszyć rozmiar FLASH w skrypcie linkera, a następnie umieścić tablicę binarnie w zwolnionej przestrzeni. W ten sposób linker sam nas poinformuje, że przekroczyliśmy "granicę". Prawda?
Wygląda to tak, nie posiadam takiej wiedzy żeby tu coś samemu zmieniać może powiesz mi co jest nie tak :) [syntax=c] .syntax unified .cpu cortex-m7 .fpu softvfp .thumb .global g_pfnVectors .global Default_Handler /* start address for the initialization values of the .data section. defined in linker script */ .word _sidata /* start address for the .data...
Funkcja SystemInit jest wywoływana w obu przypadkach na początku main. Podałem ją w kodzie. Może tutaj faktycznie jest problem. Pliki startup.s Keila i Cube się różnią. Zauważyłem, że funkcja SystemInit jest wywołana w pliku dla Cube. Niestety te pliki to dla mnie czarna magia. Czytałem o nim artykuł waszego kolegi z elektrody. https://www.elektroda.pl/rtvforum/topic3...
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...
tmf napisał: Kolego, kompilator nic nie wie o adresach, typach pamięci i całym tym bałaganie. Cóś jednak wie czasami - bo jak by nie wiedział to jak by avr-gcc generował poprawny kod dla NAS? Przecież nie generuje. NAS powoduje tylko związanie z danym obiektem jednobajtowego identyfikatora przestrzeni, a reszta leży po stronie frontendu. Każde odwołanie...
linker error stm32 linker stm32f0 linker
przedwzmacniacz charczy zerowanie bufora szczotki silniku pralki
nadajnik szaflika nadajnik szaflika
Centrala Beninca Heady - Monitorowanie Stanu Bramy Pękające naczynka w dłoniach - diagnostyka i przyczyny