Przed wysłaniem przerobiłem na dosową wersję (końce linii), ale scieżki dostępu są linuksowe (backslash/slash) - to do zmiany w/g potrzeb. Makefile był jeszcze z AVR'ów, więc jest tam sporo wykomentowanych śmieci - nie należy się tym przejmować :-)
Niby, bo nie wiem nic więcej poza tym, że nie wywala errorów. To może napisz program który coś robi to wtedy będziesz wiedział czy jest OK. Widzę że używasz JTAG'a....co stoi na przeszkodzie żeby uruchomić debugowanie ? Skoro się wszystko poprawnie kompiluje i wgrywa, wystarczy napisać inicjalizację peryferii dla LPC'ka i zweryfikować plik z mapą przerwań.
Taki program nie ma prawa działać poprawnie, ponieważ przesuwasz tym sposobem również tablicę wektorów, która akurat musi być w jednym i konkretnym miejscu. No chyba że masz już ten bootloader, który uruchamia Twój kod, skacząc pod odpowiedni adres. Pozatym widze, że korzystasz z dosyć starego skryptu, proponowałbym taki trochę nowszy, bo w tym jest...
Pokaż cały skrypt linkera, nie tylko ten ostatni fragment. Najlepiej załącz i ten działający (z którego masz plik map.zip) i ten, który nie działa. Rozmiar każdej sekcji osobno sprawdzaj przez size z parametrem -A. Pozdrawiam, Dr.Vee
Masz nie zgrane opcje gcc dla kompilacji (-ffunction-sections) ze skryptem linkera. Możesz z niej zrezygnować lub zmodyfikować skrypt linkera dodając za linią: *(.text) linię *(.text.*) Albert
Startup bez zmian. Skrypt linkera - zmienić rozmiar pamieci. Tablica wektorów - poniżej. 4\/3!!
Tylko w tablicy wektorów musisz poprawki wprowadzić. Skrypt linkera nie ma tu znaczenia. 4\/3!!
Nie ma żadnej poważnej różnicy między startupem, Makefile'm, skryptem linkera i tablicą wektórów dla procesorów LPC2xxx a SAM7, więc można się posłużyć przykładami - http://www.elektroda.pl/rtvforum/topic13... Różnice "niepoważne" są dwie: 1. tablica wektórów - w SAM7 adres rejestru AIC który "podaje" adres skoku dla IRQ jest inny niż w LPC2xxx...
Zamiast zastępować mój skrypt linkera jakimś z sieci proponuję Ci przerobić ten z przykładów - wystarczy podstawić adresy i rozmiary pamięci. 4\/3!!
Nie da się, zmienne musisz ręcznie umieszczać w jednej bądź drugiej sekcji (oczywiście skrypt linkera musi być na to gotowy) 4\/3!!
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...
(at)Piotrus_999 Niby po co przerabać skrypt linkera? Można to zrobić na kilka sposobów bez tego. A po co w ogóle coś "mieszać" a nie "po bożemu" ? Co po bożemu? Modyfikacja skryptu linkera jest po bożemu? (at)excray Wymusić adres możesz np tak: [syntax=c] struct eeprom_settings { //Tutaj wszystkie ustawienia } __aligned__((EEPROM_SIZE)); struct eeprom_settings...
Zbyt dużo Ci nie pomogę chyba - niestety składnia poleceń kompilacji której oczekuje Twoja wersja kompilatora jest zupełnie inna niż moja, dlatego też nie mogę skompilować Twojego przykładu u mnie. Po podstawieniu mojego Makefile'a do Twojego projektu wszystko kompiluje się bez większych problemów (konieczne są drobne zmiany w skrypcie linkera - ustawienie...
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ź.
Ten skrypt linkera jest błędny... masz zdefiniowaną pamięć o nazwach ROM i RAM, a sekcje pakujesz do CODE i DATA. No to chyba coś tu nie gra? Poza tym masz kompilator i narzędzia sprzed 3 lat, ale to pewnie wiesz... 4\/3!!
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...
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...
Co do umieszczania kodu w odpowiednich przestrzeniach to trzeba zmodyfikować skrypt linkera oraz użyć atrybutów do danych i kodu aby kompilator odpowiednio stworzył obiekty. Ale to nie jest wystarczające. Trzeba dopisać trochę kodu w startupie jeżeli mają być zainicjalizowane (zerowanie też uznamy dla uproszczenia za inicjalizację aby nie tworzyć dodatkowych...
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...
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.*...
PROGMEM tu nic nie da, bo dla linkera ten atrybut już nie istnieje, dla niego jest adres z odpowiednim prefixem określającym lokalizację. Po określeniu sekcji należy jej adres początkowy przekazać poprzez parametr -Wl,--section-start=, lub po prostu zdefiniować nową sekcję w AVR Studio. Napisz co się pluje, że adres wykracza poza SRAM i jak dokładnie...
Zaimportowałem AN10904, sprawdziłem u mnie to samo. Miałem Ci napisać, abyś zawartość plików usb_buffer_lib.ld i usb_buffer_mem.ld wrzucił do usb_buffer.ld bo wtedy projekt się buduje. Dyrektywa INCLUDE w usb_buffer.ld poprostu dołącza zawartość pliku wskazanego przez INCLUDE i nagle mnie oświeciło, dojrzałem błąd. Część pliku usb_buffer.ld /* * GENERATED...
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...
Przy programowaniu na goły sprzęt wartość wskaźnika stosu musisz ustawić sam. Zwykle potrzebny jest też tzw skrypt linkera, czyli instrucja dla linkera gdzie są odpowiednie obszary pamięci i w które z tych obszarów ładujesz program , gdzie masz ram i gdzie stos. RPi to trochę dziwny komputer, bo zanim uruchomi się arm pewną robotę robi procesor graficzny,...
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...
Nie wiem o co chodzi Koledze "Marek_Skalski", bo przecież interpretacja Kolegi "NowyARM" jest jak najbardziej poprawna. O tym samym pisał również Kolega "Tmf". Osobiście nie wiem, co jest umieszczane w tej sekcji, ale gdy zostaną tam kiedykolwiek dołączone jakieś dane, to stała w pamięci programu zostanie przesunięta względem początku sekcji ".progmem.gcc"....
Nie musisz go wcale "stwarzać". Wiedząc, że Twój kod zajumje początek Flash, możesz swobodnie używać adresów z końca pamięci. Wygodnie będzie zdefiniować adres, od którego zaczyna się Twoja pamięć danych jako stałą: #define MY_FLASH_ADDRESS 0x8000 a następnie zgrabnie ustalić go jako adres struktury danych, np. #define MY_DATA (*((struct my_data_ *)MY_FLASH_ADDRESS)))...
Mam problem z linkowaniem plików wygenerowanych przez kompilator avr-gcc oraz assembler avr-as. avr-ld.exe asm.o c.o -O output.obj -b binary Dlaczego probujesz linkowac problem bezposrednio przez uzycie LD? Jesli tak chcesz, to: - musisz podac skrypt linkera dla danej architektury (opcja -T) - liste bibliotek wewnetrznych kompilatora c (libgcc.a i...
Kompilator ładuje tam inicjalizatory dla zmiennych w pamięci zewnętrznej. Aby tego uniknąć, musiałbyć zmienić lekko skrypt linkera i do startupa dopisać kopiowanie danych z flasha do tej pamięci, tylko że najpierw trzeba by ją włączyć <: Dane z sekcji .data mają ustawione adresy w RAM, ale ładowane są do FLASH (> ram AT > rom), dlatego tam...
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...
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...
Myślałem żeby załaczyć Ci mój projekt ale - 1. jest komercyjny 2. jest zbyt myślę złożony Tak że na szybko sama idea - jest to zrobione w 5 minut i skrypt linkera powinno sie przerobic lepiej. Funkcje też są do kitu - bo parametry trzeba przekazywać wskaznikiem do nich) wtedy nie jesteś ograniczony ich ilościa itd itd. Nie jest to reentrant i bezpieczne....
Jak dla mnie błąd jest w tym miejscu: -T "${workspace_loc:/emWin_522/emWin_522.ld... Brakuje drugiej klamry. 4\/3!!
(at)Piotrus_999 Może od razu napiszesz standardowy wywód na temat wyższości SW4STM32 zamiast zadawać tego typu pytania. Autor wyraźnie napisał: Zresztą, wolę unikać tego narzędzia, wolę rozumieć co gdzie jest i dlaczego. (at)maciej_zar Zamiast tych GNU Coreutils (z tego co wiem to jest tam nieco stara wersja tego) zainstaluj sobie MSYS2 albo przesiądź...
Cześć. Potrzebuję skrypt do linkera dla uC stm32f373, na internecie znalazłem plik stm32f3_flash.ld, ale nagłówek tego pliku jest skomentowany ze jest to skrypt dla stm32f30x. Natomiast dla stm32f373 nie moge nic znaleźć. Czy plik dla stm32f30x będzie odpowiedni? Bo ogólnie problem polega na tym że mam toolchaina i stm32f37x stdandard pheripheral library...
załączyłem cały projekt, przepraszam że nie od razu jest sporo komentarzy, więc nie powinno być problemu ze zrozumieniem moich intencji Załączaj nie cały projekt tylko wszystkie piliki .h .c. skrypt linkera i makefile a reszta to zbędny balast. Po drugie jak wysyłasz coś w oczekiwaniu na pomoc to usuń punkty, nikt nie bedzie dawał ci punktów za to...
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...
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ę...
Hej, mam przykład z blink led dla stm32f103 ze stronki Freddiego i na jego podstawie portuje kod pisany pod KEIL'em do czystego eclipse'a + toolchain bleeding edge. Jestem już na etapie gdzie wszystko mi się kompiluje (aczkolwiek wciąż na bibliotekach ST dotyczących peryferiów itd). Musiałem wrzucić także syscalls itp. Niemniej - przykład ten jest dla...
Był bym wdzięczny, z chęcią rzucił bym okiem na niego :)
Witam. Wczoraj po wymianie routera w domu z xrt-401B na nowy postanowiłem coś ze starym zrobić. Udało mi się zlokalizować port do debugowania, po podłączeniu pod komputer dostałem coś takiego: Got the MXI2 Flash ROM ADM5106 Boot: Procesorem jest więc # Główne opcje kompilacji MF = xrouter OBJECTS = CFLAGS=-mcpu=arm7tdmi -Os AFLAGS= LDFLAGS= -Wl,-Ttext,0x0080...
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...
Najlepiej wziąć gotowca i dostosować go pod swoje potrzeby na podstawie dokumentacji linkera http://sourceware.org/binutils/docs-2.20...
mam zaufanie że zadziała od ręki na tamtym procesorze, na moim mam wątpliwości. Zadziała tak samo (; Musisz tylko wywalić uruchamianie PLL i konfigurację GPIO, bo to się może różnić. Startup będzie identyczny. Makefile będzie identyczny. Tablica wektorów będzie identyczna. Skrypt linkera będzie w zasadzie identyczny, tylko musisz zmienić ilość pamięci...
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...
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...
Rzecz w tym, że RTL sdk nie obsługuje C++ po wyjęciu z pudełka. Nawet jeśli piszesz kod w C++, skrypt linkera dostarczony przez Realtek zignoruje niektóre ważne rzeczy z obiektywnego C++, takie jak vtables klas wirtualnych. Te części, które nie są zawarte w ostatecznym pliku binarnym, będą się poprawnie kompilować i linkować, ale ulegają awarii w czasie...
co to znaczy prawidłowa? Chodzi o to, żeby zmienne __data_start, __data_end, __bss_start i __bss_end wskazywały na prawidłowe adresy. Raczej wszystko powinno być OK z Twoim sposobem - dla pewności po prostu przetestuj go z jakimś większym projektem.
Definitywnie trzeba to jakoś przewidzieć w skrypcie linkera, podobnie jak wektory we flashu. Jeśli dodatkową sekcję (tą samą co wektory we flashu) umieścisz w sekcji .data, to Twój startup RACZEJ powinien automatycznie zainicjalizować i ten obszar, więc dodatkowy kod nie powinien być potrzebny. Oczywiście konfiguracja (remapowanie wektorów) będzie konieczne...
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...
skrypt linkera zewnętrzny stm32 skrypt linkera symbol skrypt linkera
sprzęgło odsrodkowe naprawa połączeń matrycy czujniki ruchu bezprzewodowe
Wieża Sony FH-B70CD - Problemy z magnetofonami i konserwacja Opel Astra H 1.9 CDTI Z19DTH – usterka obwodu siłownika przepustnicy, błędy P1125, P0638