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
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.
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).
Witam, Wg manual'a do procesora Cortex M3 jeśli się zmienia kod programu lub/i tablicę wektorów przerwań, to przed następną instrukcją powinno się użyć instrukcji ISB, DSB i DMB aby bufory załadowały nowe wartości.
Po czym to rozpoznałeś? Powtarzające się bloki po 8 bajtów na początku pliku wyglądają na zaszyfrowaną tablicę wektorów przerwań. Nie zaszyfrowane powinny się powtarzać 4 bajty adresu we flashu lub ramie. Ktoś się nie przyłożył do szyfrowania. Jak by było zrobione porządnie to cały plik wyglądał by na losowy. Nie jest to AES ani prosty XOR. XTEA? Raczej...
Cześć, Mam problem ze zmianą położenia tablicy wektorów przerwań na STM32F417. Potrzebuję dostępu do pierwszych 4 sektorów pamięci, więc rdzeń musi od początku szukać wektorów pod innym adresem. Odpalenie programu normalnie, a potem ręczne przesunięcie wektorów nie wchodzi w grę. Potrzebują początkowych sektorów do przechowywania nieulotnych danych...
W pracy mam jakiegoś AVR64 lub AVR128 , już nie pamiętam co kupiłem. Ale będę miał dostęp dopiero pod koniec tygodnia. Teraz możemy zrobić mały eksperyment i sprawdzić jaki jest rzeczywisty rozmiar wektora przerwań. W załączeniu projekt w ASM który powoduje wywołanie przerwania NMI czyli następny wektor po RESET. Przy czym dzięki temu że mamy projekt...
Włączyłeś przerwania, jednak nigdzie nie masz procedury obsługi dla RXCIE i TXCIE. Wywołanie przerwania powoduje skok programu pod adres zdefiniowany w tablicy wektorów przerwań, czyli w Twoim przypadku reset procka. Druga sprawa to błąd w tej funkcji. Ona nigdy się nie zakończy, gdyż brakuje inkrementacji wskaźnika s w pętli. Ale zakładam, że to błąd...
W plikach ".cpp" extern "C" [syntax=c]extern "C" void SysTick_Handler(void) { GPIOA->MODER = 0; }[/syntax]
U mnie kod: .org 0 start: inc r1 rjmp start działa poprawnie (AVR Studio 4, ver 4.12 sp1 build 462). No wiec asemblacja przebiega prawidlowo, lecz podczas debugowania program wyskakuje z obiegu. Tzn. co się dzieje ? Co do eeprom, spróbuj tak: .ESEG eevar1: .DW 0x1234 Po asemblacji wygenerowany zostanie plik nazwa_projektu.eep, wrzucasz go za pomoca...
Na początku flasha masz tablicę wektorów przerwań. Za pomocą NVICa możesz przesunąć tą tablicę lub przenieść do RAM. W załączniku masz przykładowy plik z tablicą wektorów przerwań
Problem z przerwaniami a raczej ich brakiem był związany, wg mojej wiedzy/ obserwacji z nieprawidłowym przeniesieniem tablicy wektorów przerwań. Same instrukcji wg książki: [syntax=c] MCUCR|=(1<<IVCE);// Uaktywnij zmianę wektorów przerwań MCUCR|=(1<<IVSEL);// Przenieś przerwania do sekcji boot-loadera [/syntax] Nie działały, trafiłem na...
vtable? To vtable od polimorficznych funkcji C++ (virtual, dziedziczenie klas, ...)? Wiesz że vtable to nie jest to samo co tablica wektorów przerwań? Przy okazji, tablica wektorów przerwań musi być we flash, dopiero po uruchomieniu układu (bez niej się nie uruchomi) można sobie przestawić NVIC tak aby korzystał z tablicy w RAM. Tak więc należy jedynie...
(at)robiw na 99.99% to błąd kompilatora, bo kiedy definiujemy procedurę przerwań np. ISR(INT0_vect) to w domyśle jest ISR(INT0_vect, ISR_BLOCK), czyli w trakcie wykonywania przerwania ponowne przerwanie nie zostanie wywołane dopóki aktualne się nie zakończy. Ten rcall powoduje że blokowanie zostało zdjęte przez reti i to jest problem. No i kod wcale...
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...
Bootloader jeśli jest prosty, potrafi też zajmować o wiele mniej. U mnie w jednym z projektów procesor podrzędny jest przeprogramowywany przez procesor główny, protokół jest więc bardzo prosty (zakładam, że błędy transmisji nie występują), sam bootloader zajmuje 358 bajtów (załącznik: źródła, 5 plików, m8). Co do pierwszego postu: ad 1/ Przy linkowaniu...
Freddie, to wiadomo. Zastanawiam się właśnie na tablicą wektorów przerwań. Myślałem, że do FreeRTOS muszę mieć to inaczej rozwiązane niż dla programu bez systemu. Rozumiem, że wystarczy mi plik z tablicą wektorów.
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!!
A ja zapytam : czy w tablicy wektorów przerwań znajduje się pod właściwym adresem handler obsługi przerwania od UART4? Bo zapewne nie i dlatego ląduje w DefaultHandlerze. Podejrzewam, że tablicę wektorów masz od STM32 z trzema uartami.
Funkcja obsługi przerwania od UART'a jest jedna. Jej nazwę znajdziesz w tablicy wektorów przerwań. Przykładów obsługi UART'a z wykorzystaniem przerwań w sieci nie brakuje - szukaj. Pozdro.
Najłatwiej kod bootloadera pisać jako osobny projekt - wtedy nie pojawiają się żadne konflikty, a docelowo i tak podczas aktualizowania nie wysyła sie już bootloadera. MarcinKawka : Twój kod wykonuje dwa odwołania do MCUCR w celu zmiany lokalizacji tablicy wektorów przerwań. Wstawka zawiera błąd, ponieważ nie informuje kompilatora o zniszczeniu zawartości...
hmmm Dobre pytanie. Ponieważ takie umieszczenie bootloadera pozwala mi uniknąć zabawy z tablicą wektorów przerwań, ominięcie przesunięcia początku programu i tym podobne.
Jak wygląda sprawa z przerwaniami? Tam zamiast przerwań są używane callbacki. To nie tak jest. Callbacki są całkiem do czego innego. W programie HALowym, to użytkownik pisze obsługę przerwań sprzętowych (tak jak w klasycznym podejściu "rejestrowym") a specyfiką HAL jest tylko to że dostarcza pewnych gotowców na obsługę przerwań. Przykładowo weźmy uart....
w pliku Makefile była linijka: CXX_DEFS = -DSTM32F10X_MD zmieniłem ją na: CXX_DEFS = -DSTM32F10X_HD Ale nie wiem czy ma to jakiś wpływ. A gdzie mogę sprawdzić tablicę wektorów przerwań?
(o ile to co zostało to bootloader) Bootloader 0x7000 - 0C94F23E - jump 0x3ef2 (0x7DE4) i cały początek wygląda na tablicę wektorów przerwań bootloadera ( 5 instrukcji jump)
Dwóch rdzeni to tam raczej nie masz, więc oczywiście że może. Są dwa warianty, albo drugie przerwanie zostanie przyblokowane na czas wykonywania pierwszego, albo pierwsze przerwanie zostanie przerwane przez drugie. Jeżeli wystąpią jednocześnie, to jako pierwsze zostanie wywołane to, które ma niższy adres w tablicy wektorów przerwań.
Chciałem się zapytać czy ten przykład od Freddie Chopin'a pasował by do STM32F2. Czy trzeba coś zmieniać prócz rozmiaru pamięci Flash, RAM i tablicy wektorów przerwań ?
A przyczyna była błacha. Albo to przeoczyłem bo zdublowałem trochę kodu z aplikacji st u siebie - albo tego tam nie było. Nie był ustawiony adres bazowy tablicy wektorów przerwań - a powinien być na flash. A przed wywołaniem kodu st była u mnie pozostałość (z wcześniejszych aplikacji) która ustawiała adres bazowy tablicy wektorów na ram. no i przerwania...
Nie zapomnij ustawić wskaźnika stosu przed skokiem do głównego programu. Jego wartość jest na samym początku kodu programu głównego. Ustalając adres bazowy głównego programu pamiętaj o wyrównaniu dla tablicy wektorów przerwań, nie pamiętam dokładnie, ale chyba do 512.
Ogólnie to w startup.s masz tablice wektorów przerwań i jeśli w zależności od implementacji powinny one wskazywać na początku jakiś defaultowy handler. Nie powiem jaki mechanizm jest wykorzystany bo w zależności od narzędzi może być to napisane trochę inaczej. Takim deafultowym handlerem może być np nieskończona pętla, co by użytkownik łatwo mógł zdebugować...
Jak kompilujesz projekt? Masz -Os? Włączyłeś optymalizacjępolegającą na zamianie jmp na rjmp? Można też wykorzystać część tablicy wektorów przerwań. Poza tym można zmodyfikować twój kod. Te else if można wyrzucić zmieniając kolejność porównań. Poza tym te wszystkie ify można zamienić na tabelę.
Czy kolega słyszał kiedyś o tablicy wektorów przerwań? Wektor resetu znajduje się pod adresem 0x0000h i tego się nie da zmienić. Możesz ewentulanie dać tak: A kolega nie słyszał że ATmegi mogą mieć różne wektory RESET-u
Powód wystąpienia RESET'u można odczytać z rejestru MCUSR - strona 54 [url=https://www.sparkfun.com/datasheets... Jeśli powodem jest np. flaga PORF, albo BORF, to problem może leżeć po stronie zasilania. W przypadku, gdy dojdzie do RESET'u, ale wszystkie flagi będą zerowe, to powód leży w programie - np. przeciążenie...
$include (REG51.inc); dołączenie definicji rejestrów uK (kompilator RA-51 Raisonance) NAMEOBSLUGA_AT24C64 ;Poniżej definicje stałych użytych w programie FIXEDADDR EQU0A0H;stała częśc adresu pamięci 24C64 USRADDR EQU0;ustawiana przez użytkownika część adresu (wartości 0..7) MEMSIZE EQU2000H;liczba bajtów dla 24C64 PMEMSIZE EQU32;liczba bajtów na stronę...
Ok. Dałem skrypt linkera i plik Startup z projektu do STM32F4. Program zatrzymuje mi się w tablicy wektorów przerwań. Na marginesie zaznaczę, że jeszcze nie modyfikowałem tej tablicy. Czy ewentualna modyfikacja tej tablicy może rozwiązać problem? http://obrazki.elektroda.pl/4579209200_1...
No to musisz mieć tablicę wektorów w RAM [; 4\/3!!
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...
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!!
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?
Tak na chłopski rozum to tablica przerwań może się zaczynać tylko od adresów, które mają 7 najmłodszych bitów równe 0 i dlatego w rejestrze VTOR te bity są nie zaimplementowane. Wyszczególnienie bitu 29 jako selektora FLASH/RAM służy chyba do zaznaczenia, że np. pamięć zewnętrzna nie może służyć do przechowywania tablicy wektorów przerwań, pomimo że...
Na początku podziękuję za dobry tutorial. A teraz mam prośbę. Próbowałem odpalić przykład z biblioteki STM32_USB-FS-Device_Lib_V3.3.0 (Virtual_COM_Port). Po pewnych bojach udaje mi się wszystko skompilować, natomiast po uruchomieniu program staje w nieskończonej pętli w funkcji static void __Default_Handler(void) z pliku vector.c. Czyli w tym pliku...
Z tego co widzę z ST-Link Utility, program counter stoi w miejscu, konkretnie 0x20000458, czyli cos juz wykonał ale utknął możliwe .że w miejscu gdzie czeka aż przerwanie SysTick wykona sie okreslona liczbe razy. Czy trzeba jeszcze w jakiś sposób ustawić tablicę wektorów przerwań? edit: Jednak nie wykonuje się , dodałem linijkę zapalającą diodę przed...
Wystarczy jeden .org 0. Program nie działał bo użyłeś w tablicy wektorów przerwań rozkazów rjmp i reti które zajmują jedno słowo. Różnice pomiędzy poszczególnymi wektorami wynoszą dwa słowa, a to dlatego że rjmp nie zaadresujesz całej pamięci. Powinieneś tam użyć rozkazu jmp (dwa słowa) ewentualnie jak bardzo chcesz rjmp/reti dopełnić po jednym nop'ie.
w kodzie programu jedyne niepokojące jest to, że F_CPU jest deklarowane PO dołączeniu delay.h (ja to deklaruję na poziomie pliku Makefile "-D F_CPU=$(F_CPU)"). Sprawdź też, czy plik jest kompilowany na atmega8, bo jeśli wybierzesz inny, to kompilator nie zaprotestuje, a wektory przerwań mogą się różnić, tudzież wywołanie przerwania bez kodu obsługi...
O co Ci chodzi? Przecież napisałem, że tak jest MI wygodniej. Jeżeli masz ochotę, to możesz sekcję danych zrobić nawet w środku pamięci. To nie ma znaczenia. Ja wybrałem taki podział: bootloader (ze swoimi wektorami), wektory przerwań aplikacji, kod aplikacji, dane. Aplikację uruchamiam z bootloadera. Przed uruchomieniem aplikacji ustawiam nowy adres...
Masz może jakiś przykładowy kod jak to zrealizować? Znalazłem w nocie katalogowej coś takiego ale niestety nie za bardzo wiem jak tego użyć i z czym to się je :) ... Jest to część tablicy wektorami przerwań 18 $0022 TIMER1 COMPA Timer/Counter1 Compare Match A 19 $0024 TIMER1 COMPB Timer/Counter1 Compare Match B 20 $0026 TIMER1 COMPC Timer/Counter1 Compare...
Zastanawiająca jest ostatnia linia: pc: 0x2000003a, która sugeruje, że program idzie z RAM-u? Może trzeba przestawić na płytce jakieś zworki? Niby wszystko kompiluje się dobrze, w tablicy wektorów przerwań jest odpowiedni wektor na właściwym miejscu, stosy są ustawione, a do przerwania nie wchodzi. Ale program kręci się w tej pustej pętli while (1);,...
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...
Witam, mam takie pytanie do bardziej doświadczonych forumowiczów. Pisze bootloader w C na uC jak w temacie, czy możliwe jest zrobienie 2 tablic wektorów przerwań? Jednej dla bootloadera, a drugiej dla normalnie wykonującego się programu ? Pytam ponieważ chcę wykorzystać DMA+SPI w bootloaderze i później w normalnym programie. Gdzieś przeczytałem, że...
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...
(at)nonor W pliku startup.s masz obsługę wyjątku reset. Jest to miejsce, w którym procesor rozpoczyna wykonywanie programu. Kod w tym pliku: - konfiguruje stos (stosy) - kopiuje sekcję .data do z FLASH do RAM - czyści sekcję .bss - wywołuje globalne konstruktory - wywołuje kod funkcji main Plik vectors zawiera tablicę wektorów przerwań. Z każdym przerwaniem...
SYSCFG->EXTICR Nie powinieneś działać na rejestrze 0? void EXTI1_0_IRQHandler(void) To przerwanie na pewno się tak nazywa? Bo tutaj się nazywa ...0_1... NVIC_EnableIRQ(EXTI0_1_IRQn); Masz dobrą tablicę wektorów? 4\/3!!
Tak, jest to możliwe - tak jak kompiluje się bootloader, tak można skompilować program, aby zaczynał się pod innym adresem w pamięci. Niedogodnością będzie to, że program znajdujący się gdzieś w środku nie będzie mógł obsługiwać przerwań (tablica wektorów przerwań może być umieszczona tylko pod dwoma adresami - 0 i w sekcji bootloadera). Co prawda można...
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...
:arrow: chyba miales na mysli rjmp w tablicy wektorów... pozdro!
Witam wszystkich. Muszę wykonać program w asemblerze do generowania jakiejś melodyjki na buzzerze. Czytałem, że najlepiej wykorzystać do tego tryb PWM. Pojawia się tutaj problem, otóż nie rozumiem jak skonfigurować ten tryb ? Nie ma jako tako adresu wektora przerwań dla tego trybu. W tablicy wektorów przerwań jest przepełnienie, porównanie, itp. PWM...
Daj nowy region pamięci tylko na przerwania, Flash zaczniesz wyżej. Ja dałbym nawet nowy region na ów eeprom. mógłby być programowany wartościami domyślnymi, albo po prostu przesuń operator . za przerwaniami, choć to mało eleganckie.
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ł:...
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ś...
Ja ostatnio trafiłem w LPC811 niedziałający watchdog. Ten sam kod uruchomiony na LPC810 i LPC812 działał bez problemu. W ATtiny13 nie działał jak trzeba wewnętrzny oscylator 9.6/4.8MHz. Jak ustawiło się na 9.6MHz, fabryczna kalibracja działała bez problemu i częstotliwość oscylatora rzeczywiście ustalała się w okolicach 9.6MHz , a jak ustawiło się 4.8MHz...
W pakiecie keila jest specjalny program monitorujący, który można wgrać do epromu... Program ten zajmuje od 5 do 6kB w zależności od konfiguracji. Dodatkowo w pisanym przez siebie programie trzeba przesunąć początek programu i początek tablicy wektorów przerwań. Ja akurat bawiłem się prockiem 535. Monitor zajął około 5kB, więc początek programu ustawiłem...
W przypadku LPC i LPCXpresso ( bo z tego głównie korzystam ) nie muszę martwić się o modyfikacje skryptu linkera, bo o to już zadbali deweloperzy LPCXpresso. Dodali sekcję .after_vectors i u mnie to sprowadza się tylko do dodania atrybutu __attribute__ ((section( .after_vectors ))) do definicji struktury. Nie ma znaczenia teraz jakiej wielkości jest...
Głupi może pomysł, bo ja tylko asm, ale może to? #include <avr/io.h> avr/interrupt.h inkluduje go. Ja od razu mówię Ci, że używa tego starego skoro Ci nie działa. Naprawdę go wywal i będzie po problemie... Po co Ci tak stary kompilator? 4\/3!! Też tak myślę - interfejs przerwań się zmienił jakiś (spory) czas temu a tutaj ewidentnie ISR() nie...
Proszę o informacje, gdzie w nocie katalogowej można znaleźć informacje na temat priorytetów wykonywania przerwań, jeżeli wystąpią w tym samym czasie. Nie można, ale ten co ma niższy adres w tablicy wektorów wykona się pierwszy jak przyjdą w tym samym czasie. Co najwyżej możesz właczyć przerwania na początku obsługi aby umożliwić obsługę kolejnych...
To nad czym się zastanawiacie intvect jest przecież wyjaśnione (internal vectors = wektory skoków wewnętrzne) czyli tablica przerwań procesora. Np.: .ext0 DC.W it_ret oznacza że jeżeli wystąpi przerwanie wewnętrznego modułu przerwania zewnetrznego EXT0 (.ext0) to procesor wykona skok do etykiety w programie it_ret lub zapewne jest to zakodowana nazwa...
A zna ktoś może jakiś dobry przykład pod stm32f107 bo przykłady Freddiego Chopina są na stm32f103. ... Przecież wystarczy zmienić rozmiary pamięci w skrypcie linkera (tylko i wyłącznie). No i zgodnie z RM0008 zmodyfikować tablicę wektora przerwań, którą właściwie już masz w swoim projekcie więc wystarczy, że ją tam przekopiujesz. Minuta roboty Btw....
Czyli jak się nie da? Tak właśnie myślałem, aby w linkerze zarówno w bootloaderze, jak i w aplikacji stworzyć nowa sekcję tylko ze dalej nie wiem pod jakim adresem umieści daną funkcję kompilator. Myślałem o czymś w stylu, aby w bootloaderze zainicjować funkcję w taki sposób: [syntax=c] void func1(void) { GPIOB->BSRR = GPIO_BSRR_BR_13; //LED_on } int...
#pragma vector = <VECTOR_NAME> __interrupt void <ISR_NAME> (void) { // сюда вписыk... код обрабl... прерыk...
Witam, (temat jest czysto teoretyczny) Zastanawiam się nad pracą układu DMA w przypadku mikroprocesora Intel 8086. Jednostka ta nie jest wyposażona (z tego co wiem) w pamięć typu cache, więc zaprogramowanie DMA i przejecie kontroli nad magistralą powoduje całkowite zablokowanie pracy procesora (tak mi się wydaje). Zastanawiam się tylko czy może (powinien)...
Z tego co widzę to np. mega8 posiada obsługę przerwań zewnętrznych więc możesz do PD2 i PD3 (int 0 i int 1) podpiąć swoje switch'e do tych portów i w tablicy wektorów przerwań(początek .cseg) w miejscach odpowiednich dla tych przerwań użyć skoków do fragmentów kodu obsługujących je. Problemem może być to że ty chcesz aby układ zawsze przerywał aktualnie...
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...
Witaj Od jakiegoś czasu uczę się rdzenia cortex-m0 i także używam LPCXpresso. Informacja ile zajmuje stos jest zawarta w tablicy wektorów przerwań pod adresem 0x00000000 (MSP) czyli jest to pierwszy element tablicy oznaczany jako _vStackTop zaraz po nim jest adres skoku do procedury wykonywanej po resecie. Element _vStackTop jest opisany w skrypcie...
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...
Witam, rozbudowałem znów program ... po ponownym podłączeniu do urządzenia jest ta sama historia... Gdy złapię palcami GND lub VCC i wykonam RESET to dopóki trzymam to program pracuje idealnie: przerwania, timery i cała reszta, a jak puszczę to baaaardzo zwalnia :( Mam nową ATmega16 i dwa kwarce ... jutro wymienię, ale nie wydaje mi się, aby to była...
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...
w tej wersji kompilatora po bezblednym skompilowaniu programu chcialem zaprogramowac proca ale pokazuje się komunikat "Error(s) occured during assembly" natomiast w wersji 1.23.5 nie pokazuje tego bledu,dlaczego tak się dzieje? Taki błąd wskazuje że CV po prawidłowym skompilowaniu źródła w C wygenerował błędny plik *.asm i łatwo to sprawdzić przyglądając...
Pytanie po 1 dotyczy attolica. Przecież w Attolicu też są zmienne absolutne. A to jak się je akurat w nim deklaruje się takie zmienne to tylko kwestia zajrzenia do helpu, kwestia zupełnie poboczna w tym temacie. Osobiście nie pamiętam, bo dawno w nim nie pracowałem. Po 2 po co wpierniczać się w to co robi linkera skoro spokojnie można po prostu dać...
Witam, Mam taki oto problem. Mianowicie: W przerwaniu INT0 (wywoływanym z PCFa) wysyłam co sekundę ramkę danych (konkretnie 13 bajtów) na USART0 na którym to działa pewien czujnik. Następnie oczekuję od niego odpowiedzi (47 bajtów) w przerwaniu od USART0. Odpowiedź dopisuję do pliku na karcie SD. I wszystko jest OK. Co pewien czas (np. raz na dobę)...
Witam. Faktycznie Morph - miałeś rację - programowanie przez serial link to dość ryzykowna sprawa :) - ALe nie jest tak najgorzej. Dopracowałem juz sobie metodę generowania kodu dla procka - faktycznie trzeba sie z tym było troche namęczyć, jednak metoda (przy załozeniu ze coś w przeciągu tych 10-15 sekund się nie "wywali" ) jest dość skuteczna. Osobiście...
Nie nie nie nie... Swoją funkcję musisz po prostu nazwać tak jak jest w tablicy wektorów, czyli: void FIQ_Handler(void) __attribute__ ((interrupt("FIQ"))); void FIQ_Handler(void) { ... i już. 4\/3!!
W startupie - nic nie zmieniasz W makefile - zmieniłeś już wszystko co potrzeba W skrypcie linkera - rozmiar pamięci (adresy początkowe zostają), jak masz potrzebę (np. używasz przerwań) to zmieniasz też rozmiar stosów (patrz stosowne komentarze) W tablicy wektorów - (jeśli potrzebujesz przerwań) należy dodać brakujące przerwania i poprawić te które...
Można wykorzystać look up table ze wskaźnikami na funkcje przyjmujące w argumentach bajty parametrów. Jeśli kody komend są kolejnymi liczbami (trzeba przewidzieć jakąś kontrolę zakresu indeksu) to można je wykorzystać jako indeks tablicy (tak jak w wektorze przerwań). Jeśli nie są to w tablicy przechowujemy pary klucz-wskaźnik - wtedy trzeba najpierw...
(at)BlueDraco Chcę tylko opanować EXTI, z tego powodu "wyjątkowo" daję przycisk do przerwania. Zdaję sobie sprawę jak głupi jest to pomysł, lecz na początek chyba wystarczy w celach "edukacyjnych"? Na ten artykuł nie natrafiłem, przeanalizuję go najszybciej jak będę mógł, dzięki wielkie :) Tak jak pisałem, jestem początkującym, a tutaj naprawdę tyle...
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ę....
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.
Po wygenerowaniu projektu w Cube nie ma definicji tych funkcji w main.c No to chyba dość oczywiste. Zobacz jak się nazywają tam gdzie jest tablica wektorów. Np w projektach z cube to bedzie .S plik w katalogowy startup albo coś w tym guście
Przypisania są w FreeRTOSConf.h zrobione tak jak było to w poprzednich wersjach FreeRTOSa: [syntax=c] #define vPortSVCHandler SVC_Handler #define xPortPendSVHandler PendSV_Handler #define xPortSysTickHandler SysTick_Handler [/syntax] W port.c są zaimplementowane powyższe funkcje. Kawałek tablicy wektorów przerwań z startup_LPC17xx.c [syntax=c] /** *(at)brief...
Może tak to wyglądać, ale IMHO lepiej to zrobić na przerwaniach - nie musisz sprawdzać, którą tablicę przeliczać, bo to załatwia wektor przerwania powiązanego z kanałem, no i nie musisz sprawdzać, czy kanał jest wolny, bo masz to zagwarantowane w chwili wywołania handlera przerwania.
NA 99.666% funkcje przerwań nazywają się zupełnie inaczej w tablicy wektorów, a więc nie ma możliwości ich wywołania przez przerwanie. 4\/3!!
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...
Hello! Załóżmy że mój procesor (2051) z czytuje dane z przetwornika A/C (ADC 0809) i wysyła je po RSie. RS pracuje na przerwaniu (badana jest flaga Ti) „non stop” wysyłając dane z prędkością 250kb (tak przy okazji: wysłanie jednego bajtu trwa 32us?). I teraz tak, z racji że UART pracuje w trybie 1 (asynchronizcnym, 8 bitów danych, jeden...
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...
Zlecę napisanie działającego szablonu kodu dla STM32F030 gdzie: -pracuje jeden dowolny timer i wywołuje przerwanie -jest funkcja zapisu jednej strony do flash nie powodująca zatrzymania obsługi przerwania timera Nie wiem czy jest to możliwe, lecz wydaje mi się, że by to uzyskać należy przenieść do RAM: -tablicę wektorów przerwań -funkcję obsługi przerwania...
z tego co widzę to 19 przerwanie czyli moje prowadzi pod inny adres niż wszystkie No tak, tyle ze to przerwanie jest "19-te", tyle że przed nim jest kilka systemowych. Wg tabelki w manualu tych układów, adres wektora przerwań dla TIM14 to 0x8c, natomiast u Ciebie wektor jest pod 0x68... Błąd masz taki, że za bardzo w nią zaingerowałeś... Zwróć uwagę,...
jeżeli chodzi o fuse'y to zajrzyj [url=http://fusecalc.engbedded.com]tutaj... Wybierasz rodzaj procesora i później odpowiednio jakie opcje Ciebie interesują. PAMIĘTAJ, sprawdź wszystko 3 razy, bo jak sobie usuniesz możliwość programowania proca przez SPI, lub reset (akurat przy Twoim procku to nie grozi) to uC idzie na półeczkę póki HVProga sobie nie...
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...
Możliwości optymalizacji jest wiele, niektóre z nich: 1. Wywal rejestr|=cośtam i zmień na rejestr=cośtam. Oszczędzasz na każdym takim odwołaniu 2 instrukcje. Funkcjonalnie to nie jest to samo, ale ty inicjalizujesz peryferia i ich stan poprzedni cię nie interesuje. 2. Nie wszystkie zmienne muszą być volatile. 3. Wielokrotne if'y w time_key można zastąpić...
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...
Operacje jakie masz do wykonania przy skoku do swojej aplikacji to: - Ustawienie wektora tablicy przerwań na Adres Bazowy Aplikacji (nazwijmy to ABA) - przepisanie z ABA+0x0 wskaźnika stosu do MSP (główny wskaźnik stosu) - pobrania z ABA + 0x4 wektora resetu i skok pod ten wektor - nie skaczesz pod ABA +0x4 tylko pod ten adres który znajduje się w ABA+0x4...
Nie dziala jest barszo ogólnym stwierdzeniem. Co nie dziala? DH? masz debuger. Coś innego? Yo tylko była tablica wektorów oczywiście.
tablica wektorów tablica przerwań tablica wektorów flash
pomiar prądu pomiar pradu próżnia temperatura fotel kierowcy renault megane
sterowanie domem najprostrzy mikrokontroler
Silnik nie wchodzi na obroty - przyczyny i diagnostyka Lodówka Samsung RSH5PTPN zaszrania się - przyczyny i rozwiązania