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.
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!!
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...
(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.
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...
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...
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ść...
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...
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!!
tablica wektorów flash tablica wektorów przerwań tablica wektorów stm32
renault master układ wydechowy tablet alcatel android skoda fabia nierówny praca silnik
bateria niteo kabel brake radio
SOT23 – identyfikacja elementu, oznaczenie J54, Ricoh R1154N054B, liczba pinów J54G1 SOT23 – identyfikacja elementu, Ricoh R1154N054B LDO 5,4V 150mA