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...
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ść...
Literki k czy R biorą się z wartości rezystora, a nie odwrotnie :-) Cecha i mantysa określa wartość rezystora, więc na ich podstawie możesz obliczyć jaką literkę i gdzie wstawić. Np. rezystor 22000 omów rozpisujesz tak: cecha = 22, mantysa = 3. Skoro mantysa ma wartość 3, a 2*10^3 jest mniejsze od 10^6), to dopisujesz k za liczbą 22. Jeśli będziesz...
Bo oznaczenie =!0 mogłoby oznaczać przypisanie negacji liczby 0. A Ty masz zrobić porównanie, a więc dla różnego: != A tablica druga, jeśli ma być dokładnie wielkości takiej, jaką trzeba, to trzeba ją utworzyć dynamiczne. Reszta kodu będzie dobra. BTW - czemu do inkrementacji nie stosujesz prostego operatora ++ ?
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...
Tzn. linię: KEEP(*(.vectrs)); ? I ją wstawić do nowej sekcji? Dokładnie.
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
https://obrazki.elektroda.pl/9290552300_... Witajcie moi drodzy. Zapraszam na kolejną część mojego tutoriala PIC18F2550 i kompilatora SDCC . W tej części poznamy sterownik wyświetlacza LED MM5450, połączymy go z PIC18F2550 i napiszemy od 0 implementację ich komunikacji. Docelowo użyjemy MM5450 do wysterowania wyświetlacza LED 5 na...
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...
Startup bez zmian. Skrypt linkera - zmienić rozmiar pamieci. Tablica wektorów - poniżej. 4\/3!!
Bo tam się koledze sporo pomieszało. Nie sądzę. Nie rozumiem, jak działają wektory, nie mogę w necie znaleźć o tym nic sensownego. Wektor czyli tablica jednowymiarowa. Ale dlaczego tutaj &cyfry Tablica (wektor) cyfra zawiera wartość kolejnych pozycji liczby. Tablica 'cyfry' zawiera patterny danej cyfry dla kodu 7 segment. Pattern musi być zamaskowany...
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...
Wektor = tablica jednowymiarowa zmienny wymiar = tablica dynamiczna
Witam, mam problem natury takiej, że nie chce mi wyjsc to co zamierzam zrobic, a z racji tego ze jestem poczatkujacym, a kolokwium sie zbliza, proszę was o pomoc z tym zadaniem. // Zaprojektować i zaimplementować funkcję realizującą mnożenie macierzy przez wektor (z wykorzystaniem funkcji realizującej mnożenie skalarne dwóch wektorów). // Stworzylem...
No to musisz mieć tablicę wektorów w RAM [; 4\/3!!
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.
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
Tylko w tablicy wektorów musisz poprawki wprowadzić. Skrypt linkera nie ma tu znaczenia. 4\/3!!
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:
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...
Mam pytanie: jak obliczyć wartość napięcia skutecznego napięcia sinusoidalnego? Podaje sobie napięcie o amplitudzie 1V (+offset 1V) na kanał przetwornika ADC. I tu się pojawia problem. Jak powinienem napisać program, aby zbierać te próbki do jakiegoś bufora (rozumiem, że może być tablica float)? I dalej: jak policzyć tą wartość skuteczną? Wiem, że wzór...
Witam! W takiej procedurze chciałem zrobić pętle od 0 do długości pewnej zmiennej którą mam przypisaną globalnie. Zrobiłem to tak: [syntax=cpp] public: System::Void rozdzielDane() { for(int i=0;i<zawartoscPliku.length();i++) { if(zawartoscPliku[i]!=';') { } else { i++; } } } [/syntax] Niestety wyskakuje błąd "error C2228: left of '.length' must have...
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.
Tablice wielowymiarowe to albo albo tablice tablic, albo specyficznie numerowany wektor... tablic tablic w BASCOMie nie zrobisz, ale wektor jak najbardziej. zamiast: int tablica[n][n]; tablica[x][y] = zmienna; możesz pisać: int[n*n] tablica; tablica[x*n+y] = zmienna; To jest oczywiście zapis w składni C++, w BASCOMie tablicę deklarujesz tak: Dim tablica...
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).
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.
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!!
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.
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...
No i o to chodzi. :) Tylko jak tak patrzę na ten kod, to vector będzie miał stały rozmiar (zawierał jedną ramkę)? Jeśli tak to wystarczy zwykła (w dodatku szybsza) tablica. Niby tak ale to jest tak że ten wektor jest globalny (i obecnie przechowuje jedną ramkę) a funkcja która pobiera dane z Com ma swój wektor (temp) i wczytując do tego temp, liczy...
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!!
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 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
widzę, że jesteś niezłym magikiem bo twoje makefile jest w ogóle nie podobne do tego generowanego przez AVRStudio. Ponieważ nie korzystam z AVRStudio. Ale spróbowałem tak z ręki skompilować ten twój bootloader: make bootloader zazwyczaj kompiluje się przez samo "make", tutaj przez "make all" i niestety dostaję błąd: makefile:28: *** missing separator....
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!!
Nie wiem czy koledze o to chodzi ale poniżej przykład jak utworzyć tablicę adresów funkcji i wywoływać funkcję na podstawie jej numeru. [syntax=armasm] #include <m32def.inc> .cseg Reset: ; zainicjowanie stosu LDIR16,high (RAMEND) OUTSPH,R16 LDIR16,low (RAMEND) OUTSPL,R16 CLRR0 // zero LDIZH,high (2*Addresses) LDIZL,low (2*Addresses) LDIR16,1 //...
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...
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.
Witam, tylko po co w mieszać automat sekwencyjny, skoro wystarczy użyć kombinacyjnego (bez przerzutników). Przecież jednoznaczność wektora wyjściowego względem wejściowego jest jednoznacznie zdefiniowana. Napisz sobie Tablicę Prawdy w postaci binarnej dla obu wartości wektorów i po wszystkim. No prawie, bo jeszcze należy rozpisać na podstawie Tabeli...
Utworzyłeś wektor o SIZE_Y elementach a wypełniasz SIZE_X pozycji
Wrzucę wektor na stos, a potem moge znowu dodać sobie kolejne elementy i ponownie je wrzucić? Jak pobierać te wektorowe elementy ze stosu?
in-place owszem sygnał to tablica rzeczywista, ale potrzebna jest jeszcze tablica na część urojoną, chociaż może, skoro można robić fft dla 2N (sygnał rozmieszczany jest naprzemiennie w tablicach re i im), to oczywiście da się też i tak zrobić, że jeden wektor traktujemy jako dwie tablice (po połowie). Ale czytam twój program i widzę, żę właśnie tak...
Napisałem program do rozwiązywania układów równań liniowych. Nie mam pojęcia dlaczego nie chce mi się skompilować. Wkleję kod źródłowy pliku przy którym jest problem. [syntax=cpp]#include <iostream> #include <cctype> #include "naglowki.hh" #include <math.h> #include<cstdlib> using namespace std; ////////////////////////////////////////...
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!!
mateo19851 -> Skoro implementujesz wektor polecam zrobić tak: Zgodnie z radą poprzednika, w konstruktorze zrób dane = null albo dane = new int[1] (opcja 2 chyba nawet wygodniejsza do późniejszego stosowania). Do wektora dodaj też prywatny statyczny atrybut określający ilość elementów w tablicy - na starcie (w konstruktorze) oczywiście przypisujesz...
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!!
Wszystkie dane poza wektorem wyników powinny być zadeklarowane wewnątrz procediury obsługi przerwania timera z atrybutem static, a nie volatile, a wektor wartości ADMUX - jako static const. Z kolei zadeklarowanie wektora wyników z atrybutem volatile (hiperpoprawnie) powoduje nadmiarowe operacje w procedurze obsługi przerwania. Moim zdaniem należy ten...
#include <iostream> #include <vector> using namespace std; int main() { int x=4; vector<int> *tablicaWektorow; tablicaWektorow=new vector<int>[x]; //wpisanie jakis wartosci do wektorow; for(int i=0;i<12;i++) { if(i<3) tablicaWektorow[0].push_back(... else if(i<6)...
W tablicy wektorów zupełnie nic nie zmieniasz (jak zwykle) - system masz połączony ze sprzętem poprzez te 3 definicje: #define vPortSVCHandler SVC_Handler #define xPortPendSVHandler PendSV_Handler #define xPortSysTickHandler SysTick_Handler Mam nadzieje że masz je w jakimś pliku dołączonym do port.c, np FreeRTOSConfig.h 4\/3!!
Pomijając cały kod programu; mam taką linijkę: if(table[m].binary[k]... gdzie table - zdefiniowany wektor, zawierający elementy pewnej class-y; binary-prosta tablica binarna jako element class-y; k,m,n - liczby całkowite; okreslone przez pewną pętle for; I tu mam problem; Chciałem przeglądać...
Adres 0x00000014 nieużywany przez ARM, NXP zaadoptował jako sumę kontrolną tablicy wektorów. Jeśli masz tam coś innego uruchomi się ISP. Poprawnie wywołane programowanie zerowego sektora na pewno działa bo wykorzystują to chyba wszystkie programatory działające pod JTAG. Bootloader wysoko jest fajny, ale ma wadę. Wgranie złego programu, lub błąd przy...
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...
Oj, kolego, uwierz mi, że warto zainwestować w jakąś książkę dot. programowania w C++. Wtedy Twój program będzie wyglądał tak: int main(){ char * usuwane = "1234567890"; vector<char> usuw( usuwane, usuwane+10 ); list<char> p; copy( istreambuf_iterator<char>(cin&... istreambuf_iterator<char>()...
FFT da widmo. Teoretycznie dominujący prążek jak tym którego szukasz. Czasami, prościej zastosować transformatę z definicji niż robić FFT. Myślę, że kodów na FFT w C jest w necie setki tysięcy. Kilka punktów do rozważenia: 1) Jeśli nie ma się szybkiego komputera, lub czegoś ze sprzętowym liczeniem zmiennoprzecinkowym, stosuje się stałoprzecinkowe obliczenia...
1. Kod, tak jak pokazałeś, to proste/czyste C nie C++, więc właściwie powinieneś się dookreślić... 2. Jeżeli C - przekazywanie tablic do funkcji odbywa się przez wskaźnik i funkcja operuje bezpośrednio na przekazanej tablicy, a nie na jej kopii - nie ma zatem potrzeby (i możliwości) jej zwracania. Tym bardziej funkcja typu int nie może zwrócić wyniku...
No cóż, wyszedłem z założenia, że jeśli się dostaje tego typu temat do realizacji to należy posiadać pewien zasób wiedzy i umiejętności. W tym wypadku wskazana byłaby wiedza : o konstrukcji i działaniu komputera o językach programowania i pisaniu programów o sygnale akustycznym ze szczególnym uwzględnieniem mowy o metodach przetwarzania cyfrowego sygnału...
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...
Taki program nie ma prawa działać poprawnie, ponieważ przesuwasz tym sposobem również tablicę wektorów, która akurat musi być w jednym i konkretnym miejscu. No chyba że masz już ten bootloader, który uruchamia Twój kod, skacząc pod odpowiedni adres. Pozatym widze, że korzystasz z dosyć starego skryptu, proponowałbym taki trochę nowszy, bo w tym jest...
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...
Witam. Poniewaz chce zostawic w swoim programie pierwsze sektory nieuzywane (ewentualnie bez zadnych konkretnych funkcji) moj program powinien byc wygenerowany z okreslonym offsetem. Przebrnąlem przez skrypt linkera i mam pierwsze 4 kbyte flasha przeznaczone na moja sekcje BOOT, a reszta pamieci na sekcje FLASH. Skoro tablica przerwan tez sie przesuneła...
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...
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...
Witam ! Zdania na ten temat są podzielone, niby dzisiejsze IDE pozwalają na pokazywanie np jakiego typu jest dana zmienna. Dopiero się uczę, więc proszę zawodowych programistów o odpowiedz. Czy w praktyce stosujecie notacje węgierską ? Bo jeśli tak to sam zacznę ją stosować i wyrabiać już sobie dobre nawyki. Przedrostki notacji węgierskiej : Typy zmiennych:...
Zapisujesz do flash przy pierwszym uruchomieniu po programowaniu. Po resecie sprawdzasz czy tam jest ta wartość i jezeli jest to jest pierwsze uruchomienia, a jeżeli nie to kolejne Bez flagi to raczej się nie da (aslbo przynajmniej sprawdzenia czy coś jest zaprogramowane). Oczywiście mogę sobie wyobrazić rozwiązanie typu - ResetHandler jest do procedury...
Tak, dodawanie czy odejmowanie to takie same operacje na wszystkich odpowiadających współrzędnych. Gorzej trochę z mnożeniem czy dzieleniem... Takie operacje na wektorach (macierzach) wykonuje się już w trochę bardziej złożony sposób. Najwygodniej, jakbyś poprzestał na mnożeniu i dzieleniu przez liczbę - wtedy po prostu każdy element tablicy mnożysz...
Witam. Z racji że programowanie nie jest moją najmocniejszą stroną, a mam za zadanie stworzyć mini projekcik, muszę skorzystać z Waszej pomocy. Pierwsza część mojego zadania brzmi tak: Create structure Task, cotaining the information about the test question in the fields: a question, five variants of the answer, a correct answer number, a number of...
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...
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ę,...
Wygląda na to, że się całość się jakoś skompilowała pomimo warningów i zlinkowała (bo powstały mi pilki hex i elf). ...aczkolwiek rozmiar pliku wynikowego *.hex = 34 bajty każe przypuszczać, że jeszcze sporo przede mną... Brakuje Ci tablicy wektorów i startupa. Prościej będzie Ci zacząć od kompletnego przykładu, ewentualnie od przykładu + modyfikacje...
Zakładając 0 stosu i heapu w skrypcie linkera (po to aby nie zmącać Ci obrazu bo on się doda do BSS). Ty oczywiście ustaw je na wartości takie jak powinny być w programie. [syntax=c]make --no-print-directory post-build Generating binary and Printing size information: arm-none-eabi-objcopy -O binary "101n.elf" "101n.bin" arm-none-eabi-size "101n.elf"...
To poczytaj sobie o pisaniu bootloaderów. Tu tematów było kilka. Po co marnować aż 512kB na bootloader? 1. start programu (jest lub nie) przy takiej wersji bootloadera zakładam ze będzie wgrywany razem z jakąś wersją aplikacji. 2. aplikacja na jakieś polecenie reaguje i wywołuje bootloader mający swoją tablice wektorów. 3. aktualizacja oprogramowania....
Przed uruchomieniem aplikacji przez bootloader należy: - przestawić wskaźnik głównego stosu, - przestawić tablicę wektorów. Robisz te dwie rzeczy? Poniżej fragment mojego bootloadera w którym wykonuję skok do aplikacji. Wszystkie przerwania i układy peryferyjne są "zresetowane" wcześniej. [syntax=cpp-qt]/// beginning of flash block for firmware extern...
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ś...
te 2 pliki musze zmienić oraz dane w makefile i linkerze tak ?? W Makefile to za dużo zmian nie będzie (może jakieś nazwy plików), więc głównie linker i tablica wektorów. O to jaki kompilator będzie użyty chodziło mi że w includes są scieżki do g++ i jeśli będzie kompilować się w edge to nie będzie żadnych komplikacji ?? Te ścieżki są wykrywane automatycznie...
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...
po co w niektórych implementacjach takich 'rozbiegówek' mamy kod assemblerowy który kopiuje adres stosu do rejestru SP procesora? STM32 może używać dwóch stosów - jednego dla przerwań (nazwanego wyjątkowo myląco "main stack") i drugiego dla wątków (nazwanego "process stack") - a więc i dla "main()". To co jest w tablicy wektorów ląduje w MSP ("main...
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...
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...
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...
Nic, chyba że masz jakiś nietypowy układ który ma inną tablicę wektorów. Np STM32F105 i 107 mają inną niż 103 - dlatego w przykładzie stm32cl_blink_led jest inna tablica wektorów. Tak apropo to te błędy OpenOCD o których mówisz możesz zignorować - nie oznaczają one żadnego problemu. 4\/3!!
Tzn, że program może działać dalej poprawnie a debuger wskazuje na to, że jesteśmy w np HardFaultHandlerze ? Mógłbyś nieco rozwinąć myśl ? Czasem może być jakiś problem sprzętowy/programowy/systemowy, który może spowodować wywalenie się debuggera, który będzie np. uparcie twierdził, że jesteśmy wciąż w jakiejś linii, choć mikrokontroler sobie wtedy...
Czy lepiej zostawić operację na bitach w funkcjach wewnątrz biblioteki i jak będę zmieniał pracka to ewentualnie modyfikować te funkcje, czy może wydzielić to do osobnego pliku np. bridgeMspConfig i przekazywać te funkcje callbackami do biblioteki? Ja bym się nie cyrtolił tylko w bibliotece po prostu miał odpowiednie #ifdef-y i tyle. Callbacki mają...
Czołem Próbuje stworzyć 4 bufory filo, z 10 próbkami 12 bitowymi. Zakodowałem to tak Sliced name is allowed only on single-dimensional arrays Jakies pomysły jak to zapisać inaczej?
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"...
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ń
Zakładam, że pytasz o sytuację uruchomienia jednego programu (normalnego) przez drugi (bootloader)? Generalnie dobrze by było, gdyby ten bootloader po sobie sprzątał, tzn np. wyłączał wszystkie układy peryferyjne których używał, doprowadzając całość do stanu jak najbardziej zbliżonego do prawdziwego resetu. Po stronie "normalnego" programu generalnie...
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 -...
#pragma vector = <VECTOR_NAME> __interrupt void <ISR_NAME> (void) { // сюда вписыk... код обрабl... прерыk...
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...
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.
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ą...
back() to metoda (odpowiednik funkcji w obiektach) który zwróci ci ostatni element w CAŁYM wektorze, czyli to będzie element size() -1 tobie chodzi pewnie o uzyskanie elementu o indeksie los a nie tylko ostatniego. tak jak wspomniałem w ierwszym poście wektor można iterować jak zwykła tablicę. w przypadku tablic mamy: [syntax=cpp]int tablica[3]; tablica[0]...
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 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!!
tablica wektor stm32 tablica wektor flash długość wektor
odpalanie styków xperia gniazdo słuchawek sterowniki option
elektrozawór saeco hd8856 pompa ciepła
Mercedes Sprinter 311 CDI 2000 – rozrusznik szybko kręci, silnik nie odpala, Common Rail, CKP Skaczący kursor myszy - przyczyny i rozwiązania