zobacz co masz w offsecie 0xE0 w tablicy wektorów (tej we flash)
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.
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...
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 Tę linię należy usunąć z tego pliku o ile nie masz zamiaru zmieniać mapowania pamięci na adres 0x0 (a tego prawie nikt nie robi) albo jak zamierzasz zmienić i nie zmieniać ciągle tych definicji to dodaj symbol...
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...
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....
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ń ?
TO masz pecha. BO początku pamięci flash nie da się tak wykorzystać.
Przerwania procesora działają w procesorach AVR na takiej zasadzie, że (pomijając inne operacje) po wystąpieniu danego przerwania ( podczas obsługi przez procesor ) następuje zapamiętanie rozkazu następnego, który byłby wykonany, gdyby procesor nie przyjął przerwania (jego adresu w pamięci flash) i skok pod jeden z adresów z samego początku pamięci...
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.
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"...
Ja bym zrobił wersję nr1 (; Po przeflashowaniu softu i tak (raczej) musisz zrobić reset, więc nie musisz odtwarzać zawartości pamięci RAM, możesz więc sobie generalnie pokasować wszystkie inne zmienne [; Tak naprawdę na karcie możesz mieć dwa obrazy - nowy wsad i "bootloader". Kopiujesz sobie do RAMu "wprost" ten bootloader (kompletny działający z RAMu...
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...
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.
:) 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ść...
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...
(at)TvWidget Uważam że masz złe podejście. Załóżmy że rozmiar bootloadera się zmieni. I co wtedy. Raczej porztbujesz mieć to relatywnie w stosunku do początku aplikacji. Wtedy wystarczy tylko dodać sekcję z tą zmienną (jeżeli ma być we flash) tuz po tablicy wektorów a przed .text. Wtedy bootloader (zakładam że go sam piszesz) zawsze będzie wiedział...
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...
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...
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...
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...
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...
Witam, mam problem z uruchomieniem przetwornika cyfrowo analogowego na mikrokontrolerze stm32f103c8 . Według mnie konfiguracja przetwornika jest poprawna.Piny PA4 i PA5 są sprawne, mogę ręcznie ustawiać dowolny stan. Już spędziłem nad tym kilkanaście godzin i nadal nie moge wysterować pinu Pa4 napięciem z przetwornika DA. Zachowuje się jako do niczego...
jesteś tego pewny to jak to się ma 24 MHz na moim do 74Mhz na 103 ruszy np taki program jak ten code #include "stm32f10x.h" #include "lcd4bit.h" #include <stdio.h> TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_ICInitTypeDef TIM_ICInitStructure; void RCC_Conf(void); void NVIC_Conf(void); void GPIO_Conf(void); uint16_t cnt; char I Proszę kod...
No fakt, kilkadziesiąt linii deklaracji tablicy stałych zadeklarowanych jako zmiennych ajmującej pamięć RAM jest o niebo czytelniejsze niż: #define PAGEADDR(n) ((void *)(0x8000000 + (n) * 0x800)) Parę innych rzeczy też jest dziwnie, np. pisanie Flash stronami zamiast słowami, przekształcenia int na adresy itd. Czy jesteś pewny, że nie próbujesz pisać...
Tak, jest z tym problem. Sam walczę z drugim bootloaderem i jak na razie działa jedynie manualne przeniesienie wektora z FLASH do SRAM po uruchomieniu głównej aplikacji.
Cześć wszystkim. Jestem początkującym ludzikiem który zaczyna swoja zabawę z stm32. Pracuje nad projektem do którego niezbędny jest mi RTC i tu pojawia się problem... otóż kompilacja przebiega bez błędnie ale UC nie reaguje. wstawiam kod całego programu. [syntax=c]#include "stm32f10x.h" #include "stm32f10x_rtc.h" void RCC_Conf(void); void GPIO_Conf(void);...
Pytałem o sens rzutowania ze względu na to, że patrząc na wartości podane w tabeli amplituda powinna być zbliżona na wartości Vref czyli 3.3V, a teraz ledwo wyłania się z szumu... Powracając do mojej pierwotnej wersji z bibliotekami: [syntax=C] #include "stm32f10x.h" //rejestr 12-bitowy prawo-zorientowany #define DAC_DHR12RD_Address 0x40007420 void...
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....
Witam Niedawno zacząłem "zabawę" z zestawem Kamami ZL27ARM z procesorem STM32F103VB. Mam problem z przerwaniem od timera SysTick. Jest ono generowane 4 razy za często - miało być 1 raz na sekundę, a jest 4. Kwarc 8MHz, SYSCLK = 72MHz, SysTick_CLK= 72/8=9MHz czyli załądowanie do licznika wartości 9'000'000 powinno dać zgłoszenie przerwania co 1s, więc...
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...
Przepraszam , że nie dokończyłem wczoraj ale przysnołem. Nie poszło tak prosto bo nie otrzymuje zapisu na kartę , cały program kompiluje się mi w porządku tzn otrzymuje hex -a, zadaniem poniżej przedstawionego programu jest tylko odczyt jednej wartości z wejścia adc1 oraz zapisanie jej na karcie do pliku o nazwie plik, poniżej przedstawiam listing z...
To nie jest moim zdaniem problem z OpenOCD, tylko masz źle skompilowany program. Po tym co mi podesłałeś widzę, że cały kod znajduje się pod jakimiś abstrakcyjnymi adresami, brakuje tablicy wektorów itd. Wrzuć cały projekt (kod, startup, skrypt linkera, makefile). 4\/3!!
Datasheet podaje, że wytrzymałość pamięci flash to minimum 10000 cykli. Przemyśl, czy naprawdę warto kombinować, bo - uwierz - niepoprawne uruchomienie programu z RAM potrafi czasem sporo namieszać (szukasz błędu który nie istnieje). Co do komend, to po pierwsze musisz mieć inny skrypt linkera (bo nie używasz już flash), musisz wiec inaczej linkować...
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ę...
Witam, Jako że jestem początkujący w dziedzinie STM32 napotkałem problem nie do przejścia. Moim zadaniem jest wysyłanie inkrementowanej zmiennej "Dane" która jest wysyłana przez USART i odczytanie jej przez terminal. W konsekwencji wyrysowując otrzymane wartości powinienem uzyskać coś podobnego do piły o amplitudzie od 0 do 255. Bez DMA wszystko pracuje...
Dzień dobry! Przycisk podpięty do płytki mam w/g schematu: http://arduino.cc/en/uploads/Tutorial/bu... Kod mojego maina: #include <stm32f10x_gpio.h> #include <stm32f10x_rcc.h> #include "stm32f10x_flash.h" #include "misc.h" /* Scheduler includes. */ #include <stdio.h> #include "FreeRTOS.h" #include...
...Jeśli nie, to tak jak napisałem w poprzednim poście. Ba , żeby to bankowanie było takie proste jak opisałeś , to fajnie by było , ale niestety nie jest :( Co z przerwaniami , instrukcjami powrotu (RET,RETI) - skąd proc ma wiedzieć na która stronę wrócić po wykonaniu podprogramu :?: Procek który ma 16-bitową szynę adresową , nie może obsłużyć banków...
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...
(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...
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...
Dokładnie tak, interesowało mnie dlaczego kod nie działa w takiej sytuacji. Miałem takie problemy z testowaniem własnego kodu po wrzucaniu do ram lub flash naprzemiennie, niestety nie dotarłem do przyczyny i sobie darowałem. Płytka to olimexino stm32 z STM32F103RBT6. Zasadniczo wszystko ma swoje źródło w tablicy wektorów, znajdującej się w pamięci...
Podsumowując... Loader umieszczony jest we flash od adresu 0 i nie ma od tego odstępstw. Aplikacja umieszczona jest pod dowolnym adresem we flash z wyrównaniem do 512. Żadne biblioteki nie maja kodu na stałe przypisanego pod konkretny adres, nawet SPL, wszystkie startupy i tak zależą od linkera, no chyba, że ktoś sobie coś udziwił i coś na stałe przypisał....
Chciałbym ulepszyć pewien produkt zbudowany w oparciu od STM32F101. Udało się zrzucić pamięć FLASH procesora, nie był zablokowany. Zawartość pamięci wygląda na poprawną, widać napisy wyświetlacza, można wyodrębnić funkcje. Mam problem ze zrozumieniem wektora startu. Obszar pamięci FLASH zaczyna się następująco: 0x08000000: 0x20000400 0x08000004: 0x080586F5...
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 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...
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...
(at)nowyARM Może to sobie nawet na początku pamięci flash aplikacji (zaraz za wektorami przerwań przykładowo) ale chyba nie o tym temat. Więc to już drugi Twój post nie na temat. Obawiam się, że zaraz będą wspomnienia 8051 oraz magnetowidów.
Witam Potrzebuję zarezerwować fragment FLASH na tablicę ze stałymi, znajdującą się pod stałym adresem. Ma to umożliwić programowanie tych danych niezależne od kodu. Najlepiej by było, gdyby to był obszar o niskich adresach, np zaraz po wektorach przerwań. Czy jest w GCC jakiś mechanizm, pozwalający na wyłączenie bloku FLASH, by nie był w jego obszarze...
Znalazłem specjalnie dla Ciebie jeszcze kilka bajtów :D ahahahahaha Bascom stara się być "ignorantoodpornym" czyli jak ktoś może czegoś nie wiedzieć to on to, na wszelki wypadek, robi za niego. W języku C każdą zadeklarowaną zmienną najczęściej inicjuje się jakąś wartością ponieważ po reset nie można być pewnym, że w niej znajduje sie zero lub potrzebna...
Czy dołączyć źródła do projektu, czy wgrać sam bootloader jako inny projekt? Dwa osobne projekty. Kolejna sprawa to zmiana offsetu flash. W przypadku projektu Freddiego czy będzie to tylko zmiana w pliku _rom.ld na: Do przesunięcia dochodzi jeszcze konieczność zmniejszenia rozmiaru dostępnej pamięci. Kolejne pytanie to czy trzeba i ewentualnie jak...
Kolega cristof_w ma po prostu złe nawyki z programowania c/bascom. W procesorze nie ma żadnego wydzielonego miejsca gdzie należy cokolwiek definiować albo umieszczać . Pamięć flash jest do twojej dowolnej dyspozycji i co chcesz gdzie chcesz umieszczasz. Musisz tylko wziąć pod uwagę że pierwsze komórki tej pamięci mają dodatkowe specyficzne zastosowanie...
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...
W dalszym ciągu nie rozumiem dlaczego reset miałby nie zadziałać. Na przykład w STM32 program startuje z flash-a, ładuje nowy kod do RAM i ustawia zewnętrzny sygnał na pin BOOT, tak by RAM był mapowany na adres 0x00000000. Jeśli damy reset i program załadowany do RAM będzie dobry (tablica wektorów też), układ zadziała prawidłowo. Ale po błędzie i przemieleniu...
Uruchom mikrokontroler w trybie bootowania (coś tam zwarte do masy) - pewnei odzyskasz komunikację z programatorem. Napisz dokładnie, co zrobiłeś i pokaż kawałki kodu. Typowo relokacji tablicy adresów wyjątków używa się przy własnym bootloaderze. Nie rusza się wtedy mapy sekcji, a tylko zmienia bazę pamięci FLASH w skrypcie linkera. No i wyjaśnij, jak...
Wygrzebałem skrypty skądś indziej razem ze startup'em, tablicę wektorów wziąłem tymczasowo od LPC175x/LPC176x, nie mogłem doszukać się pod ten. Niestety w czasie kompilacji linker wypluwa między innymi: [syntax=bash]ld.exe: error: .vectors is too large to fit in FLASH memory segment[/syntax] W skrypcie od tego mam: [syntax=c] __vectors_end__ = __vectors_start__...
Mam problem związany z kasowaniem pamięci flash mikrokontrolera. Opiszę czego dotyczy. Stosuje bootloader "własnej produkcji". Podczas uruchomienia sprawdza sobie pewne obszary i podejmuje decyzje o tym czy ma wgrać nowy program. Oczywiście przed tym zabiegiem kasuję sobie obszar pamięci (stronami) w miejscu wgrywania nowej aplikacji (niech to będzie...
Przyszedł czas na zrobienie własnego bootloadera a z nim kilka problemów i pytań. Pierwszym problemem jest skrypt linkera: nie potrafię stworzyć sekcji bootloadera na początku programu. Stworzyłem sekcję na końcu. Co muszę poprawić w poniższych skryptach żeby mój bootloader był za tablica wektorów przerwań aż do adresu 0x08000400? Od 0x08000400 ma być...
Witam i dziękuję za zainteresowanie tematem. Moim celem jest napisanie klasy która zarządzałaby umieszczoną w pamięci FLASH tablicą wektorów przerwań. Chodzi o to aby w tablicy znajdowały się wskaźniki na statyczne metody tej klasy. W momencie wystąpienia przerwania następowałby skok do funkcji obsługi przerwania (czyli do statycznej metody klasy),...
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...
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...
Witam, Napisałem program, w którym do odliczania czasu używam SysTick'a i przerwania od niego. Gdy skompiluję i zapiszę program do pamięci Flash, program ten działa jak należy i możliwe jest jego debugowanie. Jeśli skompiluję i wpiszę program do pamięci RAM, to program nie działa poprawnie, a debugować go można jedynie do momentu wystąpienia przerwania...
Eee... No ale bez sbrk() malloc() nie ma prawa działać... Chyba że jest to gdzieś w reszcie plików zaimplementowane. Pooglądaj wynikowy plik .map - tam zobaczysz co wylądowało w RAM a co we flash. Pliki które masz w tym przykładzie nie są zbyt dobre - szczególnie skrypt linkera... Składnia która jest tam zastosowana wg mnie w ogóle jest niejasna i dziwna...
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...
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...
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...
Oto przepis na umieszczenie treści przerwania razem z prologiem i epilogiem w RAMie bez konieczności bawienia się w skrypty linkera (przenoszenie tablicy wektorów do RAM, to wyższa szkoła jazdy) na przykładzie przerwania z PMP. [syntax=c] void __attribute__((naked, at_vector(_PMP_VECTOR))) MyISR_VECTOR(void){ ISR_in_RAM(); } void __longramfunc__ __attribute__((interrupt(ipl7srs)))...
Używam Twojej kompilacji 050. A potwierdzenie domysłu że coś pozostaje po resecie zaskoczyło mnie ;) Ale ja wgrywam właściwie to samo, bez zmian. No nie ważne. Skrypt (same ewenty, bez konfiga adaptera) : #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~... # WGRANIE SOFTU #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...
Aby tego używać musisz dokładnie wiedzieć co ma a czego nie ma twój st7 Czyli jesli dokladnie nie wiem czy moj st7 cos ma czy nie to moge po prostu nie pisac? A cala tablica wektorow zamiast 16 linijek zmiescic w jednej, tzn np: .rst DC.W main ? Bo tak szczerze to widze ze w ksiazce pana Bogusza w podrozdziale "wektory przerwan" wypisal on listingu...
nie usuwaj tablicy wektorów i całej reszty z której rezygnujesz przy opcji -nostartfiles. skrócenie IVT w celu oszczędzania pamięci Kombinuję dalej, w tabeli dane2 mam wrzucną zawartość hex'a programu, który miga diodą z delay'em (mało ważne), ok 230bajtów, bootloader ładuje mi tylko 1 stronę: Dodano po 20 Ok, gdy zapisuję drugą stronę to muszę zrobić:...
Tablice wektorów mam z przykładów ze strony [url=http://www.freddiechopin.info/]http... Nic w niej nie zmieniałem i wersja 6.1.1 działa dobrze a 7.1.0 wiadomo Tak wygląda tablica wektorów: [syntax=cpp]void (* const vectors[])(void) __attribute__ ((section(".vectors"))) = { (void (*)(void))&__main_stack_end,// Main stack end address...
nie wiem czy moge mowic o cukcesie gdyz pojawia sie: srst pulls trst - can not reset into halted mode. Issuing halt after reset. Nie ma innej opcji w przypadku srst_pulls_trst - nie przejmuj się. ale rdzen sie zatrzymuje tyle tylko ze wykonal juz jakies instrukcje? cpsr: 0x6000001f pc: 0x00002030 Tak - procek wykonał już jakieś instrukcje, więc trzeba...
Na swojej stronie ( www.freddiechopin.info ) w dziale Download > ARM > Przykłady umieszczone zostały dwa przykładowe projekty pod Eclipse - jeden dla NXP LPC2103 , drugi dla ST STM32F103RB . Przykłady te (w założeniu) są dopełnieniem artykułu ze strony o nazwie ARM toolchain - tutorial (na stronie w dzale Artykuły > ARM , dyskusja na forum - http://www.elektroda.pl/rtvforum/topic13...
Nieco podłamany tematem kol. (at)PiotrLenarczyk postanowilem jednak napisac jednak trzeci krótki prosty mikro poradnik dotyczący startupu. Wszystkie dywagacje będą dotyczyć C i najbardziej popularnego wśród hobbystów i nie tylko gcc. Standard C wymaga aby zgodny (nieco upraszczając) ze standardem toolchain ma: 1. Zapewnić obserwolną zgodność działania...
mirekk36 : ad 1/ Kod zerujący sekcję bss oraz ładujący sekcję data znajduje się gdzieś w okolicach .init3. Niestety kod zerujący sekcję bss już zakłada, że r1 jest równy zero, a więc z formalnego punktu widzenia zerowanie musi znaleźć się w .init0. Ze względu na obecność kodu zerującego bss oraz ładującego data stałymi z pamięci flash, skok do main...
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 Jak wyliczyć coś takiego za pomocą preprocesora ? Criterion for valid user code: The reserved Cortex-M0 exception vector location 7 (offset 0x 0000 001C in the vector table) should contain the 2’s complement of the check-sum of table entries 0 through 6. This causes the checksum of the first 8 table entries to be 0. The bootloader code checksums...
Bo ten program jest zły! Cortex-M3 pod konkretnymi adresami oczekuje konkretnych rzeczy - na samym początku flasha - wartości dla SP, potem adresu (adresu! nie instrukcji!) wektora obsługi wyjątku reset itd. Zapomnij o takim prostym programiku - to tak po prostu nie zadziała. Potrzebna Ci jest tablica wektorów, potrzebny Ci jest "normalny" skrypt linkera...
Witam Potrzebuje zmoyfikować projekt dla stm32f103vc. Co potrzebuje zrobić?: -zmodyfikować w skrypcie linker rozmiary flasha i RAMu -w makefile nazwe skryptu linkera i zmieniłem 2 linijki (MD na HD:)) # C++ definitions (e.g. "-Dsymbol_with_value=0xDEAD -Dsymbol_without_value") CXX_DEFS = -DSTM32F10X_HD # C definitions C_DEFS = -DSTM32F10X_HD Tablica...
Witam wszystkich. Uzywam Eclipse + OpenOCD (0.9.0) + GCC. Do tej pory używałem STM32F103 (Cortex-M3), a teraz przesiadłem się na STM32F373 (Cortex-M4). Wziąłem ze starego programu skrypt linkera, startup, vectors.c i posklejałem do kupy odpowiednio je modyfikując. Program generalnie odpala się, mogę sterować GPIO. Następnie spróbowałem uruchomić SysTicka....
Witam, Żadne rozwiązanie z innych tematów nie działa. Posiadam płytkę STM32VLDISCOVERY, zasilam ją z portu USB. Dodatkowo posiadam konwerter na FT232, konwerter działa poprawnie, echo jest przesyłane. Korzystam z programu Terminal v1.9b. Program na odebranie 49 ma zapalać diodę LED a po odebraniu 50 ma gasi diodę. Proszę o pomoc w znalezieniu błędu....
Program IAR jest jednym z podstawowych, dostępnych narzędzi do tworzenia oprogramowania na mikrokontrolery. Posiada kolorowe i wygodne środowisko graficzne, wraz ze zestawem zoptymalizowanych, standardowych bibliotek. Poniższy samouczek ma na celu pokazanie, jak skonfigurować te środowisko do wydajnej pracy. W autora praktyce sporym utrudnieniem są...
Witam wszystkich Czy spotkał się ktoś kiedyś z takim przypadkiem: Usart wysyła poleceniem USART_SendData(USART1, 0x55) do przejściówki wartość i po odczytaniu w progarmie np gtkterm uzyskuję literę "U" (czyli prawidłowo patrząc na tablice ascii). Niestety jest to jedyna wartość zgodna z tą tablicą :/ bo jak wysyłam np. wartość 0x5a to zamiast litery...
Witam Opracowałem prosty program, żeby nauczyć się eliminować programowo drgania styków. Idea jest taka, że po starcie wyświetla się napis „Test0 „ po naciśnięciu przycisku „Test1” i „Test2”. Wykorzystałem rozwiązanie z przykładu 9.6 z książki K. Paprockiego, sam przykład po uruchomieniu działa prawidłowo, czyli zlicza...
Hmm, po mojej przygodzie z jednym PICem z rodziny 18F nie jestem jakimś szczególnym ich fanem ;), ale może coś się zmienia w dobrą stronę? Czy ktoś jest w stanie wyjaśnić zagadkowe pojęcia typu Możliwość zwektoryzowanej obsługi przerwań Czy oznacza to, że w końcu po wystąpieniu przerwania nie trzeba "if-ować" po wszystkich możliwych flagach, żeby dowiedzieć...
Witam wszystkich, Rozpocząłem swoją przygodę z mikrokontrolerami stm32 od najprostszego z możliwych programów, a mianowicie miganie diodą. Po rozkręceniu PLL do 72 MHz, postanowiłem zmieniać stan diody co około 1s(w pętli opoźniającej zliczałem zmienną "int i" do 72000000). Problem polega na tym, ze stan diody zmienia się nie co 1s, a co kilka sekund....
Dzień dobry, Zacząłem naukę STM32 i mam problem z USART2. Chciałem się połączyć z hyperterminalem. Od strony terminala wszystko działa poprawnie (sprawdzone przez zwarcie tx i rx). Od strony stm-a wygląda to tak, że kiedy chcę odebrać jakiś znak, to program wisi na fladze oczekującej na odebranie znaku. Natomiast kiedy chcę wysyłać, to nic się nie dzieje...
Witam od dwóch dni walczę z bibliotekami Fatfs, i mam niezidentyfikowany błąd, wykończyły mi się pomysły. Sprawa wygląda tak posiłkuje się przykładami z książki STM32 w praktyce Autor: Krzysztof Paprocki. W zasadzie chce skompilować gotowy kod , (przykład R9 sd_fatfs) działam na układzie STM mini http://allegro.pl/zestaw-uruchomieniowy-...
Witam Idea działania programu jest taka, że po starcie na wyświetlaczu pojawia się komunikat "napis testowy", a po naciśnięciu przycisku wyświetlany jest napis "STANDBY MODE" i układ przechodzi w tryb standby. Po naciśnięciu przycisku napis wyświetla się, ale mikrokontroler nie pracuje w trybie standby (podłączony miernik na pinie IDD). Niestety nie...
Witam. Od pewnego czasu walczę z chińską płytką (blue-pill) z STM32F103 na pokładzie i z tego co już się nauczyłem oraz co sobie w ReferenceManualu wyczytałem to wiem, że AVR'y odłożę na półkę:) Moja nauka jest w stylu 'bare-metal' wykorzystuję jedynie pliki nagłówkowe stm32f103xb.h i kilka od CMSIS które można wydobyć z STM'owych bibliotek, więc ich...
Hej Freddie, tym razem to już mam poważny problem i proszę Cię o pomoc. Problem mam cały czas z przerwaniami. Nigdy mi w sumie tak naprawde nie zadziałaly na tym projekcie od stm. Przerobiłem Twoją tablice wektorów przerwań: /** \file vectors.c * \brief STM32 (STM32F101 - STM32F103) vector table and __Default_Handler() * \details STM32...
Po pierwsze ta linijka jest bardzo ciekawa: DISCARD : { libc.a ( * ) libm.a ( * ) libgcc.a ( * ) } Ja bym to wywalił od razu, bo to wcale nie usuwa informacji debugowania, tylko CAŁOŚĆ kodu biblioteki, który w tym momencie nie będzie zlinkowany - dzielenie, funkcje matematyczne, dowolne funkcje "standardowe" - aż dziwne że z czymś takim się to kompiluje....
Witajcie, dziękuję za wszystkie posty. Większość okazała się bardzo pomocna. Swoją modyfikację chciałam zacząć od najprostszej zmiany, tj. zmiany konfiguracji modułu bluetooth poprzez komendy AT. Najpierw jednak chciałam przetestować odbiór danych z terminala. Znalazłam program i nieco go zmodyfikowałam, którego celem jest odebranie wpisanej danej w...
http://images31.fotosik.pl/133/fb5cd070f... Chcialbym dzis przedstawic konstrukcje, ktora bedzie czescia mojej pracy magisterskiej. Jest to kontroler do matryc LCD oparty o uC wraz ze specjalizowanym ukladem driver'a matrycy. OVERVIEW: Glowna idea projektu jest stworzenie calkowicie autonomicznego urzadzenia, ktore pelniloby role ukladu posredniczacego...
https://obrazki.elektroda.pl/6198539800_... Układ Perceive Ergo Start-up z Doliny Krzemowej twierdzi, że na nowo "wynalazł" matematyczny opis sieci neuronowych i stworzył w ten sposób nowy akcelerator AI do pracy na krawędzi, który nie wykorzystuje dużej liczby zrównoleglonych akumulatorów w swojej strukturze, jak realizuje się to...
Niektóre narzędzia pozostawiają wiele do życzenia. Można mieć setki opcji, ale jeśli te opcje nie są opisane, albo opisane lakonicznie, bo narzędzie nie pozwala na obszerny komentarz, to tak naprawdę niczego to nie ułatwia. Trzeba się domyślać co autor miał na myśli, albo szukać gdzieś w zewnętrznej dokumentacji, jeśli w ogóle ona istnieje. Jeszcze...
OpenOCD zaktualizowanie tak jak kompilator wcześniej. Przerabiam przykład od początku teraz na bazie tego o którym mówiłeś LPC Będe wklejał tutaj co dokładnie przerabiam. Jeśli coś robię źle to mam nadzieje że mnie poprawicie. Jeśli dobrze to mam nadzieje że komuś się przyda. 1.Import projektu lpc1114_blink_led i rename na stm32f0_blink_led 2. Zmiany...
To już ustawiam w aplikacji: [syntax=c]int main( void) { //--------------------------------------... zegara----------------------------------... FLASH->ACR = FLASH_ACR_LATENCY_2 | FLASH_ACR_PRFTBE; // ustawienie latencji RCC->CR |= RCC_CR_HSEON; // kozystanie z zewnętrznego oscylatora ... //--------------------------------------...
Witam, Mam problem z którym już chwilę się borykam. Do STMa mam podłączony czujnik BAR180 z którym już się komunikuje po I2C. Dodatkowo skonfigurowałem ADC w trybie pomiaru jednokrotnego wyzwalanego przez Timer1 co 500µs. Dane z ADC chcę przerzucić do bufora przez DMA. Utworzyłem bufor jako tablicę o 256 pozycjach, ponieważ tyle chciałbym pomiarów....
Masz rację, że szkoda całego tygodnia na taki problem:). Oto cały kod: Main: http://obrazki.elektroda.pl/2257364500_1... podłączenie do STM'a wygląda nastepująco: RxD do PA10, TxD do PA9. Więc nadal stoję w miejscu, ale nie poddaje się;).
tablica wektor tablica wektor stm32 tablica flash
zasięg telewizji naziemnej pomiar częstotliwość dźwięk rozszerzyć wolumin
obrotomierz skacze wskazówka amica pa4560a420
Klasyczny telefon z klawiaturą – CAT B40, Hammer 5 Smart, Nokia 8210 4G – wysoka głośność i zasięg SSC9512S – funkcja kontrolera LLC w zasilaczu telewizora, objawy uszkodzenia, Sanken