Timery i dokładne odmierzanie czasu w różnych miejscach kodu. Zamiast korzystać z kilku timerów, można w różnych blokach kodu konfigurować 1 timer i wstrzykiwać odpowiednią funkcję przerwania. Oczywiście pod warunkiem, że nie będziemy musieli odmierzać czasu dla dwóch bloków jednocześnie. Wygląda na to, że potrzebujesz po prostu callbacka w jednym...
https://obrazki.elektroda.pl/9151185000_... Autor poniższego zestawienia jest inżynierem i konsultantem wsparcia dla systemów wbudowanych. W swojej karierze poznał on szereg różnych architektur mikrokontrolerów, różniących się wydajnością, wyborem peryferii, poborem zasilania etc. Wybór odpowiedniego układu stanowi zawsze o sukcesie...
i wskaźnik poleci do RAM-u; I to cię dziwi? w pierwszym przypadku wskaznik nie moze sie zmieniac tak ze może być w ROM, w drugim może sie zmiemiac wiec bedzie w RAM. Nie rozumiem z czym masz problem. A raczej jest to problem wydumany.
Wszystko stanie się jasne, jak poznasz sposób na "czytanie" typów zmiennych. 1. Zaczynasz od nazwy 2. Idziesz do "końca" w prawo 3. Następnie do "końca" w lewo 4. Nawiasy mogą wyznaczać "lokalne końce". Tak więc Twoja zmienna const uint8_t *Tab[3] to trzyelementowa tablica wskaźników na stałe uint8_t Jak sam widzisz nie da się wyczytać, że sama tablica...
Witam Nie znam dokładnie Keil-a, ale pewnie będzie podobnie jak w innych środowiskach. Rozpisz sobie tę linię: [syntax=c] *a++ = 0x4F; [/syntax] na [syntax=c] *a = 0x4F; a++; [/syntax] i ustaw break point w linii a++; W ten sposób po zatrzymaniu będziesz mógł odczytać adres na który wskazuje wskaźnik a.
Stos jest umieszczany zaraz za danymi Nie tak zaraz. Domyślna konfiguracja z Cube'a ustawia wskaźnik na końcu pamięci.
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...
Aby wyjaśnić Ci Twój problem, podaję Ci metodę "czytania" typów zmiennych, który wyjaśnia wszystko. Jest kilka zasad: 1. Czytanie zaczynamy od nazwy zmiennej 2. Czytamy w prawo dopóki nie dojdziemy do "końca", po osiągnięciu "końca" czytamy w lewo od nazwy zmiennej 3. Obowiązują nawiasy, które są "lokalnymi końcami" Tak więc: const char * const l_wartosc[]...
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ć...
Za bardzo kombinujesz. Albo Pisz w C++ albo w C i przekazuj do funkcji wskaźnik do tej struktury. Możesz oczywiście wywoływać funkcje przez wskaźnik i jako parametr dać wskaźnik na wywołująca go strukturę. Tylko po co. Albo pisze się obiektowo w języku obiektowym, albo proceduralnie w języku proceduralnym. Wymyślanie protez obiektowych nie ma sensu
https://obrazki.elektroda.pl/2480476200_... https://obrazki.elektroda.pl/7537338800_... https://obrazki.elektroda.pl/2691569600_... Firma Metriful wprowadziła właśnie na rynek moduł czujnika jakości powietrza „Sense”. Wyceniony został na zaledwie 39 dolarów. Dzięki obsłudze interfejsu I²C...
Tak to prawda dzięki :) już działa lepiej aczkolwiek widzę że dalej przy którejś pętli wiesza się przy tworzeniu dziecka [syntax=c]tprs->child = (struct TPARSER**)malloc (sizeof(TPARSER)*tprs->ElementsOfTab);[/... jakby mu brakowało pamięci albo wchodził na zapisany wskaźnik ;/ hmm w jaki sposób móglbym to sprawdzić w keilu ?
Poprzez chwalenie się rozumiałem to, że po prostu mówiłeś, że to masz i że potrafi to : tyle że przechowującą dowolny rozmiar w jednej "komórce". Moja implementacja jest dobra jeśli masz kilka-kilkanaście-kilkadziesiąt zmiennych do zapisywania w teorii dowolną ilość razy w dowolnej kolejności. Gdybyś mi to wkleił to bym to zrobił w jeden dzień no ale...
W żadnym ARMie (i praktycznie w niczym poza niektórymi 8-bitowymi PICami) nie ma stosu sprzętowego. A to że rdzeń / kompilator w jakiś sposób korzystają z rejestru używanego jako wskaźnik stosu, nie znaczy jeszcze że masz do czynienia ze stosem sprzętowym.
le jeżeli utworzę tablicę globalną jak poniżej: static const uint8_t tablica Nie. Co zrobi kompilator tego nie wiesz, bo modyfikatory static i const nie służą określaniu położenia zmiennych, czy tablic w pamięci. const ci jedynie daje tyle, że próba modyfikacji takiej tablicy powinna zakończyć się błędem podczas kompilacji. Oczywiście w praktyce, na...
A jaką przewagę mają wasze definy nad: [syntax=c]const int zmienna = 35235;[/syntax] ? Żadną. Zrób takie stałe i do funkcji przekaż wskaźnik na nie i tyle. Masz przy okazji kontrolę typu, dane we flashu i brak jakiegoś dziwnego rzutowania.
Jak uruchomić STM32 z FLASH by działał później w pamięci RAM. Dedykowane dla Keil: - plik startup_stm32f10x_xx.s Ułatwię niektórym czasu i szukania w necie rozwiązań flashowania z poziomu własnego bootloadera pamięci programu. Ja przyznam szczerze nie znalazłem żadnego opisu w necie, wobec czego napisałem własne rozwiązanie. Jako że asembler ARMów to...
Nie pamiętam co wyzwala TXa - poprawny koniec poprzedniej transmisji, czy wolne miejsce w skrzynce? Jak to drugie: włączyć. I niech sobie dane z bufora okrężnego zaciąga. Byle tylko wskaźnik do komunikatu był wspólny w przerwaniu i obsłudze bufora. Jeśli to pierwsze: przerwanie->on, wartość pierwszej ramki do bufora, buffer_ptr++, wyjście z funkcji....
ja właśnie rozglądałem się za sprzętem do zrobienia falownika Mikro-kontrolery z rdzeniami arm jak stm32f103 lub lpc1768 mają bloki pwm przystosowane do sterowania silnika. 3 fazowe timery z wyjściami komplementarnym przykład taki masz w dokumencie dla lpc1768 http://www.nxp.com/documents/application... Problem na jaki się natknąłem przeglądając...
Witam! Mam kłopot z uartem w stm32. Wysyła ok, wchodzi w przerwanie od rx uarta i odczytuje jego DR zapisując do tablicy i zwiększając wskaźnik do tablicy żeby był gotowy na następne przerwanie ale ono właśnie nie wystepuje pomimo, że następny bajt przychodzi uartem. Systick co 100ms inicjuje wysłanie zapytania do zewnętrznego urządzenia i urządzenie...
tymon z takim zapisem bym uważał, bo kolega kaczor jest początkujący i może uznać, iż on działa zawsze :) [syntax=c]#define MAX_ARRAY(array) ((sizeof(array))/(sizeof(array[0])))[/sy... Ja może wyjaśnię czemu void * jest przekazywany do funkcji i zeń też zwracany. Jest to chyba jedyny sposób na zachowanie uniwersalności takich funkcji bo można włożyć...
Chciałbym się dowiedzieć czy ma ktoś doświadczenie z pisaniem programu na stm32, który umożliwiałby zdalne przeładowanie wykonywanego w procesorze kodu ?? Chodzi mi o sytuację gdy odpalam program na procesorze, program zaczytuje do ramu zawartość pliku ze skompilowanymi instrukcjami, ustawia wskaźnik wykonania na początku zaczytanego kodu i wykonuje...
Poprzez reset tego nie uruchomisz. Potrzebna jest do tego inna opcja. Żeby program ruszył z RAMu, Loader musi ustawić wskaźnik stosu, wskaźnik tablicy wektorów i wywołać funkcję wejściową. Dodano po 41 Tablica wektorów przestawia się sama w zależności od konfiguracji pinów BOOTx. No tak, nie wziąłem pod uwagę, że to STM32 A jednak Note: When booting...
Witam, Mam problem z komunikacją mojego STM32 F103RB z płytką Adafruit CAP1188. Wydaje mi się że problem może być w moim kodzie - konfiguracja SPI lub sposób komunikacji z modułem. Według dokumentacji CAP1188 najpierw powinienem wysłać 2bajty resetujące (0x7A), następnie wskaźnik do adresu z którego chcę odczytywać, lub wpisywać (0x7D), dalej - adres...
W przerwanie obsługi na 100% wchodzi, bo widzę to pod debugiem, natomiast nie wysyła deskryptora. Tzn jestem przekonany, że jakiś problem jest w samym przygotowaniu danych albo wysyłce. Do tej funkcji dociera [syntax=c] void USB_DataInStage (void) { DWORD cnt; if (EP0Data.Count > USB_MAX_PACKET0) { cnt = USB_MAX_PACKET0; } else { cnt = EP0Data.Count;...
Witam wszystkich. Od jakiegoś czasu ćwiczę STMy. Przyszedł czas na bootloader, ale stanąłem w zasadzie na początku drogi. Mój zestaw to: - ARM GCC (Linaro) w wersji 4.7 2012q4 - CooCox - STM32F4 Discovery - przykład AN3965 "STM32F40x/STM32F41x in-application programming using the USART" Po kolei: - istniejący i działający program zlinkowałem z użyciem...
Witam, Pytanie jak w tytule: ilu bitowe są wskaźniki w STM32F4xx? Chodzi o dostęp do pamięci (RAM czy FLASH) powyżej 64kB? Czy wystarczy zadeklarować tablicę: const TABLICA[64][2048]={......} żeby można było ja potem odczytać np. uint16_t wynik=TABLICA[13][1209] - czy taka operacja odczyta element 1209-ty z podtablicy numer 13?
Tak BTW to w 16-bitowych PICach odczyt i zapis do portu trwa zapewne tyle co w AVR, mają więcej pamięci, 16-bitowe porty i śmigają na 40MHz No tak, tylko znowu nowy procesor, nowa architektura, ale dzięki za naprowadzenie na taki trop. Swoją drogą sprawdziłem, że STM32 potrafi wysyłać na port dane z prędkością znacznie powyżej 18MHz, niestety dopiero...
Hej, Dla potomnych przepis na DAC z DMA w SMT32: DMA1_Channel7_IRQHandler działa normalnie (pozwalając np. na przełączanie odtwarzania dźwięków pomiędzy dwoma bankami). Pozdrawiam
for(uint8_t i = 0 ; i < sizeof(data); i++) - to jest złe. Bo sizeof(data) zawsze będzie 4 jako że jest to wskaźnik. ma być i < length Masz tu UB. Być może jest coś jeszcze bardzo podobnego. Pamiętaj sizeof(wskaźnik) nie zwraca wielkości obiektu wskazywanego przez wskażnik, tylko wielkość samego wskaźnika
ale przecież w definicji tej punkcji nie ma informacji, że ma być to wskaźnik. Za to w tej pierwszej (f_read) już jest. Kompilator się nie czepia, bo akurat tam jest to poprawnie (składniowo), choć wcale nie tak jakbyś tego oczekiwał. znasz rozwiązanie mojej zagadki Owszem. Podać od razu? <: Rozumiem, że chodzi o to, że char to jeden znak a char...
Dziękuję za odpowiedź. Zgodnie z wcześniejszymi radami, zmieniłem pojedynczy transfer na 120bajtów. Gdy transfer się kończy, wyłączam układ FT311D, ustawiając na #SS jedynkę (makro FT311_DEZAKTYWUJ). Mam jednak problem z gubieniem danych i / lub zawieszaniem się transmisji, o czym dalej... Kod wysyłający dane wygląda tak: [syntax=c]void wyslijDane (...
W maliny nie idzie chociaż czytałem na forum FatFs, że wspomniane błędy pojawiają się przy problemach z alokacją pamięci i ew nadpisywaniem zmiennej FIL. f_mount muszę jeszcze raz sprawdzić. Podłączyłem tft i sprawdzam wszystkie wartości na bierząco - oprócz tej... Kiedy plik ma wielkość np 1 bajtu. f_open, f_lseek, f_write zwracają 0 a dopiero f_close...
Jeżeli skok jest z przerwania to HardFault jest spowodowany tym, że zmieniasz wskaźnik stosu w obsłudze przerwania.
FSMC_BCR2_MBKEN Rejestr BCR2 jest tylko jak chcę obsłużyć pamięć NOR lub SRAM. Patrz RM0008.
Czy do funkcji HAL_UART_Receive_IT na pewno powinien być przekazywany adres wskaźnika do struktury UART_HandleTypeDef?
(at)bartosz.tarnowski Na pierwszy rzut oka przekazujesz niezainicjalizowany wskaźnik do funkcji f_opendir . Prawdopodobnie przekazujesz również niezainicjalizowany wskaźnik do f_mount .
Jak już korzystasz z bibliotek ST to masz chociażby funkcje: FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data) i FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data) Operując na wskaźnikach możesz tam zapisać zmienne dowolnego typu, czy całe struktury.
extern należy dodać wtedy gdy dołączamy ten sam plik .h kilka razy (zresztą kompilator nas o tym uprzejmie poinformuje). Wskaźnik jest zmienną wskazującą na dane w obszarze flash i jest umieszczony w RAM'ie'. Wskaźnik może wskazywać również na dane w RAM'ie.
He, he, he... Patrz na to: while (1); Nic, co jest dalej, nie ma szans się wykonać, więc kompilator eliminuje zbędny kod. ...A ponadto masz błąd w inkrementacji wskaźnika. idx = (idx + 1) % BUFSIZE; - to najprostszy poprawny zapis tego, co masz zrobić, chociaż nie zawsze daje optymalny kod.
Rzecz w tym, Panowie, że te bramki tam są i robią ten OR czy AND, chociaż oczywiście robią go szybciej niż procesor. Ciekawe byłoby porównanie czasu wykonania sekwencji kilkudziesięciu zapisów słów 32-bitowych i kilkudziesięciu zapisów BitBand, przy założeniu, że procesor wykonuje w obu przypadkach wyłączenie instrukcje STR, bez obsługi pętli i modyfikacji...
Może więc warto by było napisać co zrobiłeś, że Ci zadziałało, w jakich konkretnych warunkach ten błąd wystąpi (np wersja Windows/Linux, wersja Ecplise) i pomóc innym? Sam walczyłem z Ecplipsem jak jeszcze nie był dla ARMów tak popularny, były z pluginami problemy ale trzeba było je zwalczyć np. zmienić wersje Eplipsa, zainstalować ponownie, poszukać...
po takiej deklaracji w sekcji .ssitag lądują wskaźniki do tej tablicy, a nie sama tablica, jak wymusic żeby całosć tam wylądowała? Musiałbyś albo w tablicy umieścić nie napisy ("...") tylko po prostu wskaźniki do tych napisów (osobnych obiektów), z których każdy miałby również ten atrybut. Druga opcja to zrobienie tablicy tablic (obecnie masz tablicę...
1. Deinicjalizujesz RCC, PLL i pozostałe zegary 2. Resetujesz i wyłączasz Systick 3. Wyłączasz przerwania wcześniej zerując flagi 4. Ustawiasz wskaźnik stosu na początek pamięci bootloadera 4. Skaczesz do adresu pamięci bootloadera +4 Wszystko jest analogiczne do poniższego przykładu dla F4: https://stm32f4-discovery.net/2017/04/tu...
Musisz sobie utworzyć coś w rodzaju wskaźnika do tablicy. Może to być np int, który będzie wskazywał na kolejne indeksy w tablicy. Wpisujesz zmienną do tablica[indeks] i zwiększasz indeks.
Trzeba właczyć w opcjach kompilatora długie skoki. Ewentualnie trzeba skakać do funkcji w RAM przez wskaźnik, bo to zawsze wykorzystuje długie skoki. P.S. Na Cortex-M3 funkcje z RAM działają WOLNIEJ niż z flasha, to nie ARM7. 4\/3!!
To co wpisujesz do rejestru MOAR to jest "adres adresu" (wskaźnik na wskaźnik) a raczej nie o to Ci chodzi... Tym bardziej że w tym kontekście tab to zmienna lokalna, więc i tak nie zadziała jak trzeba. DMA1_Stream6->M0AR = (uint32_t)&tab; 4\/3!!
... czy da sie to zrobić jakoś wydajniej? Bo w tym przypadku dla każdej ikony tworzę oddzielna funkcję, która różni się tylko tablicą. Napisz jedną funkcję do wyświetlania z parametrami. Funkcję tę uruchom z RAM'u. Kompilator i tak rozmieści "liniowo" tę dwuwymiarową tablicę więc możesz używać wskaźnika zrzutowanego na "u16". Jakbyś nie zrobił (wskaźniki...
Integracja SPX3819 z STM32 dla ulepszonych rozwiązań USB do rozpoznawania linii papilarnych Pamięć flash USB jest jednym z tych narzędzi, których często używamy w naszym codziennym życiu i pracy. Pomaga nam przechowywać i kopiować ważne pliki i dane. Jest mały i łatwy do przenoszenia, ma dużą pojemność, jest niedrogi i działa niezawodnie. Rozmiar dysku...
Mówisz wszystkie? Przecież tam masz przypisanie do zmiennej wskaźnikowej zmienną uint16_t, to nie ma prawo działać. Zresztą robisz to kilkukrotnie. Wg mnie musisz mocno przemyśleć zastosowanie wskaźników bo ewidentnie mieszasz. Przemyśl sobie poniższy kod, który nie powoduje błędów - jest tylko przykładem: [syntax=c] uint16_t wart[16][16]; //tablica...
Pasma 40 MHz nie, ale 40 Msps mam nadzieję że tak. Tylko chciałbym się dowiedzieć który sposób (bez stosowania dodatkowych zewnętrznych układów) będzie najszybszy. Ale przecież podaliśmy jeden sposób :) DMA na timerze. Odczytywanie wejść + zapis do tablicy + inkrementacja wskaźnika jest z automatu, a w pollingu tracisz czas na wykonanie kilku rozkazów....
stm32 tablica wskaźnik stm32 struktura wskaźnik stm32 f103rb
orange konfiguracja internetem nagrywanie plików blokada kluczyka volvo
Lokalizacja bezpiecznika rezerwy paliwa w Suzuki Vitara Lutownica 60W nie grzeje mimo sprawnej grzałki