To że generowane jest przerwanie i kod się zawiesza nie jest winą OpenOCD tylko kodu... sub.w sp, sp, #24576 ; 0x6000 sub sp, #32 w tym miejscu funkcja alokuje sobie na stosie 24576 + 32 bajtów - nie sądzę aby twój stos to przeżył... 4\/3!!
prawoklik na katalogu webserver -> properties => C/C++ Build -> odhacz exclude from build
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...
Próbuję pożenić template Freddiego (stm32_blink_led) z StdPeriph Ale to widziałeś? http://www.freddiechopin.info/pl/artykul... Ma ktoś pomysł co może być nie tak ? W skrypcie linkera należy ustawić rozmiar stosu dla przerwań - domyślnie jest zero, co zwykle źle się kończy. Ustawiłeś...
Zastosować structure, nie licz na powtarzalność działań linkera.
malloc rezerwuje bloki pamięci na stercie poprzez _sbrk_r() z syscalls.c. Sprawdź czy sbrk zgrywa się ze skryptem linkera.
Skoro tak to spróbuj ręcznie. Patrzysz na listę błędów, znajdujesz po kolei pliki w bibliotece i dołączasz je do projektu. Nie znam iar, ale w eclipse keilu reisonanse nie wystarczy skopiowanie do wspólnego folderu, trzeba zrobić add...
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...
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...
Zajrzyj do skryptu linkera, zobacz jaki jest rozmiar stosu. 4\/3!!
Witam! Chcę wgrać parę danych do pamięci mikrokontrolera STM32F107 (ustawienia domyślne). Nie wiem za bardzo jak powinien wyglądać kod linkera do takiego zapisu? Korzystam z CodeSourcery ze strony Freddiego. Nie posiadam debuggera, więc kod mogę wgrywać tylko poprzez bootloader na USART. Pamięć chciałbym zapisać paroma danymi 32bit, a następnie mieć...
Tylko w tablicy wektorów musisz poprawki wprowadzić. Skrypt linkera nie ma tu znaczenia. 4\/3!!
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...
W skrypcie linkera masz zadeklarowaną zbyt małą pamięć. 4\/3!!
Czy działa Systick to łatwo sprawdzić w debuggerze. Zresztą wiele spraw można sprawdzić. Ja bym zaczął od tego czy właściwe rejestry podlegają zmianom. To nie jest nic trudnego, w krokowym trybie Też jaka wartość jest SystemCoreClock, to zmienna globalna. Może ląduje gdzieś w HardFault, zaraz po uruchomieniu. EDIT. Często problemem przy kopiowaniu plików,...
A w kontekście licencji to na stronie jest napisane: Simplified BSD Licence, GNU GPL v2, GNU GPL v3, GNU LGPL v2.1, GNU LGPL v3, MIT / X / Expat Licence Czyli mimo iż może nie czyste BSD to i tak otwarte i darmowe. Ale zrozum, że żaden "packager" nie może zmienić licencji komponentów. Licencja pakietu CodeSourcery jest identyczna jak dowolnego innego...
Tylko tych funkcji będzie bardzo dużo, najlepiej żeby to dodać do całych plików, bo raczej do katalogu się nie da z poziomu gcc Jeśli te funkcje umieścisz w jednym pliku, to powstanie z nich jeden plik obiektowy. Wystarczy dopisać do makefile linijkę wywołującą dla niego objcopy i zmienić nazwę segmentu .text, a potem linkerowi podać gdzie ta sekcja...
(...) ustawiłem wektor przerwań i początku pamięci flash w linkerze z odpowiednim offsetem (0x3800) Co to za magiczny offset? :D
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...
To zależy od środowiska, którego używasz - w dialogu ustawień projektu, załadka linker, albo w pliku definicji pamięci dla linkera.
Ja mam tak: __attribute__ ((section(".bootloader&... int program_page(unsigned short *data, unsigned int adr) {... } i linker: .bootloader 0x08000000+128K-1K : { *(.bootloader) } i działa
Darmowa wersja Keila dla STM32 (a w zasadzie linker) obsługuje maksymalnie 32KB kodu. Jeżeli chcesz więcej, to szykuj cca 10 000pln na MDK-Basic, który pracuję do 256KB :)
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!!
błąd już w trzeciej linii. Dodatkowo potrzebujesz plik asm z wektorami i plik linkera aby to wszystko zebrał do kupy. Bez tego żaden program się nie uruchomi :) Po co się katować? Zaznacz Stm32Cube project. Jak nie chcesz HAL to skasuj jego pliki. będziesz miał wszystkie **aktualne** pliki CMSIS, statup i pliki linkera.
Sprawdź 65. linię kodu - tam zapewne masz błąd. Może to być też problem 7 linii skryptu linkera.
Panujesz nad stosem w skrypcie linkera ?
Pokaż startup i skrypt linkera.
Ok, łapię:) Ale compilator musi wiedzieć które pliki skompilować (tworzy pliki obiektowe?) a linker musi wiedzieć które pliki połączyć. Dołącza się plik nagłówkowy plik.h, który zawiera deklaracje funkcji, ale same funkcje są w pliku .c, jak on jest dołączany? Poza tym potrzebne sa wyliczenia fizycznych adresów funkcji - to robi także linker?
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?
Tak, dokładnie o to chodziło.
Dlatego mam pytanie. Czy przewidujesz udostępnienie osobnej wersji dla F103xB (ewentualnie też xC) ? Najpierw planuję zrobić wersję na układy z USB OTG. Czy masz może jakąś gotową propozycję na "ścieżkę postepowania" by jak najprościej otrzymać z tych narzędzi kod przesunięty pod Twój bootloader? W skrypcie linkera nie można tego ustawić? Albo zerknij...
Ok. Przeszukaj pliki w swoim projekcie po nazwie "SysTick_Handler". Znajdziesz tą nazwę w pliku asemblerowym (lub w pliku *.c) w tablicy wektorów przerwań. Ta tablica zawiera między innymi adres funkcji o nazwie SysTick_Handler. Linker umieszcza tablicę pod odpowiednim adresie w pamięci (zgodnie z datasheet procesora).
A kiedy będzie projekcik dla STM32F107 ;) ? A tak na poważnie to czy aby dostosować projekt przeznaczony dla STM32F103RB do konkretnego STM32 to wystarczy w pliku linkera poprawić wartości pamięci, a w przypadku pliku z wektorami przerwań skorygować nazwy przerwań i dostosować to występujących dla danego mikrokontrolera ?
Witam Dostałem zadanie od wykładowcy wy wykonać pewien projekt na STM32f0 jako że KEILA nie trawie próbuje zmienić przykład freediego tak by pasował do tej płytki. Wstawiłem pliki: core_cm0.h core_cmFunc.h core_cmInstr.h stm32f0xx.h system_stm32f0xx.h Plus startup eddiego od LPC1114 oraz zmiany w linkerze rozmiarów pamięci plus zmiany w funkci main...
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...
Ś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...
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...
Fajnie by było jakbyś podał też więcej konkretów, może sam program nie działa ? Może układ elektroniczny jest zły? Generalnie jak freddie napisał wystarczy skrypt linkera
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 :...
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 *)...
Ok, ale rozumiem w takim razie, że to ma niewiele wspólnego już z wynikową binarką, skokiem do programu itp. i ja nie powinienem tego uwzględniać z poziomu bootloadera wiedząc, że na sztywno program zaczyna się od 0x8002000. To bardziej wartość dla parsera ELF / linkera...
Ta linia: [cc] 0 total files to be compiled. Powinna Ci dać do myślenia. Pokaż więcej plików z Twojego projektu (Makefile, źródła, skrypt linkera).
to aplikację możny łatwiutko skompilować jako "wolnostojącą" lub ładowaną i uruchamianą z loadera. Dokładnie, wystarczy zmieniać tylko adres bazowy głównego programu w skrypcie linkera.
To trzeba w linkerze dopisać jeszcze jedną pamięć ?
A ustawiłeś sobie rozmiar stosu dla przerwań (w pliku linkera)? 4\/3!!
Przejrzałeś choć mój makefile i opcje tego pluginu przed pytaniem? W moim makefile opcje odpowiedzialne za to są podane WPROST - ffunction-sections (kompilator), -fdata-sections (kompilator) i -gc-sections (linker) - teraz tylko je znajdź w parametrach plugina. Są tam na pewno, bo osobiście pisałem patch'a, który by je tam dodawał. Pozatym, ile razy...
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!!
Jaki masz skrypt linkera, syscallsy i rozbiegówkę?
Uruchomienie biblioteki stm32 z moimi przykładami sprowadza się do dodania folderów źródeł, nagłówków i jakichś wymaganych deklaracji. Z FreeRTOSem pewnie będzie tak samo... [; 4\/3!!
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...
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...
Faktycznie w datasheet zakres pamięci flash dla tego STM'a to 0x4002 3C00 - 0x4002 3FFF. Bzdura Flash zaczyna się od 0x8000000. Gdzie można zmienić ten adres w eclipse ? W skrypcie linkera
A w skrypcie linkera sekcja z atrybutem KEEP? Wtedy nie powinien tego odśmiecacz wywalić, i potem po prostu sekcja #pragma? :/ Nwm tak sobie pomyslałem. Może zadziałać :D Zawsze też możesz zapisać coś do flasha pod odp oadresem jeden raz a potem to będzie. Jeśli zapiszesz to we fragmencie pamięci którego programator nie wyczyści :/ Edit: Pozwolę sobie...
To być może cała filozofia jest przestarzała, może kompilator i linker powinny działać jednocześnie i wymieniać między sobą informacje?
Mnie właśnie przydałby się sam scheduler, bo koncepcja działania peryferiów często bardzo zależy od użytego układu i samego projektu. Może powinieneś rozdzielić ten projekt na dwa, jeden to czysty scheduler i drugi projekt to cały system który z kolei jest oparty o ten pierwszy projekt. Zauważ, że im bardziej rozbudowany będzie ten projekt, tym trudniej...
Jaki komplilator? Jeśli gcc to skąd wziąłeś implementację sbrk() i czy na pewno pasuje ona do pozostałych plików (szczególnie skryptu linkera)? 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...
Kompilator języka C (zakładając poprawną konfigurację projektu/make'a) nawet jakbyś wrzucił milion niepotrzebnych plików, to wyrzuci z nich funkcje, których nie używasz (tak zwany martwy kod). Nie będą więc one w kodzie wynikowym No tak, ale np. gcc zrobi tak tylko gdy wywołasz go z flagami -ffunction-sections i -fdata-sections. A jeszcze potem trzeba...
No ale zrozum, że w każdym module w którym includujesz ten plik tworzy się kolejna kopia tej zmiennej a linker podczas linkowania próbuje ustalić adres takiej zmiennej i stwierdza, że ma kilka o takiej samej nazwie więc zgłasza błąd. Do tego co ty chcesz uzyskać służy słowo kluczowe extern
Linker nie widzi tych funkcji, które są wypisane, napewno zaincludowałeś przed main-em te fragmenty bibliotek od ST, które zawierają te funkcje?
Moim zdaniem po prostu brakuje jakiejś opcji kompilatora/linkera/objdump (ewentualnie zawartość skryptu linkera, ona też ma tu znaczenie), ponieważ w moich projektach w plikach .lss mam co trzeba: ... bytesWritten = {}; 225200:2500 movsr5, #0 225202:e7f0 b.n2251e6 <(anonymous namespace)::SerialHandle:...
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ś...
Tak, właśnie dla samego edytora. Kompilator Keila daje lepiej skopilowany kod. Jak się używa małych procków to jaki jest problem? mickpr Co masz na myśli mówiąc o Linkerach i skryptach oraz "dziergniu"?
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...
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)...
Zademonstruję Ci: Nowy projekt w Atollic for STM32: Bez modyfikowania skryptu linkera: https://obrazki.elektroda.pl/4714547300_... A teraz Twoje przezroczyste przypisanie: https://obrazki.elektroda.pl/8906289200_... Dopiero po dodaniu do skryptu linkera: https://obrazki.elektroda.pl/4995382700_...
do "cudownego" ide eclipse dla stm32. To nie wina IDE, ale osoby importującej (czyli Ciebie). Podam Ci najprostszą metodę: Zrób nowy projekt dla swojego procesora. Wywal wszystko oprócz pliku linkera. W eksploratorze windows Copy cały wszystko co jest w projekcie (najperw usuń pliki konfiguracyjne cocoxa czy czegos tam innego). Prawy klawisz myszki...
Witam po raz ostatni. Pomogło wykorzystanie Twojego skryptu do spółki z Twoim linkerem. Bazowałem na projekcie z stm32. Działa teraz bez zarzutu. Wielkie dzięki!
Najpierw wykonaj wszystkie kroki zawarte w opisie Pierwszy projekt w Open Source. Programy będą działać, ale po modyfikacjach. Trzeba zmienić rozmiar pamięci w skrypcie linkera (LENGTH). Zamiast STM32F10X_CL musi być STM32F10X_MD, bo STM32F103C8 ma 64KB Flash. Poza tym STM32F103C8 nie ma portu E, więc w programie musisz wszędzie gdzie jest GPIOE zmienić...
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.
tadzik85 napisał: Jednak istotnym mankamentem w przypadku ST jest fakt, że wartość kopiowana nijak ma się do ustawień w linkerze. ? Chodzi o to, że do vectora przerwań trafia wartość SP wynikająca z linkera, a w startupie wprost ustawiany jest RAM_END,
Twoja linijka od linkowania jest błędna. Biblioteki _MUSZĄ_ być na samym końcu, po wszystkich plikach obiektowych - tak działa linker. W ogóle to połowa flag które przekazujesz linkerowi nie ma dla niego znaczenia.
Pierwsza opcja to oczywiście zdefiniowanie NAPRAWDĘ DUŻEGO stosu, ale to średnie rozwiązanie jak wiadomo [; Do rozbudowanej aplikacji na ARMa myślę że należy liczyć minimum 1kB, jeśli używa się jakichś potwornych funkcji standardowych (printf!) i to głęboko to lepiej zaopatrzyć się w 2kB (o apetycie tych funkcji na pamięć pisałem ostatnio http://www.elektroda.pl/rtvforum/topic13...
Od kiedy można było kupić ARM w postaci układu scalonego u jakiegoś dystrybutora, tak jak kupuje się teraz STM32, SAM czy AVR 8051? Od kiedy w mniejszych czy większych ilościach można było kupić PPC, ColdFire?
chce go uruchomić na tym: http://allegro.pl/stm32-plytka-prototypo... Kodu w sumie zadnego nie spłodziłem. W przykładzie choppina zakomentowałem jedynie samą zawartość pętli while by nie mrugała diodami. | Yagarto w sumie działało to co miało działać. Kod w całości debugował się. była praca krokowa itp. A w tym...
Problem jest podczas linkowania. Chodzi o flagi kompilacji: [syntax=c] -ffunction-sections -fdata-sections [/syntax] Oraz o flagi linkowania: [syntax=c] --gc-sections [/syntax] Nie znam tego IDE ale powinienes sie przyjrzeć skryprowi linkera. Powinno być tam miej więcej coś takiego jak: [syntax=c] KEEP(.vectors) [/syntax] vectors powinieneś mieć w rozbiegówce...
Deklaracja jako extern "C" zmienia tylko specyfikację interfejsu binarnego funkcji, a konkretnie sposób wywołania i przekazywania argumentów oraz sposób generowania nazw symbolicznych dla linkera (po polsku: konsolidatora :) ). Ale nie zmienia to języka źródłowego, tzn. jest to dalej C++.
O adresy kodu chodzi, a nie danych. Adresy kodu mają wpływ na akcelerację dostępu do Flash. Pętla zaczynająca się od adresu podzielnego przez 16 ma szansę wykonywać się szybciej, niż taka od adresu np. 16x + 14. Nie sądzisz chyba, że kompilator przy wyłączonej optymalizacji zrobił dwie różne wersje tej samej funkcji, a linker umieścił je w zupełnie...
Proszę bardzo: Program jest taki prosty testowy: #include "stm32f1xx_hal.h" int main(void) { HAL_Init(); while (1) { }; } A oto Build Log: Komunikaty występują przy kompilacji plików: - stm32f1xx_hal.c - stm32f1xx_hal_cortex.c - stm32f1xx_hal_flash.c - stm32f1xx_hal_gpio.c - stm32f1xx_hal_rcc.c ----------------Make...
Piszemy tak nie bez powodu: instalacja bez pluginu nie jst prosta szczególnie jak trzeba sobie wszystko poustawiac, a nie zna sie jeszcze struktury plików, skryptów linkera itp. Dlatego proponujemy cos co "poprowadzi za rękę" www.freddiechopin.info
Czyli nie ma żadnej przeszkody, żeby w tablicach globalnych oznaczonych jako const przechowywać duże zawartości danych ? chciałbym w takich tablicach trzymać rysunki do wyświetlacza LCD. Skoro zostaną one umieszczone w flashu to nic nie stoi na przeszkodzie, żeby zajmowały nawet z 200 kB? (o ile nie przekroczę wolnej pamięci flash oraz pewnie zadeklarowanej...
Zdaje się, że pominąłeś deklarację typu elementu tablicy jako char, czyli są inty. Więc ten napis chyba tam jest, tylko litery będą oddzielone zerami. Spróbuj dodać tam char, np. static const char test[] = {...} Nie było żadnych ostrzeżeń kompilatora w tej linijce? Druga opcja jest taka, że linker wyrzuca tą tablicę ze względu na brak odwołań, ale wtedy...
Tak, zależy mi na stałym umieszczeniu we flash, a wgrywane programy nie przekraczałyby 64kB. Wymyśliłem jeszcze taką wersję ;) żeby program kompilować do pliku binarnego i potem składać całość w "ręcznie". Choć wolałbym nauczyć się pracować na linkerze i poznać więcej informacji o nim. Jak dokładnie (krok po kroku) np.umieścić dane w oddzielnej sekcji...
wiesz - moze jest cos o czym nie wiem, niemniej jednak dla testow sprawdzilem taki ultra proty kod (bez startupa i innych bajerow, po prostu jakis main i jakies operacje) i wygladalo w miare ok. moze biblioteki sa jakies dziwne i nie beda dzialac na stm? tak czy siak zamiast toolchain'a yagarto mozna sciagnac toolchaina codesourcery, ktory oficjalnie...
Pokaż te zmienne w kodzie oraz skrypt linkera.
Przecież ten układ nie ma FPU, więc flagi kompilacji są zupełnie bezsensowne... Wystarczy samo -mcpu, -march jest zbędne. Flaga "-nodefaultlibs" dla linkera też jest dziwnym pomysłem, biorąc pod uwagę fakt, że w tych "default libs" jest pewnie nawet dzielenie liczb całkowitych.
Jest to do zrobienia, ale wszystko zależy od tego jak bardzo jesteś biegły w posługiwaniu się C, kompilatorem i linkerem. Jak to może być rozwiązane to możesz sobie podpatrzyć w dokumentacji np LPC1549, tam są biblioteki ROM i stamtąd możesz czerpać inspiracje.
http://www.elektroda.pl/rtvforum/viewtop... Masz tu wędkę, ale haczyk musisz sam zaczepić ;) A następny razem zamiast obrażać Forumowiczów albo kompilator, to użyj wyszukiwarki na Forum albo skopiuj wszystkie pliki projektu do nowego folderu, wstaw odpowiednie inkludy i wskaż linkerowi gdzie są pliki. Pozdrawiam, Marek
(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...
nie kompilator, a linker. Słowa kluczowe section i region i makefile . W mapach pamięci wlasciwe dane uklada nie kompilator, a linker. Jemu musisz powiedzieć, jak poukładać sekcje i regiony w obrębie dostępnych adresów...
Dzięki za schemat widziałem jakieś na chińskich stronach, ale mi się nie udało tego ściągnąć, bez logowania. Jeśli chodzi o JTAG to jeśli udałoby się go uruchomić to mógłby być przydatny. Ale też na początek prostsze może wydawać się przetestowanie tego SERDB po I2C po pinach UARTU, który też daje dostęp do rejestrów RIU. Więc możnaby je monitorować...
Dzięki za odpowiedź! Udało się całość skompilować. Przykład jest dostarczany przez STM jako "STM32F107xx connectivity line Ethernet low-level driver and web server demonstration based on uIP TCP/IP stack". Co do podwójnego includowania tych plików. Należy przenieść dwie ostatnie definicje (z samego końca pliku) z fsdata.c do fs.c (zaraz po include)...
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!!
Trzeba tylko przerobić tablicę wektorów. W każdym razie - zajrzyj do skryptu linkera i poczytaj ze zrozumieniem komentarze przy wartościach które są tam na górze. 4\/3!!
Ustawiasz w skrypcie linkera tak aby wszystko trafiło do RAM, a nie do flasha i to wszystkie zmiany jakie musisz wykonać, jednak ja wciąż sugeruję nie przejmowanie się żywotnością pamięci Flash - więcej z tym problemów niż "korzyści". 4\/3!! Jeszcze musi przestawić zworkę ! :P
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...
http://www.elektroda.pl/rtvforum/topic13... http://www.elektroda.pl/rtvforum/topic13... Na początek może pożegnaj się ze starociami i zainstaluj coś nowego (CodeSourcery). Co do reszty: Moim zdaniem nie ma sensu pisanie samemu tych plików, ale warto rozumieć co i dlaczego tam jest. Szczególnie nie warto pisać ich "tylko pod konkretny zestaw",...
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.
Szukam przykładów programów dla środowiska WinArm na procesory ARM z rdzeniem Cortex-M3 rodziny STM32 firmy ST Microelectronics. Głównie chodzi mi o skrypt linkera, makefile i plik startowy.
Jednakże nie wierzę, że mogę to wrzucić gdziekolwiek. Skąd procek będzie wiedział, że to jest to konkretne przerwanie? No cóż, nie jestem specjalistą ds. wiary, niemniej jednak nie masz racji. "Procek" (a raczej linker) będzie wiedział co z tą funkcją zrobić, bo wpis do tablicy wektorów i ta funkcja ma TAKĄ SAMĄ NAZWĘ. Pomyśl o tym tak - w jakim pliku...
linker stm32 stm32 skrypt linker linker error
kuchenki amica pokrętło zegara sterownik pompy głębinowej napięcie przewodzenia diody
panasonic toyota citroen berlingo
Wzmacniacz WS 432 - wpływ pętli masy na buczenie Regulacja pompki oleju w Oleo-Mac 937 - ustawienia fabryczne