Jak dla mnie błąd jest w tym miejscu: -T "${workspace_loc:/emWin_522/emWin_522.ld... Brakuje drugiej klamry. 4\/3!!
Trzeba by pogrzebać może we flagach kompilacji które powinny być dla takiego MIPSa, bo zapewne muszą być jednak inne... /; Jeśli w MPLAB widać w jaki sposób wywoływany jest ichniejszy kompilator, to można zapewne sporo podejrzeć... 4\/3!!
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...
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
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...
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
potrzeba jeszcze startupa i skryptu linkera. 4\/3!!
Nie sądze, żeby Yagarto samo dodawało jakieś sekcje do skryptu linkera "samo z siebie". Dodaj więc gdzieś na końcu skryptu linkera coś na styl: .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } (znalezione tu - http://www.codesourcery.com/archives/arm... ) I powinno działać 4\/3!!
malloc rezerwuje bloki pamięci na stercie poprzez _sbrk_r() z syscalls.c. Sprawdź czy sbrk zgrywa się ze skryptem linkera.
Nie wiem co zamieszałeś w skrypcie linkera, ale musiałeś zamieszać zdrowo... 4\/3!!
Wygląda na to że kolega potrzebuje całego gotowego projektu z makefile'em, skryptem linkera i innymi po Eclipse?
Startup bez zmian. Skrypt linkera - zmienić rozmiar pamieci. Tablica wektorów - poniżej. 4\/3!!
Zajrzyj do skryptu linkera, zobacz jaki jest rozmiar stosu. 4\/3!!
W skrypcie linkera masz zadeklarowaną zbyt małą pamięć. 4\/3!!
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ń...
(at)Piotrus_999 Niby po co przerabać skrypt linkera? Można to zrobić na kilka sposobów bez tego.
Trzeba stworzyć w skrypcie linkera sekcję pod konkretnym adresem i w tej sekcji umieścić tablicę. 4\/3!!
Ogólnie sobie przeglądałem CMSIS'a i w sumie jest tam startup zrealizowany w C dla GCC łącznie z linkerem. Musiałem skryptowi linkera zmienić rozszerzenie, bo .ld nie dało się dodać jako załącznik...
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...
Możesz w skrypcie linkera dodać przy tej sekcji `(NOLOAD)`, w ten sposób: SECTIONS { ... .noinit (NOLOAD) : { ...
Wie ktoś jak rozwiązać ten problem ? Tak, użyć skryptu linkera dostarczonego z przykładem. 4\/3!!
Zacznij od sprawdzenia stosu. No właśnie - w skrypcie linkera jest nawet opis, ale widzę że nikt go nie czyta... 4\/3!!
Używam przerwań. To teraz zobacz co ciekawego możesz wyczytać w skrypcie linkera... 4\/3!!
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!!
Jedyne "pewne" podejście do tej kwestii, to zmniejszenie rozmiaru flash w skrypcie linkera o rozmiar przynajmniej dwóch ostatnich stron i użycie właśnie tych dwóch ostatnich stron. Każda inna opcja to proszenie się o kłopoty.
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!!
1. Tylko skąd ty teraz wytrzasnąłeś ten znaczek '(at)'? Chyba chodziło Ci o '&'... Typ kopiowanych danych nie ma żadnego znaczenia. 2. W skrypcie linkera komentarze tylko w /* ... */ 4\/3!!
Weź wszystkie podstawowe pliki (startup, skrypt linkera, tablicę wektorów, Makefile) z jednego źródła, bo jak je mieszasz to nigdy nie wiadomo co nie zadziała. 4\/3!!
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ź.
Ś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...
To raczej nie skrypt linkera, a zewnętrzny program, który przetworzy obraz binarny, który masz zapisywać - w każdym środowisku istnieje możliwość wywołania takiego programu, zwykle pod nazwą "post build step".
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...
Znalazłeś na mojej stronie OpenOCD, to poszukaj jeszcze przykładowego projektu dla LPC2103. Trzeba w nim zmienić tylko drobnostki: rozmiar pamięci w skrypcie linkera i argumenty z jakimi wywoływane jest OpenOCD. 4\/3!!
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!!
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...
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",...
Przykład od michalko12, robi to co ci na początku napisałem. Tworzona jest dodatkowa sekcja fastrun (w skrypcie linkera) i w tej sekcji są umieszczane funkcje. Sprytne jest umieszczenie tej sekcji wewnątrz sekcji data, co pozwala na pominięcie modyfikacji pliku crt.
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?
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...
Czy można się jakoś przed tym zabezpieczyć ? W skrypcie linkera należy włączać sekcję poprzez zapis:[syntax=c]KEEP (*(.nazwa_sekcji))[/syntax] albo użyć atrybutu 'used':[syntax=c]static const int dummy __attribute__((__used__)) = 1234;[/syntax]
Co do Twojego problemu deklaracji typu układu - typ ten zdefiniowany jest w Makefile (MD, HD, CL, ...) Jeśli używasz przerwań, to ustaw jakąś wielkość stosu dla przerwań w skrypcie linkera (domyślnie jest 0, bo nie ma przerwań w przykładach). 4\/3!!
(at)Piotrus_999 Jak zwykle piszesz nie na temat. Producent kompilatora udostęnia gotowe biblioteki, ale będziesz wymyślał kolejne dziwactwa. Nikt tu nie pisze o skryptach linkera w ogóle, tylko o konkretnej potrzebie. Skoro mozna ją zrealizować prosto, to po co komplikować? A że tobie się coś nie podoba, to trudno, dlatego używasz gcc, w czym problem?
Twoja tablica jest alokowana na stosie, ktorego jest ograniczona ilosc (w skrypcie linkera mozesz ja zwiekszyc). Tworzenie duzych obiektow na stosie nie jest zbyt dobrym rozwiazaniem. Powinienes w takim przypadku uzyc tablicy globalnej lub zaalokowac ja dynamicznie (za pomoca malloc).
Witam, Czy wie ktoś jak w WinARM włączyć obsługę i ustawić rozmiar zewnętrznej pamięci RAM ? Nie chodzi mi o konfigurację rejestrów, tylko ustawienie środowiska tak aby "widziało" więcej RAMu ogólnego przeznaczenia. Pozdrawiam Zmodyfikuj skrypt linkera, wskaż linkerowi nowy obszar pamięci i przypisz odpowiednio sekcje
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)...
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 może mnie ktoś wytłumaczyć dlaczego nie .text* sekcje są wkładane do .text. Trochę to IMO dziwaczny pomysł. Tylko: osobiśnie nie lubię modyfikować skryptów linkera o ile nie jest to absolutnie niezbędne. A to dlaczego - jest to najbardziej naturalne miejsce ustawiania sobie organizacji pamięci - po to one zostały wymyślone. Ułatwiaja i upraszczają.
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...
Pisałem przecież, żebyś wziął WSZYSTKIE pliki, a nie tylko makefile i skrypt linkera. "Wszystkie" czyli: 1. lpc2103_rom.ld 2. Makefile 3. startup.S 4. vectors.S 5. hdr\hdr_cpsr.h Tym samym możesz ze swojego projektu wywalić następujące dwa pliki: 1. boot.s 2. lpc2124-rom.ld 4\/3!!
Niestety to nie działa. Lubię takie opisy - od razu wiadomo z czym problem. 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...
To nie jest dobry pomysł. Bootloader nie powinien dzielić żadnych danych z aplikacją i powinien być kompilowany oddzielnie. Najpierw uruchamia się bootloader, który albo coś robi, albo przekazuje sterowanie do aplikacji. W tym momencie dane bootloadera powinny zginąć i zginą, bo aplikacja zainicjuje pamięć danych na nowo. Aplikacja musi być kompletnym...
Jeszcze nie testowałem, ale... trzeba zmienić ustawienia linkera, co jest możliwe na dwa sposoby: 1. Modyfikacja skryptu linkera 2. Przekazanie opcji dla linkera za pośrednictwem SDCC Zakładając, że używamy standardowego skryptu linkera, a potrzebujemy tylko relokować kod, lepszym wyjściem będzie drugie rozwiązanie. W punkcie 3.3.5 [url=http://sdcc.sourceforge.net/doc/sdc...
M0 nie obsługuje pełnej relokacji tablicy wyjątków, VTOR nie zadziała. Nie wiem co prawda, po co Kolega usiłuje na siłę zrobić własny bootloader w M0 (można użyć firmowego wywołanego z aplikacji), ale skoro już się uparł, to niestety zostają mu sztuczki z kopiowaniem do RAM. Powinno się dać to zrobić samym skryptem linkera - mi się nigdy nie chciało;...
dzięki, spróbuje, jak mi się uda wrzucę wyniki, może się komuś przyda ;)
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...
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...
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...
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...
Witam i dziękuję za zainteresowanie tematem. Moim celem jest napisanie klasy która zarządzałaby umieszczoną w pamięci FLASH tablicą wektorów przerwań. Chodzi o to aby w tablicy znajdowały się wskaźniki na statyczne metody tej klasy. W momencie wystąpienia przerwania następowałby skok do funkcji obsługi przerwania (czyli do statycznej metody klasy),...
(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ź...
Zrobiłem u siebie na próbę 429Zi DISCO płytka. Zasiliłem 2 paluszkami. [syntax=c]void BKP_SRAM_Init(void) { RCC->APB1ENR |= RCC_APB1ENR_PWREN; RCC->AHB1ENR |= RCC_AHB1ENR_BKPSRAMEN; HAL_PWR_EnableBkUpAccess(); HAL_PWREx_EnableBkUpReg(); } #define BSRAM_B 0x40024000 void inline BKPS_Write_Byte(uint32_t address, uint8_t value) { *(volatile uint8_t *)...
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...
Witam, już widzę błąd... Podany przeze mnie przykład był zrobiony dla procesora LPC2148, który ma więcej pamięci RAM oraz FLASH. Niby nic takiego, ponieważ program i tak nie wykorzysta więcej pamięci niż ma Twój LPC2144. Jednak w skrypcie linkera - LPC2148-ROM.ld zdefiniowano na stałe adres stosu, stąd te błędy i pisanie po komórkach pamięci, których...
No właśnie to jest najlepsze - NIC nie musiałbyś zmienić [; Przykład zadziała bez ŻADNYCH modyfikacji. Jeśli będziesz chciał użyć kiedyś przerwań, to musisz zajrzeć do pliku vectors i przejrzeć komentarze - trzeba tam wprowadzić jedną zmianę dla "nowszych" układów LPC2xxx. Jeśli potrzebne Ci będzie więcej pamięci, to trzeba zajrzeć do skryptu linkera...
A no dobra, sorry - to jest inny problem. Najszybciej będzie, jak w pliku Makefile wyłączysz generowanie pliku .bin. Rozwiązanie 100% poprawne to dodanie czegoś do skryptu linkera do sekcji w SDRAM, żeby nie pakował ich do obrazu binarnego, ale chwilowo nie jestem 100% pewny co dokładnie [; Chyba (NOLOAD) (do _WSZYSTKICH_ sekcji w pamięci SDRAM), ale...
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 :...
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...
Witam Forumowiczów, próbuję odpalić FreeRTOS'a z MPU na SAM4C32 (Cortex-M4). Mam problem z konfiguracją skryptu linkera. Chodzi o dodanie obszarów pamięci wymaganych przez FreeRTOSa. Freertos w swoich demach ma przykładowy projekt z wykorzystaniem MPU pod GCC jednak tamten skrypt zawiera błędy (zostało to zgłoszone: http://sourceforge.net/p/freertos/bugs/4...
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...
Był bym wdzięczny, z chęcią rzucił bym okiem na niego :)
domyślnym skryptem linkera Jest takowy? Przypuszczm, że wielu oprócz mnie takowy pozna. Albert
Nie da się tego zrobić wygodnie. Najprostsza opcja, jak akurat nie zależy Ci (choćby chwilowo) na idealnym wykorzystaniu tej pierwszej strony flasha, to po prostu wrzucić tam tylko tablicę wektorów (która i tak jest w osobnej sekcji) i mieć to z głowy. Jeśli chcesz lepiej wykorzystać pierwszą stronę flasha, to jedyną opcją jest selektywne wrzucenie...
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ś...
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...
Witam, poczytałem sporo informacji nt. skryptów linkera, ale niestety jednej rzeczy nie mogę zrozumieć. Mam przykładowy zapis (sam napisałem): [syntax=c] .text : { . = ALIGN(4); __text_start__ = .; /* zmienna zawierająca początek sekcji text */ *(.text) /* kod wykonywalny aplikacji */ *(.text.*) *(.rodata) /* dane tylko do odczytu przechowujemy we flashu...
Eclipse to nie kompilator - to co najwyżej bardziej rozbudowany edytor. Do ARMa taka wtyczka też jest, ale wcale nie jest taka cudowna jak do AVRa (w AVR nie ma w zasadzie nigdy potrzeby grzebać w makefile, bo AVR to AVR, skrypty linkera są standardowe itd.), dla ARMa jednak potrzeba taka zachodzi nad wyraz często, a wtyczka ta nie jest jeszcze dopracowana....
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)))...
Program się nie mieści? A co z opcjami kompilatora, skryptem linkera?
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...
Tu masz coś o sbrk(), ale dla innego skryptu linkera, więc nieszczególnie Ci pomoże. Twój jednak wygląda mi na dobry (pozatym, że heap_ptr można zainicjalizować normalnie, bez tego if() ). Jak chcesz uciszyć warningi o nieużywanej zmiennej, to wystarczy na początku funkcji zrobić - _s_r = _s_r i po problemie. http://www.elektroda.pl/rtvforum/topic14...
Gdzie masz funkcję write_text(); ? Tworzysz w ogóle jakieś pliki nagłówkowe? extern możesz też zastosować do tej funkcji syscalls.c który współgra ze skryptem linkera a o tym poczytaj na stronie Freddiego http://www.freddiechopin.info/
1. WinARM to staroć nierozwijany od lat - użyj CodeSourcery. 2. Twój pierwszy problem wynika z tego, że odpowiednie definicje początku/końca różnych sekcji nie są obecne/nazywają się inaczej w skrypcie linkera. 3. Do J-Linka instalujesz inne sterowniki (libusb-win32) i podłączasz normalnie do kompa, uruchamiając normalnie OpenOCD - nie ma tu żadnych...
A jeśli chciałbym mój program wgrać do RAM to musiałbym w tym Twoim skrypcie linkera dla sekcji np .text zamiast > rom AT > rom wpisać > ram AT > ram czy wewnątrz {} tez trzeba coś zmieniać? Jeśli wystarczy Ci, że program będzie działał jedynie przez debugger, to wystarczy ta pierwsza opcja. Jeśli byś chciał, żeby program normalnie działał z RAM, to...
Myślę, że to pytanie nie tyczy się to tylko tego zestawu. Otóż, zaopatrzyłem się w ten zestaw, ściągnąłem chyba wszystko co było (datasheets, różnorakie opisy itp.). Zacząłem się w to wszystko wgłębiać i w pewnym momencie przyszło chyba opamiętanie - bo im dalej w las tym więcej drzew. Pierwszy problem pojawił się przy środowisku - tu udało się przebrnąć...
Pokaż te zmienne w kodzie oraz skrypt linkera.
Najlepiej wziąć gotowca i dostosować go pod swoje potrzeby na podstawie dokumentacji linkera http://sourceware.org/binutils/docs-2.20...
(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,...
Wszystko jest "nie tak" ten Makefile jest bezwartościowy... 4\/3!!
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.*...
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...
Chce zmusic Platform Studio SDK do wygenerowania plikow binarnych zamiast lub oprocz plikow ELFowych (*.o). o ile pamietam, EDK Xilinxa opiera sie na przerobionym kompilatorze GCC. Mozesz sprobowac uruchomic gcc z opcja --target-help - byc moze bedzie tam jakis czysty format binarny. Mozesz tez edytowac recznie skrypt linkera, zmienic OUTPUT_FORMAT("elf32_costam")...
Ja stosuje wersje 1. W umowie dodatkowo mam punkt brzmiący mniej więcej tak: Wykonawca udostępnia na warunkach licencji LGPL w wersji xxxx prawa do bibliotek obsługi peryfieriów . Wersja 2 też jest ok, ale nie zawsze klient się zgodzi, bo warunki uzytkowania takiej licencji mówią o udostępnieniu kodu źródłowego na niej opartej (np strona www czy płytka...
Nie wrzuciłeś skryptu linkera, tylko jeszcze raz wektory... Anyway - jest tam kilka potencjalnych problemów 1 (mało istotny) W skrypcie linkera dodałeś nową sekcję: .ext_mem (NOLOAD) : { *(.ext_mem .ext_mem.*) } > sdram0 jednak według nowej składni powinno być tak: .ext_mem (NOLOAD) : { *(.ext_mem...
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...
skrypt linkera zewnętrzny stm32 skrypt linkera symbol skrypt linkera
president jackson modulacja sharp odblokować rozdzielczość multimetru
stihl odpowietrznik paliwa stihl odpowietrznik paliwa
Jak ustawić język polski w Grundig XLC 32 cale? Schemat instalacji ogrzewania Mercedes W210 E300 TD 1998