Startup bez zmian. Skrypt linkera - zmienić rozmiar pamieci. Tablica wektorów - poniżej. 4\/3!!
Przeczytaj ten wątek i kup sobie inną płytkę. Co ma płytka wspólnego z tym problemem. Jak tablica wektorów jest zła to nic nie pomoże. Nawet zrobiłem porównanie STM-owego nagłówka z tym autora.
Może inaczej przerwanie jest to wystąpienie określonego zdarzenia . Wektor przerwania to miejsce (adres fizyczny w pamięci programu do którego przechodzi mikrokontroler po wystąpieniu określonego przypadku) generalizując tablica wektorów zazwyczaj zawiera jedynie skoki do pod programów obsługi przerwania . Tak bardziej obrazowo siedzisz przed komputerem...
To akurat nie jest tablica wektorów tylko procedura obsługi DH. Nie możesz sobie plików z jednego procesora do drugiego. Tylko taki z twojego. Ponieważ nie wiem jaki jest on dokładnie to masz przykładowy:
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).
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...
Popatrz bardzo dobrze na te linijki: GPIOA->MODER = (0x01 < (2 * 0)); //Pin PA0 jako wyjście //GPIOA->OTYPER &= ~(1 < 0); //Pin PA0 jako Push-Pull GPIOA->OSPEEDR = (0x03 < (2 * 0)); //Pin PA0 jako High Speed Tablica wektorów ma marginalne znaczeni dopóki nie używasz przerwań - bez nich wykorzystywane...
Po łebkach opisany algorytm... 1.Rysowanie wektora robisz tak a)rysujesz kreskę b)rysujesz trójkąt na końcu (pozycję obliczasz z wykorzystaniem zamiany wartości x/y c)wypełniasz trójkąt czarnym kolorem d)jeżeli jest włączona opcja przesuwania wektora to dodatkowo rysujesz 3 kólka (na początku, na środku do przesuwania całego wektora i na końcu) 2.Dane...
:) Kto szuka nie (ten) błądzi. Dzięki za cierpliwość. Na chwilę obecną przyjmę to za pewnik. Temat jednak pozostawiam otwarty. Jeśli ktoś z czytelników rozumie mą rozterkę i potrafi mi wyjaśnić dlaczego tak a nie inaczej...to proszę się nie krępować :D PS Szczerze mówiąc dziwi mnie trochę to, że Ciebie jako fana logiki nie zastanawia pozorna bezsensowność...
BoskiDialer -> widzę, że jesteś niezłym magikiem bo twoje makefile jest w ogóle nie podobne do tego generowanego przez AVRStudio. Ale spróbowałem tak z ręki skompilować ten twój bootloader: make bootloader i niestety dostaję błąd: makefile:28: *** missing separator. Stop Czy magik to nie wiem, ale ten Makefile nie zadziała. Na początku linii 28 masz...
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ś...
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...
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...
Pytanie trochę filozoficzno - humorystyczne. Czy chodzi o to aby oszukać oszusta? ;) Wówczas w Cobrze1 będzie dwóch oszustów? Domyślam się, że twórcy COBRA1 umieścili kod startowy od adresu 0xc000 ponieważ gdyby ROM zaczynał się od 0x0000, adresy wektorów przerwań byłyby na stałe w ROM i program użytkownika nie mógłby ich modyfikować. Program wykonywany...
Jeżeli nie ma obsługi przerwania to nastąpi reset układu. Dodać należy, że nie będzie to dokładnie reset taki jak w przypadku pinu RESET, czy włączenia zasilania. Będzie to jedynie skok do początku programu, co wynika z kodu przygotowanego przez kompilatora C. Tablica nieużywanych wektorów przerwań jest bowiem wypełniona skokami do __bad_interrupt...
Tzn. linię: KEEP(*(.vectrs)); ? I ją wstawić do nowej sekcji? Dokładnie.
Witam, Szczerze to nie kapuje tego pomysłuu z pamieciami nieulotnymi. Rozumier jak mozna zrealizowac komperator na uC, pojedynczych bramkach., czy ukłądach PLD, w sumei miedzy tymi 2 ostatnimi wersjami nei ma zadnej róznicy. Ale na pamieci EEPROM??? Zupełnei nei rozumiem koncepcji. przecież to proste i chyba oczywiste jeśli pamięta się, iż pamięć nieulotna...
Kod w obszarze wektorów przerwań jest jak najbardziej bezpieczny, dopóki przerwania nie zostaną włączone. Czasem tak się robi, gdy zaczyna brakować flasha. Stos trzeba koniecznie zainicjalizować, żeby można było używać CALL i RET. RET powoduje powrót do miejsca z którego podprogram został wykonany. call podprogram ; ret wroci tutaj (reszta programu)...
Witam;) Jeśli chodzi o nadawanie kodu cyfr klawiaturki zestawu to pisałem jakiś czas temu taki program w ramach zaliczenia tegoż przedmiotu. Podejrzewam jednak, że chodzi o wykorzystanie np. HyperTerminal'a i podawanie znaku z klawiatury komputera. Oto program który wówczas napisałem: st7/ TITLE"starter.asm" MOTOROLA #INCLUDE "st72334.inc"...
W plikach ".cpp" extern "C" [syntax=c]extern "C" void SysTick_Handler(void) { GPIOA->MODER = 0; }[/syntax]
Nie wyliczysz tego na etapie kompilacji. Wartości są bowiem znane dopiero po linkowaniu. Powinien to załatwiać soft do programowania. Możesz też modyfikować pliki wynikowe. Albert
Cześć, Ponieważ pojawiła się prośba o możliwość udostępnienia uproszczonej wersji na inny uC to przedstawię krótką instrukcję jak dostosować projekt do potrzeb. Generalnie w obecnej wersji obsługiwane są dwie rodziny procesorów czyli STM32F4xx i STM32H7xx - prawdopodobnie nie powinno być większych problemów z innymi podobnymi układami STM natomiast...
Tak jak pisze Freddie Chopin mozna ale to bedzie reczne rzezbienie i skladanie kodu tak by zostawic dziure... Ale to jest rzezba okropna i utrudni na pewno prace nad kodem. Takiego rzezbienia nawet w binarce jest jeszcze kilka opcji, ale to nie najlepsze rozwiazanie. Wystarczy zapełnić tą jedną czy dwie strony rzeczami które praktycznie nigdy nie zmieniają...
Co będzie błędne, bo pierwszą rzeczą jaką robi Twój program jest jednak Reset_Handler, a nie to co przypadkiem trafiło na początek sekcji .text. Co nic nie zmieni bo i tak tablica wektorów jest zapisana "na sztywno" w większości projektów. Tak naprawdę jest to wartość ignorowana jeżeli tablica wektorów jest zrobiona tak jak w większości projektów -...
Nie robisz kompletnie nic oprócz wskazania linkerowi pod jakim adresem ma być zlokalizowany kod wynikowy. Tablica wektorów przerwań która pierwotnie była pod adresem 0 znajdzie się pod adresem przekazanym linkerowi - -Wl,-Ttext,0x1e00 spowoduje, że cała sekcja .text (razem z tablicą wektorów) zostanie przeniesiona pod adres bootloadera - właśnie z tego...
Czyli jeśli w kodzie C inicjuję jedynie wektor powiedzmy ADC_vect, to jedynie w kodzie asemblerowym jedynie .org ADCaddr będzie pozbawione komentarza <__bad_interrupt>. A propos wektorów i tablicy: Czy inicjalizacja tablicy wektorów przerwań jest zależna od typu mikrokontrolera? W literaturze i w poradnikach internetowych widzę, że wszędzie wektory...
Radzę zignorować powyższą poradę... Tablica wektorów ma poprawną "formę", więc radzę jej nie psuć... Wielu osobom działa, więc nie szukaj błędu tam gdzie go nie ma. Zresztą gdyby ta część była błędna, to układ nawet by nie wystartował, wiec chyba jednak warto założyć, że nie ma tu "błędu". W tablicy wektorów popraw tylko te wektory, które są "powyżej"...
Nie dziala jest barszo ogólnym stwierdzeniem. Co nie dziala? DH? masz debuger. Coś innego? Yo tylko była tablica wektorów oczywiście.
Wydaje mi się że nie "przesunąłeś" tablicy wektorów przerwań: SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; w pliku system_stm32l4xx.c Chyba trzeba szukać dalej: Tablica wektorów jest przesunięta w bootloader: SCB->VTOR = APP_ADDRESS; Tę linię należy usunąć z tego pliku o ile nie masz zamiaru zmieniać mapowania pamięci na adres 0x0 (a...
Jak mogę Ci pomóc, skoro nie wiem jak wygląda reszta plików, a konkretnie tablica wektorów? Albo musisz wstawić swoją nazwę funkcji do tablicy, albo nazwać funkcję tak jak nazywa się funkcja z tablicy wektorów (jeśli ma atrybut "weak"). 4\/3!!
Tablica wektorow w vectors.c W tablicy wektorów nic nie trzeba zmieniać - inna tablica jest tylko w CL lub XL 4\/3!!
(at)tomeeh No jezli tak to rzeczywicie przepraszam. Ale - jeeżli tablica wektorów jest ok i wywoywane jest poprawne przerwanie - a skacze gdzie indziej to znaczy że symulator nie działa jak należy. Są dwie możliwości - sprawdzić z DS-em po tablicę wektorów i jeżeli się zgadza to sprawdzić jakie przerwanie się wywołuje tak naprawdę. Nie będę pisać jak,...
Zerknij sobie to pliku .lss i sprawdź następujące rzeczy: 1. czy w ogóle jest tam funkcja SysTick_Handler 2. czy adres funkcji SysTick_Handler zgadza się z adresem widocznym w tablicy wektorów (pod adresem 0x800003c) - adres w tablicy wektorów będzie miał nieparzystą wartość (jeśli np. funkcja SysTick ma adres 0x8001000, to w tablicy wektorów będzie...
Nie mnie wygodne niż Twoja tablica wektorów w C ;)
Tablica wektorów przestawia się sama w zależności od konfiguracji pinów BOOTx. 4\/3!!
Tylko jakim cudem tobie się tablica wektorów "sama" zmienia? Może remapujesz ową tablicę niepotrzebnie (rejestr MEMMAP)? 4\/3!!
Pytasz mnie po co jest tablica wektorów czy dlaczego jest w osobnym pliku? 4\/3!!
Witam, ze względu na używanie bootloadera w obszarze od 0x8000000 do 0x8004000, potrzebuję pozostałą część aplikacji (nazwijmy ją częścią B) umieścić w dalszym zakresie. Tak więc zmieniam adres aplikacji B oraz wektora przerwań i niestety urządzenie jest rozpoznawane w systemie. Aczkolwiek sam kod działa. Jeśli aplikacji B zmienię adres startowy na...
Skonfigurowałem w tym procesorze odbiór i nadawanie poprzez rs232. Jak stworzyć przerwanie od odbiornika? Gdzie jest tablica wektorów obsługi przerwań itp?
Dajemy 'reset' a program nie uruchamia się z bootloader-a i co wtedy? A nie uruchamia się ponieważ: włączony jest remap, przeniesiona tablica wektorów, zawiera 'byle co', nieustawiona 'power domain' itp. Mieszasz sprawy. Reset to reset. Skoro Twój układ uruchamia się po podaniu zasilania, to po resecie tez się uruchomi. Jeśli po resecie się nie uruchomi,...
Kod z użyciem samych rejestrów jest mało czytelny, trudny do ewentualnej migracji pomiędzy mikrokontrolerami itp, itd... Nie zgadzam się z Tobą. Ja piszę na rejestrach tak samo. Ten "szablon" to tylko copy paste z różnych fragmentów tego STM dostarczyło. Nie wiadomo nawet jak ta tablica wektorów wygląda i jakie są handler-y.
czekanie na dostępność EEPROM nie jest potrzebne, bo to już załatwiają funkcje odnoszące się do EEPROM Podeślij proszę do tego jakiś odnośnik, zaglądałem tutaj https://www.nongnu.org/avr-libc/user-man... oraz na dysku do bibliotek ale nie znalazłem implementacji tych funkcji, chętnie zobaczę jak one wyglądają. To co znalazłem...
A jakiś link do tego, który mas na myśli? Chociażby blink led Freddiego: https://freddiechopin.info/en/download/c... Osobna sprawa, że plik startowy musi być specyficzny dla procesora. I tak i nie. W sumie to od Ciebie zależy co umieścisz w startupie a co w funkcji main(). Najczęściej w startupie są dwie ważne...
A będziesz z takowych korzystał? <: Jest inna opcja - tworzysz dwa osobne projekty. Jedyna zależność między nimi jest taka, że ten pierwszy ("zwyczajny") może uruchomić ten drugi ("bootloader") poprzez skok pod adres początku tamtego (lub jakiś inny znany i stały adres). Projekt bootloadera będzie miał po prostu skrypt linkera w którym pamięć flash...
W skrypcie linkera muszą być zadeklarowane symbole o nazwach jak wyżej wyznaczające obszar pamięci przeznaczony dla sterty (heap). Proponuję ściągnąć projekt dla lpc2103 i przystosować postawowe pliki (startup, Makefile, skrypt linkera, tablica wektorów: lpc2103_rom.ld, Makefile, startup.S, vectors.S, hdr\hdr_cpsr.h) do swojego projektu, a większość...
No to chyba dość oczywiste. Zobacz jak się nazywają tam gdzie jest tablica wektorów No wiem ale z twojej pierwszej wypowiedzi tak wywnioskowałem, rozumiem teraz chodziło ci o plik .s w startup. Faktycznie jest tam nasz Handler nazywa się EXTI0_1_IRQHandler zmieniłem i działa Dzięki za pomoc
W sumie gdy przeczytałem Twój post uzmysłowiłem sobie, że ten startup to i tak w większości assembler, bo korzysta mocno z wstawek... Zaczynam wątpić w sens tego przedsięwzięcia W zasadzie sam sobie odpowiedziałeś, ale wrzucę swoje 3 grosze :) Według mnie pisanie startup'u w C za pomocą wstawek asemblerowych jest mało sensowne. C występuje tu w roli...
Na szczęście autor tematu używa profesjonalnego środowiska, a nie jakiejś "samoróbki", więc problemy konfiguracyjne go nie dotyczą, wszystko zawsze ustawia się dobrze. A to akurat jest napisane tam wyraznie ze jak używa sie czegoś innego niz zdefiniowane płytki w projekcie, to wstawiana jest "generic" tablica wektorów tak jak dostarczona przez ARM-a...
A tablica wektorów na 100% poprawna? Jak podejrzysz w pliku .lss wektory, to pod właściwym adresem jest adres Twojej funkcji obsługi? P.S. Ten plik na pewno jest main.c, a nie main.cpp? Bo w tym drugim przypadku faktycznie uruchomienie przerwań wymaga kilku wciśnięć klawiszy więcej. 4\/3!!
No to musisz mieć tablicę wektorów w RAM [; 4\/3!!
Oczywiście nie mam racji;). Tablica wektorów jest zdefiniowana w pliku startup_stm32f10x_md_vl.S. Teraz wystarczy, że nawet w main.c dodam sobie void USART2_IRQHandler( void ) i powinno mi to zadziałać. Gdyby coś było nie tak, to będę kontynuował temat. Dzięki za wskazówki!
Co trzeba w nim zmienić poza wpisaniem rozmiaru ram i flash ( flash - 512K; ram - 64K ) w skrypcie linkera aby uruchomić go na STM32F103ZE. Prawdopodobnie nic. Sprawdź jedynie czy tablica wektorów przerwań jest taka sama w obu modelach.
Program chodzi doskonale na Mega32. Ale kod jest na tyle mały, że zmieścił się do bliźniaczej Mega16. Na pierwszy rzut oka identyczne oprócz wielkości pamięci. Różnice są głębsze niż tylko pamięć: - zupełnie inaczej ułożona tablica wektorów przerwań. - inne umiejscowienie bitów w rejestrze MCUCR. choć przy ponownej kompilacji programu pisanego etykietami...
Startupy w C są w paczce z biblioteką ST Standard Peripheral Library - gdzieś tam są schowane. Zobacz ten startup w asm, poczytaj co tam jest zrobione i zrób to samo w C. Generalnie inicjalizację .data i .bss da się zrobić w pętli, inicjalizację dodatkowego stosu czy modyfikację rejestru kontrolnego trzeba robić przez funkcje-wstawki-assemblerowe które...
Też kiedyś o tym myślałem: http://www.elektroda.pl/rtvforum/topic18... Ja bym umieszczał CRC gdzieś na początku programu (w temacie wyżej było na końcu bo był z góry znany rozmiar pamięci FLASH). Rozwiązanie z umieszczaniem tego w tablicy wektorów albo tuż za ostatnim elementem tablicy wektorów jakoś najbardziej mi się podoba.
Przesunąłem cały kod za pomocą opcji linkera: .text=0x10000 ale po zmianie, owszem kod ląduje w sekcji bootloadera, ale nie działają żadne przerwania :( Podejrzewam, że tablica wektorów jest nie prawidłowa, jak ustawić, by program działał prawidłowo? Fusebity ustawiłem, by procesor uruchamiał się z bootldr.
Przyjrzyj się jeszcze temu: /* Handler mode (core exceptions / interrupts) can use only main stack */ /* Thread mode can use main stack (default) or process stack - selected in CONTROL special register */ __main_stack_size = 0; __process_stack_size = 8192; Swoją drogą 8kB to dosyć sporo, zwykle wystarcza 1-2kB, chyba że projekt jest...
Jest to wersja procesora ATMega128, tylko z pełnym interfejsem CAN Nie różni się mocno wyprowadzeniami, ani pozostałymi parametrami od mega128. Co nowy procek stracił: - nie ma możliwości podłączenia zewnętrznego RC pod Xtal1 - mniej możliwości podziału częstotliwości zegara - usunięto tryb Extended Standby - nie ma już trybu ATMega103 CM Co zyskał:...
Udało mi się przekonwertować plik .bin do takiego listingu (trochę brzydko wtedy wygląda, bo nazwy itd. nie są zbyt piękne) No ale plik jest - załącznik Użyta komenda: >arm-none-eabi-objdump -b binary -marm -D --adjust-vma=0x2000 hid.bin > out.lss Co ciekawego w nim widać? Program jest po prostu przesunięty o 0x2000 - pod tym adresem jest tablica wektorów,...
Nic nie stoi na przeszkodzie, aby ten plik był sobie i plikiem C++, byle miał owe extern "C" - ta deklaracja oznacza tylko, żeby nie manglowało nazw, możesz w takich funkcjach wywoływać dowolne klasy itp. Tak czy siak extern "C" przyda się w pliku z tablicą wektorów, ale i przed faktyczną funkcją obsługującą przerwanie (bo taka może być w dowolnym pliku...
Konfiguracja wewnętrznego kontrolera przerwań (to co robisz funkcją), a odpowiedni prolog/epilog assemblerowy (to co robisz deklaracją z "__irq") to dwie odmienne sprawy. Jeśli tablica wektorów w startupie ładuje adres funkcji bezpośrednio (nie ma jakiejś funkcji wrappera), to obydwie te operacje są konieczne. U ciebie właśnie tak jest. 4\/3!!
Praktycznie wszystkie te pliki są konieczne, a właśnie to co jest w /inc już nie, bo to jest potrzebne Twojej aplikacji... Pliki konieczne: Makefile startup skrypt linkera tablica wektorów + chyba wymagany jest jeden z plików hdr_..., bo jest zainclude'owany w startupie. Jeśli bawi Cię tworzenie od zera czegoś co już jest gotowe, to proszę bardzo -...
Tylko w tablicy wektorów musisz poprawki wprowadzić. Skrypt linkera nie ma tu znaczenia. 4\/3!!
Ponieważ w całym poście jedyną wartą uwagi informacją jest to: nie chce przyjmować klas to obstawiam że używasz C++. W takim razie gotów jestem się założyć, że nie masz nigdzie przy przerwaniach: extern "C" void nazwa_IRQHandler() {...} Bez owego >extern "C"< przerwania definiowane w plikach C++ nie zadziałają (jeśli...
Istnieje szansa że tak - program po prostu postarał się przypisać adresom odpowiadające im rozkazy no i wyszedł taki oto mix [; Widać tutaj, że tablica wektorów raczej jest dobra, teraz podejrzyj Reset_Handler, a konkretnie adresy które ładuje on do "czyszczenia" .bss i inicjalizacji .data - wg pliku map Reset_Handler był pod adresem 0x08015128 4\/3!!
Akurat nie ja ten temat badałem. Niedawno był temat wydzielony i był tam przykład kodu migającego dioda w Arduino, który zajmował 12 kb i (at)rs6000 potrafią czytać ze zrozumieniem. Tamten przykład dotyczył ARM-a w środowisku Arduino. Jakie biblioteki tam są powsadzane tego nie wie nikt. Do tego stawiam że arduinowe metody są pisane z wykorzystaniem...
Co to jest "bt_vector_read"? Zamiast 1 dodaj 4 i po problemie. Swoją droga to problemem jest cały sposób, bo można to zrobić 100x prościej i wygodniej... Stwórz sobie strukturę zawierającą dwa wskaźniki na te dwie funkcje, następnie stwórz stałą poprzez zrzutowanie adresu twoich wektorów na typ tej struktury. Albo po prostu nazwy funkcji ustaw jako...
Program się NIE ładuje w ogóle, bo w ogóle go nie ma! Jak dobrze popatrzysz na początek sekcji .text to sam przekonasz się dlaczego. Hint - zastanów się czy zostanie załadowana tablica wektorów oraz startup (zawartość pliku boot.o) i dlaczego nie. Skrypt linkera jest lewy, proponuję znaleźć coś dobrego, choćby to co udostępniłem http://www.elektroda.pl/rtvforum/topic13...
Na to wskazuje także tablica wektorów z początku pliku hex: :10 0000 00 1EC0 37C0 36C0 35C0 34C0 33C0 32C0 31C0 66 Widać najpierw wektor resetu skaczący pod adres 0x3E (0x1E * 2 + 2) a potem ciągłe skoki pod ten sam adres (0x72 - np. 0x37 * 2 + 4, 0x36 * 2 + 6 itd) - normalnie jest to __bad_interrupt, skaczący na początek (do wektora resetu). Wektor...
Witam! Nie jest to wina otoczenia. Miałem ten sam problem. Po pierwsze czy aby dobrze kompilujesz plik wynikowy. To znaczy czy nie nadpisujesz adresu 0x0040h do 0x0043h - tam znajduje sie hasło. Blokujące flash przed wyczyszczeniem, a nawet zczytaniem. Tablica wektorów 0x0000h do 0x003Fh. Program od 0x0044h. Druga sprawa jest taka, że program ładujący...
No coż, zajrzyjmy do dokumentacji. W papierach od LPC2129: UM10114 LPC21xx and LPC22xx User manual Rev. 03 — 2 April 2008 na str. 22 mamy opisaną pamięć, tablicę wektorów i jej mapowanie. W papierach od LPC1343 (Cortex M3) UM10375 LPC1311/13/42/43 User manual Rev. 2 — 7 July 2010 na str. 53 mamy coś takiego jak: 47 0xBC USB IRQ interrupt...
po skoku do Aplikacji z Bootloadera pojawia się dziwne zachowanie: zaczyna się wykonywać kod main() który jest przerwany i widzę w debugerze wykonywanie konstruktorów obiektów globalnych. Możesz pokazać jak to wygląda w debuggerze? Te konstruktory wykonują się jakby z main() czy jakby z przerwania? W Bootloaderze przed skokiem, robię __disable_irq(),...
Czy ktoś może mi powiedzieć czy poniższy algorytm ma szanse na realizację? co o nim myślicie? http://obrazki.elektroda.pl/9694939500_1... Po tym jak nowe oprogramowanie znajdzie się w buforze (new soft ) zostanie wywołany bootloader który skopiuje starą tablicę wektorów przerwać pod nowy adres (isr tab 1) i ustawi offset na tą tablicę....
SeerKaza napisał: Czyli co wystarczy że włącze przerwanie i wstawię w mainię funkcje Akurat _w_ main() to raczej średnio Ci się uda (; Chodziło mi o plik main Jeśli całość kompilujesz kompilatorem C++, to funkcje przerwań muszą być extern "C" (jeśli akurat tablica wektorów jest kompilowana kompilatorem C, albo gdy jest w assemblerze). I teraz nie wiem...
Sama tablica wektorów przerwań w F103 to 200bajtów (ok. 50 wektorów * 32 bitowy adres). Nawet więcej, bo jest 16 wektorów rdzenia, a STM32F1 mają przynajmniej 60 swoich własnych (max 68 w connectivity) - razem więc jest 76-84, co daje przynajmniej 304 bajty. Do tego często dochodzą osobne handlery dla każdego przerwania (sam zacząłem tam jakiś czas...
Co się dzieje jak ARM VIC vector mode jest zablokowany w rejestrze Host Control Register? To w jaki sposób przerwania są realizowane, tzn. wiem że poprzez metodę odpytywania (polling)... z tym, że zauważyłem, że i tak jest wykorzystywana tablica wektorów adresów procedur obsługi przerwania (z rejestru Interrupt Vector Address Register0-N (gdzie N to...
Trzeba zmienić PROGRAM. Domyślnie w STM32 tablica wektorów znajduje się w flash, a to skąd uruchamiasz program czy jak jest skompilowany nie ma żadnego znaczenia. Manual: Boot from the embedded SRAM: SRAM is accessible only at address 0x2000 0000. Note: When booting from SRAM, in the application initialization code, you have to relocate the vector table...
1. Podstawowa zasada jest taka, że najpierw konfiguruje się to co ma wywoływać przerwania, a dopiero potem się to włącza. Innymi słowy - najpierw EXTI, potem NVIC 2. Wywal funkcję NVIC_Conf() - po co Ci ona, domyślnie tablica wektorów jest w pamięci flash i niech tam zostanie. 3. Funkcja obsługi przerwania musi mieć jakiś atrybut świadczący o tym, że...
Wiem ale chciałem się dobrać do części bibliotek które dostarcza ST razem z ich definicjami. Na razie nie robię nic poważnego na tym procku więc nie chcę marnować czasu na ponowne odkrywanie ameryki. Chce też zobaczyć na ile CMSIS sprawdzi się dla mnie przy portowaniu aplikacji na inne cortexy. A jak zwykle szacun dla Twojego makefile - trzeci projekt,...
Wszystko fajnie, pod warunkiem, że chce się używać STM32. Dodanie podstawowego wsparcia dla innych układów jest porównywalne z postawieniem projektu na FreeRTOSie - ot po prostu musisz mieć tablicę wektorów i skonfigurowane rozmiary/adresy pamięci i dokładny typ układu. We FreeRTOSie przecież wsparcie dla STM32 czy dla LPC tak samo nie istnieje - tablicę...
Użyj sekcji .progmem.gcc - położona jest ona tuż za tablicą wektorów przerwań i standardowo nic w niej nie ma, a więc ma stały dla danego procesora adres początku.
No ale przecież nie masz skryptu linkera - bez tego to po prostu nie ma prawa działać... A ta wtyczka z której korzystasz kompiluje pliki assemblera tylko jeśli mają rozszerzenie .S, a nie .s. Zestaw porad jest taki: http://www.elektroda.pl/rtvforum/topic13... http://www.elektroda.pl/rtvforum/topic13... Weź przykładowy projekt dla STM32,...
Bo może wektor przerwań dla tego akurat kanału DMA się nazywa inaczej? Porównaj nazwę Twojej funkcji z zawartością tablicy wektorów. Jeśli masz w projekcie pliki C++, to trzeba przerwania deklarować jako extern "C". 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!!
Według mnie super pomysł, zrób na youtube z "lektorem" i będzie ekstra! Wg mnie dobrze by było przejść przez środowisko np. eclipse, na szybko wytłumaczyć co to toolchain, gdb, openocd i jak konfigurować (przesiadając się z avrow to wszystko nowe). Później tworzenie projektów wg mnie dla SPL! - startup, tablica wektorów pliki linkera i inne tajemnicze...
Pytań ciąg dalszy: alokując wektory przerwań do innej części FLASH za pomocą attribute((section".aaa")) napotkałem na taki oto problem....a mianowicie linker zawsze umieszcza przerwania w tej samej sekcji...nie ma możliwości umieszczenia wektora 1 np w sekcji .aaa a wektora 9 w seksji .bbb !!! jakby tego było mało to najpierw jest umieszczany wektor...
Witam. Jestem w trakcie pisania bootloadera po magistrali CAN dla STM32F103VE. Opieram się głównie na publikacji AN2557 zamieszczonej na stronie ST. Potrafię przesłać aplikację użytkownika po magistrali CAN do uC i zaprogramować pamięć Flash od wybranego adresu w górę. Na wstępnie odblokowuje pamięć Flash (FLASH_Unlock(); ) następnie podgrywam aplikację...
Tylko po co komu te wektory przerwań w RAM? Przecież mogą być spokojnie we flash... Do wykonywania skoków pod adres z rejestru służy instrukcja "bx ...", a nie "mov pc, ...". Przy okazji zawsze ciekawił mnie ten styl pisania 100x "asm volatile(...)" - pomiędzy tymi wywołaniami kompilator może sobie wstawić co mu się podoba, np. wpisać do rejestru r0...
Czyżby? Czy dla AVR ktokolwiek przejmuje się skryptami linkera, startupem, tablicą wektorów i Makefilem? Przecież dla tej platformy jest DOKŁADNIE TAK SAMO jak dla ARM, a jakoś nikomu nawet na myśl nie przyjdzie zajmować się tymi plikami - każdy korzysta z gotowców zawartych w pakiecie avr-gcc. Te pliki tam fizycznie są, nikt nie zajmuje się tym jak...
W C++ jest coś takiego jak "name mangling" - w pliku C++ może masz funkcje o nazwie "costam", ale dla linkera widoczna jest ona jako "costam_z_parametrem_int_oraz_double_zwr... - jak więc przypuszczasz celem tej funkcjonalności jest umożliwienie przeciążania funkcji (bo gdy maja inne parametry, to faktycznie dla linkera są to dwie różne funkcje...
Perler: w twoim kodzie jest dużo niedociągnięć.. funkcje Delay powinieneś wywołać przez 'rcall', tu zaś przychodzi brak stosu i brak 'ret' na końcu. w samym Delay widze odkładanie 4 rejestrów (gdzie?) ale niewidze ich zdejmowania ani pętli do opóźnienia.. po wystawieniu wartości 0x00 na porta odrazu dokonujesz skoku do początku pętli i odrazu zmieniasz...
teraz postanowiłem uruchomić timer 2 i w żadnych plikach nie widzę funkcji do tego timera. To poszukaj dobrze - musi być w pliku w którym jest tablica wektorów, być może jest to ten sam plik w którym jest startup.
Fajnie że podałeś jakieś errory czy coś... Mamy zgadnąć co zrobiłeś źle? Powtórzę też to co napisałem ostatnio - poskładałeś sobie projekt z jakichś przypadkowych plików (mój Makefile, jakiś skrypt, startup z tamtej biblioteki), więc jak oczekujesz, żeby to działało, skoro skrypt linkera, startup i tablica wektorów są ze sobą nierozerwalnie połączone,...
Zainstalowałem AVR Studio4 i lecę od początku z google i pdf na temat ASM i AVR Powiedzcie chociaż czy w dobrym kierunku zmierzam? Bo jak w złym to odpuszczam i daje sobie spokój, pobawię się migającymi diodami w Bascomie. Tam gdzie nie ma komentarza to nie wiem co to znaczy i co robi ale było w pdf lub innych opisach, jeżeli ktoś może mi wyjaśnić instrukcje...
Jezus, jak to nie wiem co mam zrobić, napisze najprościej jak się da: chce usunąć wiersz np. równy 3. Obiektem, którym się zajmuje jest wektor wektorów czyli tablica dwuwymiarowa. Takie usuwanie mi nie działa: i=3 tabela[i].erase(tabela[i].begin(),tabela... Dlatego się pytam jak usunąć ten cholerny wiersz? Próbowałem też tak: tabela.erase(tabela.begin()+i,tabela.beg...
Firmowy bootloader mi nie wystarczy. Potrzebuje SPI i prawdopodobnie USB. Ustawiłem w pierwszym programie na: NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x00003000); i w drugim na: NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x00000000); Więc tablica wektorów powinna się przełączać, ale dalej miga tylko czerwona dioda. Uruchomiłem dodatkowo TIM4 i przeniosłem...
No ale jak zrobisz takie przyporządkowanie o jakim piszesz (bez podziału) to funkcja Reset_Handler ma adres w RAM, więc w tablicy wektorów będzie adres w RAM. Oczywiście zanim ten Reset_Handler się uruchomi, to w RAM nic nie ma - tak więc to nie ma prawa działać... 4\/3!!
Toż Ci piszę, że tablice wielowymiarowe to abstrakcja - i tak są mapowane do tablic 1W (wektorów). Wektor o długości 16 elementów, możesz równie dobrze traktować jako tablicę 2W o wymiarach 4 x 4 - wzór na przeliczenie indeksów 2W na 1W podałem w poprzednim poście. Dim Tablica(16) As Byte Dim X As Byte Dim Y As Byte Dim N As Byte Dim I As Integer...
Na wypadek, gdybyś nie zauważył: przy takich deklaracjach i treści procedury konfiguracji DMA, jakie masz obecnie, do rejestru adresu pamięci DMA wpisujesz wartość bajtową odczytaną z pamięci ze zmiennej TxBuf, rozszerzoną zerami do 32 bitów, czyli wysyłasz przez UART zawartość tablicy wektorów wyjątków.
Też nie bardzo wiem jaka jest nazwa (wektor) funkcji tego przerwania, więc mam tak: Przecież wystarczy zajrzeć do tablicy wektorów i wszystko stanie się jasne... Można też zajrzeć do manuala, aby dowiedzieć się, że system CSS jest zmapowany na przerwanie NMI. Nie wiem czy czekanie na odpowiedź na forum jest naprawdę szybsze... 4\/3!!
tablica wektorów flash tablica wektorów przerwań tablica wektorów stm32
domofon elfon optima philips 42pfl pilot nieobsługiwana tablica partycji
udostępnianie internetu legalne sterownik hulajnoga elektryczna
Konwerter AHD na VGA - jaki wybrać? Pioneer A-107 - Czy posiada wejście phono?