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.
Jeżeli skok jest z przerwania to HardFault jest spowodowany tym, że zmieniasz wskaźnik stosu w obsłudze przerwania.
Stos jest umieszczany zaraz za danymi Nie tak zaraz. Domyślna konfiguracja z Cube'a ustawia wskaźnik na końcu 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
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...
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...
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...
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 ?
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.
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...
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.
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...
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....
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...
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...
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...
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?
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
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...
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
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...
char *s = 0; sprintf_(s,"Moj stryj ma %d lat",liczba);//przykladowy tekst Przecież sprintf nie przydziela dynamicznie pamięci - jeśli wywołasz tą funkcję w ten sposób, to sprintf_() zaczyna pisać pod adresem 0 (aktualna wartość wskaźnika i koniec. Do tej funkcji musisz podać prawidłowy bufor, który pomieści cały text wynikowy. Zadeklaruj...
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 .
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...
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.
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.
Dziwne rozwiązanie z tym rzutowaniem wskaźnika. W STM32F1 nie było takiego kombinowania. Może jednak dane są wyrównywane do lewej, a nie jak pisze w RM do prawej. Co będzie jak dasz tak: [syntax=c]SPI1->DR = dane<<8;[/syntax]
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...
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...
... 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...
Dlaczego w zasadzie nie wolno wykonać skoku do adresu resetu(a sprzęt wykonuje tą operację w przypadku startu z drugiego Flasha), skoro chcę w zasadzie zasymulować takie zdarzenie? Dlaczego musi to być skok do samej procedury RESETU? Bo to nie jest AVR. Rdzeń robi tak samo, sprzętowo pobiera wektor procedury startowej i skacze do niej! Zarówno w urządzeniu...
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!!
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.
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!!
Wskaźniki wskaźnikami ale czym zastąpią µC w sterowniku silnika ? Może wróci do łask ten słynny regulator a maszyny parowej ? No jak to czym - gaźnikiem.
1. Co to jest dokładnie to wyrównanie stosu do 8 bajtów i do 4 bajtów, standard API zaleca 8 jak to wygląda w pamięci Chodzi o to, że w momencie "wejścia do dowolnej funkcji" wartość rejestru wskaźnika stosu (SP) ma być podzielna bez reszty przez 8. Do "wejścia do dowolnej funkcji" wlicza się również wejście do przerwania, a ponieważ kod tego w sposób...
stm32 tablica wskaźnik stm32 struktura wskaźnik stm32 f103rb
zasilacz regulowany komputera curtis ustawienia obrazu magnum wtrysk
pogoda gorzów przetwornica 24vdc 12vdc
Regulacja zaworu gazowego w Crystal II Plus Jak rozkodować radio VW Alpha - instrukcje i porady