Ja zmiennych globalnych staram się nie używać. Mój pierwszy projekt to mnóstwo externów. Jak zacząłem się w tym gubić to stwierdziłem, że to chyba nie tędy droga. Teraz każda para plików c i h odpowiada za konkretną rzecz. Ewentualnie includuje inne i odpowiada za większą konkretną rzecz. Każdy mój plik ma dwie zmienne typu static. Pierwsza to numer...
Czy do funkcji HAL_UART_Receive_IT na pewno powinien być przekazywany adres wskaźnika do struktury UART_HandleTypeDef?
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.
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.
Mam głupie pytanie: Jak można się wskaźnikiem poruszać wewnątrz struktury po komórkach tablicy ? Jak to napisać ?
Bardzo wiele zostało już powiedziane (bardzo dobre porady). Moim zdaniem krokiem zero jest jako tako umieć programować w C na PC (jak przebiega proces kompilacji, kod źródłowy podzielony na pliki *.c i *.h, organizacja pamięci i wskaźniki, struktury i wskaźniki do nich, słowa kluczowe register, volatile, static, etc., preprocesor, makefiles i make,...
Z tym rzutowaniem to wolę jednak "ręcznie" to robić....jakoś tak wydaje mi się bezpieczniej. U mnie akurat sizeof zawsze będzie mniejsze niż 256 gdyż jest to po prostu ilość bajtów do zapisania jednej zmiennej/tablicy/struktury i nie zamierzam robić większych :wink:. Biblioteki z ST są zakręcone..niestety. Zaletą mojego pomysłu jest to że struktura...
A masz namiar na prostą bibliotekę parsującą NMEA? Najlepiej taką, która jako parametr wejściowy oczekuje wskaźnika do bufora z ramką z modułu oraz wskaźnik do jakiejś struktury, w której będą rozkodowane dane.
(at)KryQ A jesteś w stanie zobaczyć jak wyglądają struktury pod debugerem w wersji działającej i niedziałającej? Nie wrzuciłeś kodu gdzie inicjalizowany jest wskaźnik base.
Cześć, przejrzałem kilka tematów Freddy'ego w tym temacie sprzed kilku lat i dalej nie potrafię wymyślić jak zmusić kompilator do przechowywania stałych w ROM-ie. Wykombinowałem tak: :arrow: [syntax=c]class Foo { public: const char* Name; }; Foo foo; int main() { foo.Name = "asdfg"; //coś tam dalej }[/syntax] To załatwia mi przechowywanie tekstu we...
siedziałem nad tym kilka dni.. przyczyną okazała się nowa biblioteka, w której dodano funkcję "FSMC_AsynchronousWait".. niby standardowo jest disabled, ale po włączeniu program się zawieszał na zapisywaniu do pamięci :) podczas konfiguracji w strukturze należy dodać FSMC_NORSRAMInitStructure.FSMC_Asynchron... = FSMC_AsynchronousWait_Disable;
Coś naplątałeś... Aby uzywać malloca bez dziwnych errorów, musisz zadeklarować odpowiednią ilość miejsca na stertę . Co z tego, ze twoje zmienne zajmują niewiele ramu, skoro najpewniej ustawiles sobie parę kB sterty, i gdy przekroczysz te pare kB, program ci sie natychmiast wykrzaczy, bo oczywiście najpewniej nigdy nie sprawdzasz, czy malloc przypadkiem...
(at)Bluedraco Po drugie (stanleyst) nikt nic nie przeoczył pisząc bibliotekę. Przeoczył programista pisząc błędną wartość w podstawieniu. A co z polami struktury DMA init? przecież tam są miejsca nie na wskaźnik ale na zwykłego inta, to, że to ma akurat taką samą długość, to inna sprawa.
Zgadza się, są rozbieżności w tej bibliotece z dokumentacją. Ten FatFS pochodzi z CubeMX. Już sobie to ogarnąłem za pomocą wskaźnika na bufor LFN. Wykorzystałem wskaźnik znajdujący się w strukturze opisującej katalog, tylko czemu wskaźnik bufora LFN podpina do struktury katalogu zamiast do struktury samego pliku? Trochę dziwne. Poniżej struktura katalogu...
Skompilowane! ale jeszcze nie wgrane. inicjalizacja NVIC po zmianie: NVIC->IP [5] |= 0x00000010; /* set priority lower than SVC */ NVIC->ISER[0] |= (1 << (USB_LP_CAN1_RX0_IRQn & 0x1F)); "Trochę na ślepo walczysz" - nie powiem, że nie. Błąd error: lvalue required as left operand of assignment kompletnie...
Kompilowało się na AVR, a tutaj nie, to fakt. Nie ma takiej możliwości, żeby kod niepoprawny składniowo się kompilował gdziekolwiek. Porada o podstawach C jest wbrew pozorom całkiem sensowna, bo ja niezbyt wiem w czym tu jest problem - toć to nie jest żadna wiedza tajemna... Zadeklaruj sobie strukturę ze znakiem (dane, rozmiar, szerokość, wysokość),...
i również przekażę ją do funkcji przez wartość to kompilator może mi ją zoptymalizować i całą tablicę odłożyć na stos? Tablic nie możesz przekazać przez wartość w C tylko przez wskażnik. Tylko struktury i unie (abstrahując od typów podstawowych) są przekazywane przez wartość w C. Więc jak polem struktury będzie tablica to przekazując tę strukturę -...
Korzystanie z tej biblioteki poza tym mają również inne wady: 1) Struktury inicjalizacyjne marnują pamięć. Te struktury są spakowane, więc dostęp do bitów w tej strukturze jest utrudniony. Co modyfikacja bitfielda kompilator musi uzywac instrukcji BFI,AND,ORR,BIC. Marnuje to sporo czasu, zamiast DWOCH instrukcji LDR,STR. Odczyt zawartości struktury...
To API jest bez sensu więc nie ma co szukać o tym informacji. Dlaczego uważasz, że jest bez sensu? To według Ciebie lepiej pisać odwołując się bezpośrednio do rejestrów? Korzystanie z tej biblioteki poza tym mają również inne wady: 1) Struktury inicjalizacyjne marnują pamięć. Te struktury są spakowane, więc dostęp do bitów w tej strukturze jest utrudniony....
Adres rejestru danych zapisałeś tak: Tutaj akurat USART3_BASE jest liczbą, która dopiero później w nagłówku jest używana jako część definicji struktury USART3, więc problemu nie ma. Poza tym konfiguracje peryferiów razem z tymi wielkimi strukturami przenieś do oddzielnych funkcji, niech te struktury nie będą zmiennymi globalnymi! Przecież nie są globalne...
Wpisałem asmem z przyzwyczajenia. Co do przepełnienia stosu to niemożliwe gdyż wszystko działa tylko ta funkcja umiera. Użycie wskaźnika to ze względu na to, iż szybciej się przerabia kod na wiele struktur(urządzeń) Zmieniłem już na bezwskaźnikowe z dostępem przez '.' To co mówiłem przed zbieżnością nazw zabezpieczam się strukturami (nigdy nie stosuję...
Bardziej mi chodziło jak ogarnąć te dane z tego adresu z payload. A o wskaźnikach i typach danych i strukturach nie omieszkam na pewno :)
Szkoda tylko, że timer nie jest jedynym przykładem na świecie. Spójrz sam do swojego własnego kodu i popatrz w main.c na zmienne takie jak InjectionConfig, MultiModeConfig, adc_trigger_config i pewnie jeszcze kilka innych. Tak, w STM32 jest sporo RAMu i są szybkie, ale to jeszcze nie znaczy, że koniecznie wszyscy muszą stale marnować RAM i czas ze względu...
hohoh Tymon, szczerze to nie czytałem całego tego dokładnie, ale na pierwszy rzut oka to czy to nie jest "przekombinowane" jesli chodzi o nasz problem? ;p Zajmuje to dość trochę pamięci, tworzenie jakichś tablic wskaźników do struktur w takim przypadku to też dość nieciekawa sprawa. Szczerze mowiac to zrozumienie twojego kodu zajmuje troche czasu :D...
http://obrazki.elektroda.pl/9377221800_1... W dziale mikrokontrolery ARM znajdziecie bezpłatny (do osobistego użytku edukacyjnego) poradnik STM32 przygotowany przez szczywronek . Materiał dostępny jest w temacie: techekspert: Do kogo kierowany jest poradnik, jakie podstawy powinien mieć opanowane czytelnik? Czy znajomość określonej...
https://obrazki.elektroda.pl/4402957600_... Damien George zaprezentował MicroPythona w wersji 1.20. W przygotowanym wydaniu dodano między innymi obsługę nowych płytek, w tym Raspberry Pi Pico W, lekkiego menedżera pakietów o nazwie mip, a także usprawnienia, pozwalające na zmniejszenie rozmiaru dzięki zastosowaniu struktur typu skompresowanego...
Witam wszystkich. Przenosze kod z STM32 L 053 na STM32 F 030 Ruszylo mi prawie wszystko czyli: RCC GPIO SPI Pracuje na kodzie dostarczonym przez ST pod pewien moduł radiowy. Kod jest oparty o HAL generowany z Cube. Mam problem z DMA. Problem ten jest wynikiem nie wykonywania się jednej linijki kodu. Zamiast wskaznika (adresu funkcji) wpisywane jest...
Bazowałem właśnie na tym samplu tworząc swój projekt. Z racji braku czasu dopiero teraz powróciłem do tego tematu. Doszedłem do przyczyny lądowania procesora w Hard Fault, otóż w pliku ethernetif.c zdefiniowałem globalny wskaźnik do struktury netif i widzę, że zaraz po inicjalizacji stosu dane z pod tego adresu ulegają uszkodzeniu. Następnie funkcja...
Hej, mam następujący problem. Napisałem niewielką klasę opakowującą ADC1 dla STM32L4 (tak, piszę w C++ ;) ). Jako, że chciałbym aby była dość ogólna, wskaźnik do adc przechowuję jako pole Z trudem mogę sobie to wyobrazić. Na góralski rozsądek takie tworzenie zachodzi raz i nigdy nie jest ziemieniane. Słowa "ustawiane w konstruktorze" pachnie mi tym...
Problem rozwiązany :) "Wystarczy" stworzyć na początku takie oto dwie zmienne: [syntax=c]char time_zone[]="TZ=CET-1CEST,M3.5.0/2,M10.5... extern char* __env;[/syntax] time_zone ma wartość odpowiednią dla polski. Jeśli będą chętni to wyjaśnię co robią poszczególne "znaczki". Po tym zabiegu na początku main dajemy takie coś: [syntax=c]__env = time_zone;...
Czy ktoś zmusza Cię bronią do używania tej biblioteki? Przecież żeby wystartować transfer trzeba (z tego co pamiętam) wykonać JEDEN zapis do JEDNEGO rejestru, a ty chcesz wywoływać 3 funkcje... To już szybciej będzie te dane ręcznie kopiować... Tutaj masz np przykładową PEŁNĄ konfigurację dwóch kanałów DMA do SPI (brak oczywiście konfiguracji SPI, czy...
Tak podejrzewałem, czyli zostawiam w przerwaniu, i już odebrane dane wrzucę do kolejki. Póki co zmagam się z innym problemem, bo pomimo tego, że teoretycznie wszystko działa i urządzenie przechodzi enumerację, mogę się z nim połączyć i coś do niego wysłać i poprawnie odczytać, to próba wysłania czegoś do komputera kończy się stadem nulli w terminalu...
Witam, bez niepotrzebnych wstępów przechodzę do sedna sprawy: - Środowisko pracy Ride7 + programator debuger Rlink - Mikrokontroler STM32F103T8U6 - Projekt - przykład startowy z książki USB dla niewtajemniczonych - Cel - zamiganie diodami na porcie PB0 i PB1 - Źródła - biblioteki STM i kod dostarczony do książki http://obrazki.elektroda.pl/1724449400_1...
Optymalizator nie z wszystkim sobie poradzi. Dodałbym - trochę z doświadczenia - że optymalizator w ogóle nie działa dla "prawdziwych funkcji" a dla "nieprawdziwych" (inline) zwykle nie działa gdy parametr jest przekazywany przez referencję (wskaźnik, adres, jakkolwiek to ktoś chce nazwać). No a przecież w SPL WSZYSTKIE funkcje (włącznie z najgłupszymi...
Witam BusTurnAround mam na 1 a AddrSetup i AddrHold, zmieniałem od 0 do 5. Problem jest tylko wtedy gdy robię tak np: Zapisuje sobie jakieś dane w 1000 strukturach JakasTablica, Wiem jakie są w niej liczby a potem je tylko czytam i przesuwam wskaźnik o długość struktury [syntax=c]typedef struct { unsigned int Dane1; unsigned short Dane2; unsigned char...
Wydaje mi się, że to forum elektrody jest używane głównie przez amatorów lub okazyjnych programistów . ..Bullshit. Jesli wszyscy byliby tutaj dorywczymi lub poczatkujacymi programistami, to kto by pomagał w rozwiązywaniu problemów? "pomagał głuchy ślepemu". Racz zauwazyc, ze na tym forum wypowiadają się ludzie, którzy pracują już w zawodzie związanym...
na podstawie kursu języka C Wskaźnik na unie i strukturę Podobnie, jak na każdą inna zmienna, wskaźnik może wskazywać także na unie lub strukturę. Oto przykład: typedef struct { int p1, p2; } Struktura; int main () { Struktura s = { 0, 0 }; Struktura *wsk = &s; wsk->p1 = 2; wsk->p2 = 3; return 0; } Zapis wsk->p1...
Przegryzienie się przez ponad 1000 stronicowego manual'a i "ogarnięcie" procesora jest procesem dość długotrwałym i żmudnym, stąd też następuje próba przeskoczenia tematu za pomocą gotowych bibliotek. Nigdy jakoś nie miałem okazji "przegryzać się" przez ten 1000 stron Reference Manual. Od razu przechodzę do Register Descriptions, bo ile to razy można...
Witam Przepraszam, że tak późno (brak czasu), ale może jeszcze się przyda... Proponuję uruchomić układ w debugu. Potem, gdy USB jest już skonfigurowane, zatrzymać wykonanie programu (przez breakpoint) na funkcji Storage_init z pliku usb_storage_msd.c. U mnie jest inicjacja karty jak w poniższym kodzie: [syntax=c]int8_t STORAGE_Init (uint8_t lun) { SD_Error...
Powracam z nowym pomysłem, którym są template'y Może na wstępie napiszę po co mi to w ogóle jest. Otóż mam taką fanaberię, żeby stworzyć "framework" do ARMów w C++. Wszystko byłoby fajnie, gdyby nie trudności z przechowywaniem danych w pamięci FLASH. Otóż taka na przykład klasa Pin dla Cortex-M3 (STM32) wymaga dwóch wskaźników - na komórkę pamięci odpowiedzialną...
Dla przykładu ja lubię taką formę: https://github.com/marcinszajner/Half-br... Idealnie tutaj to praktycznie kopia z exampla od ST z ich z zestawu STM32Cube_FW_G4, ale dobrze pokazuje że w embedded zamiast klasy, struktura nadaje się wyśmienicie. What? Temat o C++17 a Ty wrzucasz najzwyczajniejszy kod w C z...
Hm...zobaczmy..wchodzi 32 sztuki wartości real w tablicy jednowymiarowej. Wychodzi...no zobaczmy w dokumentacji: http://www.keil.com/pack/doc/CMSIS/DSP/h... w Description, pod grafami podana jest struktura tablicy output...wychodzi na to że dwuwymiarowa, więc [32][2], ale przecież... funkcja arm_rfft_fast_f32 jako output przyjmuje:...
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...
Witam, Głowię się od jakiegoś czasu jak rozwiązać następujący problem. Piszę program na procesor STM32F4, który miałby po RS232 wysyłać dane zawarte w strukturze: [syntax=c]struct rs232_data { int a; int b; int c; }; struct rs232_data dane; dane.a = 12; dane.b = 34; dane.c = 76;[/syntax] Póki co to przykładowa struktura, która ma na celu wyłącznie przetestowanie...
No, chyba właczam te porty: Chyba nie. Konfigurować to może i je konfigurujesz, ale ich nie włączasz. Nie wierzysz to sprawdź debuggerem czy zmienia się wartość jakiegokolwiek rejestru odpowiedzialnego za GPIO. Możesz sobie nawet spróbować ją zmienić ręcznie. Słowo daję, działało mi na STM32L Nie ma takiej opcji - musiało być dodatkowe włączanie portów,...
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...
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...
Tworzenie aplikacji użytkownika w C++ ma wiele zalet, więc nie jest zaskakujące, że język ten staje się coraz bardziej popularny wszędzie, w tym w systemach opartych na małych mikrokontrolerach. Projekt „mbed” jest w pełni skoncentrowany na tym języku. Wiele RTOSów zapewnia warstwę kompatybilności z C++, ale w przeciwieństwie do „dużych”...
Recensione Miałem okazję być na tym evencie, więc słów kilka... Konferencja prowadzona była przez firmy Computer Controls (PL) oraz LDRA (UK). Na początku miała miejsce prezentacja działalności obu firm. Następnie poruszone zostały zagadnienia związane z bezpieczeństwem w embedded - było pokrótce o procesie tworzenia oprogramowania, testów, oraz ogólnie...
wskaźnik struktura stm32 wskaźnik wskaźnik struktura tablica
nawiew chrysler urmet zasilacz radio skodzie
scania akumulatory scania akumulatory
Kamera cofania Acesse 66445306 – napięcie zasilania 12 V DC, pobór prądu, podłączenie Szarpak nie działa: luźny sznurek - przyczyny i naprawa