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...
Tak naprawdę możesz to zrobić w kodzie, na początku main(), nie musi to być koniecznie w startupie. No ale może być oczywiście. Swoją droga, to wydaje mi się, że najprostszą metodą osiągnięcia tego celu (przy jednym założeniu) jest modyfikacja skryptu linkera. Założenie jest następujące - sekcja .data jest pierwsza w RAM i znajduje się na samym początku...
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:...
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 Potrzebuje szczegółowych informacji dotyczących budowy pliku linkera *.ld do armów. Jak taki plik stworzyć , co jest potrzebne do stworzenia takiego pliku tzn . jakie informacje czy (datasheet układu wystarczy). Na tyle szczegółowych i uniwersalnych abym mógła napisać napisać skrypt dla dowolnego arma lpc2xxx ,str7xx , str9xx itd. gdzie moge znależć...
Jeśli ktoś używa środowiska WinArm i procesora LPC2294 (ja mam płytę startową z firmy Olimex LPC-e2294) i umie skompilować program tak aby załadować go do flasha to proszę o pomoc jak ten krypt ma wyglądać. Obecnie uruchamiam programy w RAM-ie przez JTAG.
Mam pewien bardzo prosty kod, który kompiluję przy użyciu najnowszego CodeSourcery (gcc 4.3.3). W kodzie tym jest skrypt linkera, w którym zadeklarowane jest 8k pamięci RAM. W dalszej części tego skryptu mam poukładane sekcje dla pamięci RAM: .data : { _data_start = .; PROVIDE(_data_start = _data_start); *(.data); . = ALIGN(4);...
Witam, Zasiadłem do STM32 i zaczynam implementować coraz kolejne funkcjonalności do mojego projektu. Napotkałem jednak problem. Chodzi tu o używanie funkcji malloc() lub printf(). Chodzi o to, że program się nie kompiluje ponieważ brak jest referencji do _sbrk. Przeszukałem Google i znalazłem przykładową funkcję. Funkcja ta potrzebuje dodatkowych informacji...
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...
Próbuję odpalić FreeRTOS na LPC2142. Gdy zmieniam coś w skrypcie linkera, czyli lpc2142-rom.ld , i każę zbudować jeszcze raz wyskakuje mi make all make: *** No rule to make target `all'. Stop. Domyślam się, że nie wykrywa żadnych zmian, więc nie widzi powodu żeby robić to ponownie Mój makefile wygląda następująco: CC=arm-elf-gcc OBJCOPY=arm-elf-objcopy...
Cześć! Mam następujący problem i szczerze mówiąc nie wiem już jak go rozwiązać: Próbuję znaleźć implementację syscalls.c aby wykorzystać newlibc dla lpc2148 w codesourcery lite. Używam skryptu linkera z lpcusb i sam mam za małą wiedzę aby go zmodyfikować. Znalazłem syscallsy na stronie frediego() ale z w/w skryptem linkera nie chcą działać. Brakuje...
Witam! Od kilku dni próbuje skompilować cokolwiek na mikrokontroler PIC32 z rdzeniem MIPS 32 m4k przy użyciu kompilatora z codesourcery. Powodem tego jest fakt iż C32 od microchipa nie wspiera mojego układu a nowy XC32 nie chce współpracować ani z MPLAB8 ani MPLAB X. Więc wybrałem lubiane przeze mnie Eclipse i codesourcery. Oczywiście znaleźć cokolwiek...
Witam wszystkich. W takcie kompilacji bibliotek uIP zabrakło mi miejsca w pamięci danych. Otóż sekcja zmiennych globalych .bss zajmuje około 19 kB, natomiast procesor posiada pamięć 32kB podzieloną na dwa zakresy po 16 kB: local sram oraz AHB sram toteż jest niemożliwe umieszenie całej zawartości .bss w jednym bloku ram. Orginalny skrypt linkera to:...
Witam W LPC2378 pod adresem 0x01FC zapisywana jest informacja Code Read Protection. Z dotychczasowym skryptem linkera, pod ten adres zapisywana jest informacja o przerwaniach: 000001f8 <IntEnable>: 1f8:ef000001 svc0x00000001 1fc:e12fff1e bxlr Czy jest możliwość zablokowania w skrypcie linkera określonych adresów, np 0x01F8, oraz 0x01FC?
Przyszedł czas na zrobienie własnego bootloadera a z nim kilka problemów i pytań. Pierwszym problemem jest skrypt linkera: nie potrafię stworzyć sekcji bootloadera na początku programu. Stworzyłem sekcję na końcu. Co muszę poprawić w poniższych skryptach żeby mój bootloader był za tablica wektorów przerwań aż do adresu 0x08000400? Od 0x08000400 ma być...
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...
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...
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: ) Zastosowałem te poprawki, ale wciąż...
Witam! Szukam sposobu na dodawanie wartości CRC do wsadu mikrokontrolera. I generalnie udało mi się znaleźć wygodne rozwiązanie, które działa i w pełni mnie zadowala :) Problem polega na tym, że nie jestem pewny czy moje rozwiązanie jest "eleganckie" i czy nie będzie przyczyną kłopotów w przyszłości. Podstawowe założenia są takie: - CRC ma 4B - ma wylądować...
Witam, nigdy nie kombinowałem ze skryptami linkera ale tym razem zaszła taka potrzeba więc zwracam się z poradą do Was. Moim celem jest odseparowanie pewnej pamięci FLASH tak abym mógł sobie tam coś zapisywać bez utraty danych po odłączeniu zasilania. narzazie zrobiłem co takiego: w pliku stm32_flash.ld zmodyfikowalem : MEMORY { FLASH (rx)...
Cześć i czołem. Od dwóch tygodni walczę na noże z stmem 32f429 i nie bardzo chce cokolwiek działać. Problem jest dość trywialny: nie działają przerwania. Jedynie projekt wygenerowany przy pomocy CubeMX'a potrafi zrobić przerwania, ale znowu nie chce przyjmować klas etc. Zresztą, wolę unikać tego narzędzia, wolę rozumieć co gdzie jest i dlaczego. Próbuję...
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:...
Nie prościej tak: openocd -f interface/twoj_jtag.cfg -f target/twoj_procek.cfg -c "init" -c "reset halt" -c "flash write_image erase twoj_wsad.bin 0 bin" i później ewentualnie dalsze komendy poprzez -c "komenda" ? Szczególnie doczepiam się do dwóch rzeczy: 1. Kasowania całej pamięci, skoro wystarczy skasowac tam gdzie będzie nowy soft 2. Ładowania przesuniętego...
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...
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...
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...
Właśnie o to mi chodzi - jedna z tych metod korzysta po prostu ze standardowego malloc() i wtedy trzeba zadbać o jego poprawne działanie m.in. właśnie poprzez poprawną implementację sbrk() i stosowne definicje w skrypcie linkera. okej, dużo mi się wyjaśniło Jeśli korzystasz z moich przykładów, to ściągnij ze stronki po prostu paczkę z syscalls i wszystko...
Ja wczoraj dostałem paczkę. Jeszcze nic nie próbowałem (i jak pisałem nie prędko spróbuję). Są załączone przykłady gołe do większości peryferiów. Nie wiem tylko "pod co" (chyba pod ADS - patrz dalej). Są same pliki .c i .h przykładów. Jest duży plik h z definicjami rejestrów. Nie widzę makefile (to akurat da się przeżyć), ani skryptu linkera. Ale może...
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...
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...
Łopatologicznie: W pliku .map masz swoje źródło programu + skrypt linkera. Plik .map "mówi" gdzie dane i program,( funkcje )są umieszczone w pamięci. Czyli jeśli w skrypcie linkera masz że program zaczyna się od adresu 0x10000 i ma długość 30 kilo to tam będzie umieszczony kod programu, natomiast zmienne będą umieszczone w sekcji Data i w skrypcie linkera...
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)...
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...
a może jeszcze inaczej a. plik asemblera budujący tablice wektorów przerwań b. kompilacja z opcją -nostartfiles lub tez zmiana skryptu linkera ??? Rozwiązanie o tyle nieelastyczne, że trzeba będzie ręcznie edytować każdy element tablicy wektorów podczas gdy potrzebuję zmodyfikować jedynie wektor INT0, a w stosunku do pozostałych wektorów chciałbym aby...
Widzę, że zadałem trudne albo głupie pytanie. Pewnie GCC jest tak toporne, że nie podoła zadaniu. Akurat GCC nie jest tak toporne jak narzedzia komercyjne ;). Wiec: Na czym polega mój problem? Jak zmusić gcc, aby w module: - program zaczynał się od zdefiniowanego adresu Ustawiasz to w skrypcie linkera: MEMORY { CODE (rx) : ORIGIN =...
Taki kod jest po prostu bezsensowny i tyle. Kod z inicjalizacji _jest_ sensowny i _działa_. Jak napiszesz: #define STALA 12345 char* ptr=&STALA; to wydaje Ci się, że to jest poprawne? To nie jest poprawne i nie skompiluje się z prostego powodu - twoja stała jest dyrektywą preprocesora, czyli zostanie rozwinięta jeszcze przed kompilacją programu. Kompilator...
CS3 to tylko "schemat" do używania z ichniejszymi skryptami linkera. Makefile, startup itd. tak czy siak są potrzebne, a skrypt linkera tak czy siak trzeba edytować, bo ten który tam jest do niczego się nie nadaje w domyślnej postaci (wszystko w RAM itd.) Osobiście dałbym sobie spokój z tym ich CS3, bo niczego nie ułatwia, więc po co sobie tym zawracać...
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!!
Którego stosu i czy aby na pewno tego co trzeba? Jeśli używasz moich plików (skrypt linkera, startup, itd.) to polecam ze zrozumieniem przeczytać opis powyżej rozmiarów stosów w skrypcie linkera. 4\/3!!
Witam w pliku GUIConf.c mam to co pisałem u góry ale żeby to zrobić musisz mieć 1Mega ramu, czyli użyłem Sdramu dorabiając sekcje HeapMemSection w skrypcie linkera. Sekcje zrób podobnie jak np robi się sekcje data w skrypcie linkera, lub na elektrodzie znajdziesz wiele postów jak to zrobić, jak byś jednak nie znalazł napisz to coś się wymyśli.... Pozdrawiam
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że nie do końca początki bo coś już umiem) chyba jednak początek:). Uzupełniając powyższą odpowiedź należy wrócić do podstaw. AVR i RAM mają zupełnie różne architektury. AVR ma rozdzielone przestrzenie adresowe a ARM ma jednolitą. Dlatego w AVR musisz wykonywać jakieś magiczne sztuczki, aby odczytać wartość z pamięci programu, a w ARM nie. W ARM...
/cygdrive/c/program files/gnuarm/bin/../lib/gcc/arm-elf/4.1.... Warning: blink.o supports interworking, whereas blink.elf does not To akurat też jest zrozumiałe. Ponieważ masz włączoną opcję -mthumb-interwork bez mthumb kompilator w plikach obiektowych arm dołącza informacje dla linkera, aby ten dołączył do kodu wynikowego...
Sorki za ostry ton, ale wasze wypowiedzi przypominają wypowiedzi ślepego o kolorach. Zaczynacie przygodę z programowaniem (przynajmniej wasze wypowiedzi na to wskazują), a autorytarnie stwierdzacie co jest lepsze i jaki kod generuje. Żeby było śmieszniej to kolega szaro pokazuje kod, który wcale nie jest ekwiwalentny i się dziwi, że są różnice w długości....
Napisałeś wcześniej, że sam określasz położenie stosu i sterty ..bo że rozmiar można definiować to już wiem. Mógłbyś pokazać jak to robisz? .. czy definicja rozmiaru służy tylko rezerwacji wymaganego miejsca w pamięci , czy może przekroczenie rozmiaru stosu wywołuje jakiś Fault_Handler ?? Generalnie większość znanych mi rozwiązań polega na tym iż definiuje...
Myślę, że można ale trzeba by kombinować w skrypcie linkera... Daj sobie siana, skrypt linkera to wyższa szkoły jazdy. Poświęć czas na poznawanie mikrokontrolera i dokumentacji Usera manual.
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...
Co do pomysłu z przestawianiem "." na adres końca pamięci to własnie tak domyślnie próbowałem jednak wtedy mam overflow (niedużo, jakies 400k) pomimo, iż jest to ostatnia sekcja (jakby coś jeszcze za nią było ?) Pewnie tak właśnie jest - kompilator wyprodukował jakąś sekcję, której nie używasz wprost w skrypcie linkera. W takim przypadku linker po...
Mnie ten adres też coś niepasuje, to może być jednak wina skryptu linkera.
Tylko teraz jak zapomoca jezyka C zapisac w Keilu dana pod konkretna komorke pamieci dla kompilatora RealView?. Dla kompilatora CARM udalo mi sie znalesc dyrektywe __at umieszczajaca zmienna w konkretnej komorce pamiecie ale dla kompilatora w którym pisze program (RealView) ona juz nie dziala:( Poprzez wskaznik albo jesli sie da ustawic w skrypcie...
Z grubsza sprawa wygląda tak, że sprintf jest chyba jedną z najbardziej kobylastych funkcji bibliotecznych - polecam lekturę kodu źródłowego - i stąd tyle kodu wynikowego. Do prawidłowego działania wymaga ona między innymi malloca. Ten z kolei, jako że jest standardową funkcją biblioteczną, nie ma zielonego pojęcia ile jest wolnej pamięci i gdzie się...
Przy kompilacji projektu pojawia się błąd: Linking: main.elf arm-elf-gcc -mcpu=arm7tdmi -I. -gdwarf-2 -DROM_RUN -Os -Wall -Wcast-align -Wcast-qual -Wimplicit -Wpointer-arith -Wswitch -Wredundant-decls -Wreturn-type -Wshadow -Wunused -Wa,-adhlns=crt0.lst -MD -MP -MF .dep/main.elf.d crt0.o rtcirq.o armVIC.o main.o --output main.elf -nostartfiles -Wl,-Map=main.map,--cref...
Tak. Jest opisane w dokumentacji doi avr-libc. Szablon makefile posiada również taką funkcję, ale jest nieco kulawy jeżeli chodzi o make clean (dotyczy to nie tylko bibliotek) - nie usunie biblioteki, oraz plików .o i .lst wygenerowanych ze źródeł w asemblerze i C++. Każda funkcja musi być w osobnym pliku, żeby taka biblioteka miała sens. Potem dla...
1. program musi byc wpisany do ROMu, co pociaga za soba koniecznosc uzycia odpowiedniego skryptu linkera. 2. pobaw sie zworkami - moze twoj program wcale nie 'ulatuje' tylko po prostu sie nie odpala, bo bootloader cos namieszal. zworki ktore cie interesuja to te od debuggowania (JTAG) i ta od programowania przez RS-232 (IAP/ISP). 3. program aby poprawnie...
Nie wiem jak dokładnie jest w WinAMR ale musisz pewnie jeszcze zmienić skrypt linkera. Znajdź coś z .cmd Tam ustawiasz gdzie ma być program, zmienne itp. i trzeba wpisać że w ramie. Tak jest w Eclipse i działa
Czegoś tutaj nie rozumiem. Mówisz, że umiesz programować a borykasz się z jakimiś podstawowymi problemami i to może nawet nie natury programistycznej a zwykłej logiki. Zastanów się, skoro podczas przepisywania programu z pamięci zewnętrznej do FALSHa procka wystąpił jakiś błąd to przecież na boga nie będzie zgadzać się suma kontrolna i boot nie powinien...
potrzeba jeszcze startupa i skryptu linkera. 4\/3!!
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!!
Możesz wrzucić tutaj ten skrypt linkera.
Witam, Udało mi się uruchomić STM32 z OpenOCD przez Wigglera. Problem mi jedynie sprawia debugowanie programu w Eclipse. Program ładuję przez Makefile , wszystko wygląda ok: D:\Projekty\ARM\project>cs-make program "Programming with OPENOCD" openocd -d0 -f interface/parport.cfg -f target/stm32.cfg -c init -c "fast enable "...
Dzięki, udało mi się wgrać dwa różne programy w dwa miejsca i uruchamiać je jeden po drugim. Problem mam jednak z tym, żeby tym drugim był ethernut. Niby są skrypty linkera. Oto fragment: ENTRY(_start) STARTUP(crtcomander_sam7x256_rom.o... SEARCH_DIR(.) MEMORY { rom(rx) : org = 0x00004000, len = 240k ram(rw)...
Pojawił się u mnie ostatnio problem po dodaniu w programie przerwania od Timera. Dotychczas działało wszystko super, debagowanie trybie krokowym działało bez problemu itd. Po dodaniu przerwania program również działa ale niestety w trybie krokowym...nie do końca. Gdy zatrzymam rdzeń w jakimś miejscu programu i wykonam następną instrukcję pojawia się...
C. Normalne, nie tylko w AVR ale takze dla kazdego innego procesora. Normalnie tego nie robisz, bo w linker dolacza skompilowane biblioteki - mozesz stworzyc wlasna, prekompilowana i dodac ja w skrypcie linkera.
Pozwoliłem sobie odpowiedzieć nowym postem dlatego,że częściowo problem rozwiązałem. Mianowice kolega michalko12 skompilował moje pliki, ale w makefile zmienił optymalizację z 0 na s i dlatego powstały hex działa. Sprawdziłem i okazuje się że optymalizacja ustawiona na 0 i 1 kompiluje niedziałającego hex'a natomiast 2, 3 i s kompiluje hex'a który działa....
Witam wszystkich. Chciałbym napisac bootloader dla uC PIC24J128GP506, w związku z tym mam parę pytań. Stworzyłem sekcje bootloadera w skrypcie linkera. Czy możliwe jest przechowywanie zmiennej w pamięci programu ( wersja Firmware) ? Czy muszę stworzyć osobną sekcję, w której będę przechowywał tą zmienną ? Narazie zrobiłem, że po resecie następuje skok...
Nie może dawać warninga - inicjowanie zmiennej globalnej jest zgodne ze standardem języka, a że inicjujesz 0, czyli wartością jaką zmienna i tak będzie miała to tylko dlatego, że to szczególny przypadek. W dodatku to, że pomijana jest inicjalizacja zmiennej w przypadku kiedy jest ona jawnie inicjalizowana przez programistę nie jest wynikiem działania...
Witam Programowalem troche w avr. Obecnie bawie sie lpc. Pracuje na keil. Mam pytanie odnosnie oscylatora kwarcowego. W AVR po zamontowaniu kwarcu nalezalo skonfigurowac odpowiednie fusebity m.in. wartosc czestotliwosci oscylatora. Pytanie tyczy sie mikrokontrolerow lpc z rdzeniem arm7 czy arm9. Czy istnieja fusebity dla tych mikrokontrolerow ktore...
Ze względu na niemożność umieszczenia pod dowolnym adresem tablicy wektorów przerwań takie działanie jest praktycznie niemożliwe. Niezależnie od tego wymagałoby sporej żonglerki skryptami linkera. Napisz lepiej co chcesz osiągnąć, będzie łatwiej doradzić. Chodzi ci o to, aby się zabezpieczyć przed sytuacją, w której nadpisany program jest błędny i nie...
Używasz IARa, nie znam tego środowiska. Pewnie w opcjach projektu, albo trzeba grzebać po startupach lub skryptach linkera. 4\/3!!
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...
Oczywiście że by poszedł, a nawet taki z Cortex-M3, bo pomiędzy M3 a M4 różnic generalnie nie ma na poziomie startupu czy skryptu linkera. Powiem więcej - jeśli weźmiesz kod na dowolnego Cortexa (może być nawet M0!), zmienisz adresy (i ewentualnie rozmiary) pamięci na prawidłowe i wywalisz kod specyficzny dla mikrokontrolera (np. RCC, PLL, GPIO) to...
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 - FreeRTOS nie wymaga generalnie niczego specyficznego od startupa czy skryptu linkera. Jedyna zmiana "na stałe" może być wprowadzona w tablicy wektorów (czasem znajdującej się w pliku startup) - nazwy używanych przez FreeRTOS przerwań mogą być przypisane na sztywno. Ewentualnie rozmiary stosu, ale to w każdym projekcie i tak trzeba zmieniać. 4\/3!!
Domyślnie M64 i M128 sprzedawane są z włączonym bitem kompatybilności z M103 (M103C jest równy 0). W tym trybie żaden program na M64 i M128 nie może działać, bo inaczej wygląda przestrzeń IO i początek SRAM. Także skasuj ten bit (==1!), skompiluj aplikację pod M64 i musi działać. Jedyny wyjątek - masz poważnie skopane w systemie skrypty linkera.
Bierzesz przykładowy projekt z mojej strony, wrzucasz do tego FreeRTOSa - czyli dodajesz katalogi FreeRTOSa do odpowiednich pól w Makefile: [syntax=bash]# additional directories with source files (absolute or relative paths to # folders with source files, current folder is always included) SRCS_DIRS = FreeRTOS FreeRTOS/portable/GCC/ARM_CM3 FreeRTOS/portable/MemMang...
Uruchom mikrokontroler w trybie bootowania (coś tam zwarte do masy) - pewnei odzyskasz komunikację z programatorem. Napisz dokładnie, co zrobiłeś i pokaż kawałki kodu. Typowo relokacji tablicy adresów wyjątków używa się przy własnym bootloaderze. Nie rusza się wtedy mapy sekcji, a tylko zmienia bazę pamięci FLASH w skrypcie linkera. No i wyjaśnij, jak...
Nie uda ci się. Aby zrobić elfa musisz mieć pliki obj. Asembler z AS tworzy obj-ty, ale to nie są obj-ty rozpoznawane przez linker. W efekcie droga do elf jest karkołomna - należy wynikowy hex przekonwertować na obj (objcopy), a ten zlinkować, dbając po drodze o użycie właściwych (czytaj napisanych przez siebie) skryptów linkera. Druga możliwość - prostsza...
Program ładuje się tam "gdzie" jest skompilowany - czyli zależy to od skryptu linkera. Debuggowanie może być też utrudnione (niemożliwe?) jeśli użyłeś dziwnych/złych opcji kompilacji i linkowania. Z tego względu standardowo proponuję rozpocząć od przykładów pobranych z mojej strony - po ich zaimportowaniu do Eclipse mają wszystko skonfigurowane jak...
Z tego co zdazylem sie zorientowac to nie ma mozliwosci zapisania pierwszych 4 lub 2 stron (w zaleznosci od wielkosci ich wielkosci). Wiec musialem zrobic maly bootloader i upgrade robic od 4 strony. Co wiazalo sie z 2 rzeczami (korzystam z bibliotek STMa): Ustawieniem wektora przerwan tam gdzie startuje moja aplikacja. NVIC_SetVectorTable( NVIC_VectTab_FLASH,...
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...
__flash adresuje w obrębie pierwszych 64 kB, __flash1 w obrębie kolejnych 64 kB itd. Operator (at) pobiera prawidłowy 24-bitowy adres, stąd nie ma już potrzeby korzystania z makra GET_FAR_ADDRESS. Położenie danych w pamięci można zmieniać ręcznie przesuwając sekcje, lub przez zmianę skryptu linkera. Należy jednak pamiętać, że __flash "zawija" się na...
Witam. Mam podobny problem w Eclipse. Skopiowałem do projektu skrypt Linkera, dodałem w nim fragment [syntax=c] .XMEM 0x801100: { *(.XMEM*) PROVIDE (__heap_start = .) ; } > data [/syntax] w miejscu zaraz po fragmencie: [syntax=c] .noinit : { PROVIDE (__noinit_start = .) ; *(.noinit*) PROVIDE (__noinit_end = .) ; _end = . ; /*PROVIDE (__heap_start =...
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.
Cześć: template_CortexM_flash.ld:34: syntax error Pokaż ten skrypt linkera. Czy wybrałaś konkretny model mikrokontrolera w ustawieniach projektu? Możesz załączyć projekt do wglądu?
Najlepiej pokaż ten skrypt linkera. Nie używałem coocox ale może też pokaż konfigurację mikrokontrolera bo może wybrałeś zły/nie wybrałeś go w ogóle.
Witam, Proszę o pomoc w konfiguracji CoIDE dla procesora nie wpieranego w moim przypadku jest to STM32F217VGT6. Oczywiście dla procesorów wpieranych jak STM32F103 konfiguracja jest banalna (włączenie CMSIS core i boot, RCC, Flash itp). Dodatkowo można dorzucić ręcznie biblioteki np USB i wszystko śmiga pięknie. Niestety dla nie wpieranych konfiguracja...
Chciałbym wiedzieć jak uzyskać w programie $FF48$? zamiast $0028FED2$ ? W programie wyświetlasz adres pod którym kompilator/linker umieścił dane. Nie widzę sensu na tej podstawie sprawdzać jego poprawności. Jak chcesz inny wynik to zmień sobie skrypt linkera.
Pokaż startup i skrypt linkera.
Sprawdź 65. linię kodu - tam zapewne masz błąd. Może to być też problem 7 linii skryptu linkera.
Zasilacz jest dobry, stawiałbym bardziej na jakieś zakłócenia od sterownika silnika krokowego. Sprawdzę na oscyloskopie. Na razie podaję jawnie adresy. Mam pełną kontrolę. Użycie struktury to dobry pomysł, tylko, czy wtedy pierwsza zmienna jest na początku eeprom, czy nie jest to określone? No i jak będę chciał dołożyć coś między obecne zmienne, a...
A co na to system Unix? Bez znaczenia co na to system Unix, ponieważ w nim nie korzystasz z kompilatora skonfigurowanego na "multilib" i nigdy nie używasz tam ręcznie podanego skryptu linkera. Mam tu na dysku z 10 projektów w których używam funkcji z math czy generalnie z libc i w ŻADNYM te biblioteki nie są linkowane ręcznie.
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...
Proponuję poczytać o skryptach linkera. Jest wiele stron łatwo znaleźć przez google. A co w tej sytuacji poprawiłaby ta zmiana skryptu linkera?
Zerknij tutaj: script.sct to skrypt linkera. W pliku startup.h przy deklaracji stosów jest wykorzystany atrybut zero_init .
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...
AC6 Nie jest kompilatorem tylko zbiorem pluginów do Eclipse. A kompilatorem jest gcc. QT również w tym przypadku używ gcc tak więc coś masz po prostu źle ustawione we frameworku. W jaki sposób są ustawiane całe obiekty zależy od skryptów linkera. Tak, że wnioski wyciągnąłeś błędne w obydwu wypadkach.
Nie widzę sensu wynajdowania koła na nowo skoro jest RTOS, uRTOS, itp. Projekt ma troche inny charakter niż te co wymieniłeś, ma być względnie mały i tylko na PIC18. Przynajmiej na chwile obecną. Wielkiego konfiguratora chyba nie będzie... bo jednak programista się musi orientować ile czego potrzebuje, ale: 1. Napisałem już program który szacuje zużycie...
konsolidator domyślnie ustawia stos na koniec RAM nie wiem gdzie domyślnie bo jakoś mi się nie chciało nigdy zrobić -verbose bez skryptu linkera. Ale mozesz sprawdzic i sie z nami podzielić
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.*...
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. Używam PIO, ale nie z STM32, więcej szczegółowych...