1) Czy dla zmiennych o rozmiarze poniżej 32bity zawsze przydzielane jest 4 bajtowy rozmiar pamięci? To kwestia wyrównania. Gdyby nie te int-y wcześniej nie byłoby problemu. A że są, to kompilator stara się by każda zmienna 32bitowa była umieszczona pod adresem podzielnym przez 4 - tak by się dało ją odczytać/zapisać w jednym cyklu. Wielkość całej struktury...
Czy działa Systick to łatwo sprawdzić w debuggerze. Zresztą wiele spraw można sprawdzić. Ja bym zaczął od tego czy właściwe rejestry podlegają zmianom. To nie jest nic trudnego, w krokowym trybie Też jaka wartość jest SystemCoreClock, to zmienna globalna. Może ląduje gdzieś w HardFault, zaraz po uruchomieniu. EDIT. Często problemem przy kopiowaniu plików,...
Nie, to zmienna niezmienna
to zamiast define zrób zmienna
Operacje na zmiennych 64bitowych nawet na piechotę nie są koszmarnie wolne na 32bit prockach. Ja bym sie nie przejmowal tymi kilkoma instrukcjami... Typ 64bitowej zmiennej to (unsigned) __int64 . Long long mozna wpisać, ale zmienna i tak ma 32 bity...
w końcu standard C nigdzie nie definiuje, że stałe muszą być we FLASH. Standard C nie wie nic o FLASH, ale to nie powód. poza sensem - kompilacja takiego kodu i linkowanie zajmie niepotrzebnie dużo czasu. Takie obiekty się prekompiluje, robi z nich bibliotekę i linkuje z własnym kodem. Czyli należy się zaprzyjaźnić z objcopy i ar. Rzeczywiscie - plik...
bo masz stos za mały to jest zmienna lokalna i ona się tworzy na stosie, w crossworksie standardowo jest 128-bajtowy stos dla stm32 trzeba w propertiesach projektu poszukać i zmienić
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!!
http://pl.wikibooks.org/wiki/C/Operatory zmienna op= coś to to samo co zmienna = zmienna op coś gdzie op to jakiś operator (dodawanie, dzielenie, mnożenie, fajek palenie, czy tak jak w tym przypadku suma logiczna).
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...
Jeśli zmienna / rejestr jest volatile to działa, używam takich zapisów już od dawna i nie ma z tym problemów.
Rozumiem, ze jak mam 3 zadania/watki/taski, to bajer polega na tym, ze wszystkie zmienne uzyte w danym watku, sa zrzucane/zapamietane - kontekst. Dotyczy to tylko zmiennych automatycznych. Zmienne statyczne są "wspólne" (istnieje tylko jedna kopia, niezależnie od ilości wątków). A co jak sie zadeklaruje jakas tablice TAB Generalnie nie da się zadeklarować...
resource to nie "zmienna" tylko "zasób". Jesteś pewien, że STM32 obsługuje watchpointy z maskami i konkretnymi wartościami? 4\/3!!
Witam, Czy ktoś się spotkał z takim zagadnieniem: Debugowanie działa poprawnie w przypadku wartości we FLASH zawartość pokazywana jest poprawnie a w przypadku zmiennych w RAM pokazuje zwykle wartości 0 jak dam komendę "info mem" w konsoli debugera to wg mnie nie pokazuje poprawnych danych: info mem Using memory regions provided by the target. Num Enb...
zmienna=0 -> zmienna==0? edit przez ten zapis nawet jeden bit kodu związanego z ifem i tego co jest po nim ({} lub linia po) nie jest obecny w kodzie maszynowym
Witam, Czy zmienna np.: uint16_t zmienna = 0x147A; może być poddana operacji w stylu "rotate 1 bit left" ? Chodzi o to, że potrzebuję napisać funkcję liczącą sumę kontrolną dla pewnego urządzenia i jednym z punktów algorytmu jest to, aby zmienną "zmienna" rotować w lewo o 1 bit. Nie chodzi tutaj o samo przesunięcie (shift), tylko o rotację. Wiem, że...
(at)excray, (at)es2, w stm32 jest coś takiego jak rejestr powtórzeń licznika - więc zmienna / licznik stanu nie ma sensu ;) Dygresję nie na temat usunąłem.
A jak daję w f_read & przed zmienną to nic nie zmienia? Zastanów się nad tym sam... Funkcji każesz odczytać 480 bajtów. Gdzie ona je niby ma zapisać, skoro podajesz jej adres zmiennej o rozmiarze 2 bajty? To że wpisujesz tam '&' nie sprawia że nagle zmienna uint16_t staje się workiem bez dna... 4\/3!!
Na chwilę obecną nie mam innego więc po prostu trzeba będzie w programie zabezpieczać aby zmienna była we właściwym zakresie
Zacznijmy od tego, że problem wynikał stąd, że zmienna współdzielona przez przerwanie i wątek główny miała będą deklarację, bez atrybutu volatile. Jeśli przeniosłeś deklarację do procedury przerwania, atrybut volatile stał się zbędny. Po kilku wpisach na ten temat nawet nie zadałeś sobie trudu, by sprawdzić o co chodzi i wciąż błądzisz. Popatrz w startupxxx.s,...
Czyli działa to podobnie jak w bit bandigu, że sprzętowo jest wykonywana operacja RMW na pamięci ? Coś mieszasz - przecież tu jest tylko "write", więc gdzie jakieś "read" i "modify"? zmienna1 = zmienna2; // atomowe zmienna1 += zmienna2; // nie-atomowe - RMW
http://www.st.com/content/ccc/resource/t... lub znajdz funkcję static void low_level_init(struct netif *netif) i tam jest zdefiniowana tablica z adresem. Nazywa się róznie w zależności od wersji (bo to lokalna zmienna)
Jaki duży masz stos i gdzie umieszczony? Czy tą tablicę modyfikujesz w innej części programu? Czy to zmienna globalna, czy automatyczna? Albert
Witam, przecież z punktu widzenia wyjścia ta operacja będzie atomowa:[syntax=c] #define MASKA 0x07 uint8_t zmienna = 5; PORTB = (PORTB & (~MASKA)) | (zmienna & MASKA); [/syntax] Pozdrawiam.
Witam. Próbowałem doszukać się informacji nt. rozwiązania jednak bez większego skutku. Z racji braku doświadczenia chciałbym zapytać kogoś z Was :) Robię sterowanie zaworami proporcjonalnymi. Odbierając informację o wychyleniu Joysticka sterującego za pomocą magistrali CAN, z uC wysyłam sygnał napięciowy na kartę zaworów. W przyszłości zakres napięciowy...
Przy odczycie z DR jest dokładnie ten sam problem co przy zapisie - jak chcesz 8-bitów, to musisz się odwołać przez wskaźnik 8-bitowy (identyczny jak ten powyżej do zapisu). Twoja zmienna tmp i w tym przypadku nie ma żadnego znaczenia, bo "szerokość" odczytu/zapisu jest zdeterminowana tylko i wyłącznie przez źródło odczytu lub cel zapisu, a nie rozmiar...
Dlatego, że zignorowałeś moją radę. ;) Zacznij od tego, co napisałem powyżej. Zmienna do przechowywania temperatury typu int16_t, a nie int. Byte_0 i byte_1 powinny być typu uint8_t, nie rób na tym etapie konwersji do int8_t.
RCC_CFGR_PPRE2_DIV1 Chyba kolega coś pomylił: Ustawiam RCC_CFGR_ PPRE1 _DIV2 , a nie drugi raz rejetr PPRE2 _DIV1 Właśnie się odnosiłem do tego, żeby w ogóle nie "ustawiać" RCC_CFGR_PPRE2_DIV1 więc się nie pomyliłem. Jak zmienna i będzie volatile to też tyle samo trwa ? Masz tam wpisane wartości opóźnień na sztywno i optymalizator mógł stwierdzić,...
Czy zmienna kierunek jest globalna i volatile? Już po pierwszym przerwaniu powinna przyjąć wartość 1 lub 2, a nie być cały czas 0. Czy zaobserwowałeś zwiększanie wartości zmiennej enkoderA ?
Najprościej wysłać na końcu ramki kod oznaczający "koniec nadawania". Ale też naj zawodniej - musisz dbać by w środku ramki danych przypadkiem nie pojawiła się taka sama sekwencja. Wzorując się na modbusie i podobnych proponuję tak zmontować ramkę by w jednym z pierwszych bajtów była zapisana długość ramki lub długość pola danych jeśli jest zmienna...
bo jest volatile a przecież ta funkcja ma związek z przerwaniami więc zmienna, która się podaje jako argument powinna być volatile. Nie musi. Nie wiem, dlaczego nie chcesz po prostu zrobic jak Ci napisałem. Masz gotowe dwa handlery. Dodatkowym plusem jest to, że będzie działać dwukierunkowo.
Witam, Podpinam się do tematu ponieważ mam problem i za bardzo nie wiem jak sobie z tym poradzić. Posiadam JTAG-a ARM-USB-TINY firmy Olimex i chce sie polaczyc z płytką STM32Butterfly. Mam zainstalowane oprogramowanie Openocd 0.2.0(zmienna path jest dobrze ustawiona) i wiem, że mam problemy ze sterownikami. Dostarczone wraz z JTAG-iem oprogramowanie...
Pomysł wydaje się być dobry ale niestety po odejmowaniu zmienna przyjmuje wartość zero zamiast wartości po przecinku.
Witam Chciałbym zacząć programować mikrokontrolery. Kupiłem sobie płytkę z STM32, ale używając fragmentów kodu do nauki w C, niekiedy widzę: [syntax=c]static void funkcja (int zmienna)[/syntax] Po co stosuję się ten "static" przed funkcją? Pozdrawiam.
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....
No ale to o tym nie świadczy. Świadczy tylko o tym że kod włączenia diody wykonał się po 5-ciu sekundach. Czyli że Timer liczył 2 razy szybciej niż myślałeś. A nie że zmienna doliczyła do 5 zamiast 10.
Albo stos, albo watchdog.
[syntax=C] unsigned int ADRES=0x.......; unsigned int zmienna; *((volatile unsigned int*)ADRES)=zmienna; //zapis pod "ADRES" zmienna=*((volatile unsigned int*)ADRES); //odczyd spot "ADRES" [/syntax]
Witam! Chciałem sobie zrobić prosty Counter zliczający ilość wciśnięć przycisku podpiętego do wejścia PA0. Skorzystałem z przykładu który zamieszczam poniżej. Niestety mój prosty Counter nie zlicza naciśnięć i zmienna cnt cały czas wynosi 0. Mam takie podejrzenie że przycisk nie jest programowo połączony z TIM2 tzn w funkcja TIM_TIxExternalClockConfig(TIM2,...
To jest pętla jeszcze z przykładu Freddego, i ona tam nic w sumie specjalnego nie robi. A tak nawiasem to działa ale nie z nią mam problem. Problem jest z nie wchodzeniem do while (temp <= 900 && temp >=1) bo nie jest odczytywany albo źle jest odczytywany pwm . W pętli while(1) działa prawidłowo. Zmienna throtle przyjmuje rzeczywistą wartość...
bez apelacyjne operator extern powinno się tam znaleźć. To zleży jak przebiega proces kompilacji. Jeżeli kompilujemy wszystkie pliki na raz to w sumie ta dyrektywa o której wspominasz działa tak jak oczekujesz i rzeczywiście zmienna jest zadeklarowana tylko raz. Natomiast jak kompilujemy każdy plik źródłowy osobno do postaci pośredniej i później linkujemy...
W kwestii formalnej - takie cóś z atrybutem const nazwy się stałą, a nie zmienną. Zmienna, jak sam nazwa wskazuje, daje się zmieniać, a stała - nie.
Oczywiście chciałem pisać w C, ale nikt nie potrafi mi powiedzieć dlaczego dla jednego wygląda to tak gpio.GPIO_Mode = GPIO_Mode_Out_PP; A dla drugiegotak: gpio.GPIO_OType = GPIO_OType_PP; gpio.GPIO_Mode = GPIO_Mode_OUT; (at)stmx napisał, że to udogodnienie, ale całym problem jest w tym, że to nie działa zamiennie, chociaż teoretycznie robi to samo....
Witam. Moje pytanie jest następujące. Napisałem prosty program który ma za zadanie zmieniać stan wyjścia za każdym razem na przeciwny. Wszystko było by w porządku gdyby nie czas , a mianowicie. Moje obliczenia : 36Mhz(Timer2) / 36000(Prescaler) = 1ms. * 10000(ARR) = 10s i w takim czasie powinien zmienić się stan Leda. W praktyce jednak dzieje się to...
Prawie, tylko po wypełnieniu struktury konfiguracją dla wyjścia musisz wywołać funkcję GPIO_Init, czyli powinno być tak: [syntax=c] GPIO_InitTypeDef GPIO_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIO... ENABLE); // włącz zegar dla GPIOA GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; //definicja pinów wyjciowych GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;...
[syntax=arduino] void loop() { // ------------------- jeszcze na LCD ... //-------------------- jeszcze 8 pomia... //-------------------- jakaś pamięc do... switch (key) ... } [/syntax] To Ci działa? Bo on chyba nie bardzo wie co to "key". Nie widzę ani deklaracji, ani żeby się cośtam wpisywało....
Wolałbym zapis: Dobry wniosek (tak sądzę). Skąd kompilator ma wiedzieć jaką wartość ma zmienna i ?
Witam. Na początku się przywitam, gdyż jest to mój pierwszy post tutaj. Więc witam Was :) Aktualnie piszę oprogramowanie na płytkę PCB z mikrokontrolerem STM32F103RBT6 - docelowo układ pomiarowy. Wszystko działa: ADC, DMA, USART, NVIC, SPI... No właśnie z tym ostatnim jest problem. Jaki? Korzystam dokładnie z SPI2 i trybu "receive only". Wszystko działa...
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...
reaguje na oba zbocza, przerwanie wykonuje się kilka razy Może jednak sygnał z tego czujnika, a ściśle napięcie na pinie nie jest czyste jak sobie zakładasz, szczególnie jeśli idzie jakimś dłuższym kablem. Możliwe są odbicia, oscylacje itp. . 411 jest przecież bardzo szybki i już jakieś oscylacje z okresem ułamków mikrosekundy mogą grać rolę. Impedancyjnie...
Ja to bym zapisał ewentualnie tak: commandTW w wyniku wyżej opisanych operacji, zostanie promowana z typu uint8_t do uint16_t i przesunięta do starszej części zmiennej command .
Witam, Kiedyś miałem bardzo podobny objaw i okazało się, że jedna zmienna nie była zainicjalizowana, w związku z czym przyjmowała losowe wartości, ktore zmieniały się w zależności od położenia zmiennej w pamięci mikrokontrolera - na skutek dopisywania dalszych częsci programu to miejsce zmieniało się. I raz program działał dobrze, a raz szedł w maliny...
Witam Podczas pisania programu w środowisku Keil uVision wersja: https://obrazki.elektroda.pl/1911131600_... środowisko wyświetla mi następujące błędy: https://obrazki.elektroda.pl/9936295300_... Ustawienia kompilatora: https://obrazki.elektroda.pl/8253960400_... Co ciekawe kod kompiluje się poprawnie,...
Ja bym zwrócił uwagę na: typedef struct fb { char start : 8; char type : 8; ... i zmieniłbym na typedef struct fb { char start; char type; ... tak jak jest to w strukturze: typedef struct { char start; char type; uint8_t konfiguracja[4]; char Conf_End[2]; }Conf_Frame_Array; wtedy początki semantycznie będą...
.bkp_mem (NOLOAD) : { *( .bkp_mem .bkp_mem.*) } > bkp_ram volatile int16_t Zmienna_BKP_SRAM __attr... .bkp_ram "))); Wystarczyło w pliku .dmp albo .map zobaczyć adres tej zmiennej i wszystko byłoby jasne. W ostateczności w pliku .lss też można dojść do adresu.
Faktycznie, nie zauważyłem tego. Przy kompilacji czegoś takiego: [syntax=c] float zmienna; ... zmienna = zmienna + 1.5; [/syntax] Kompilator zamieni zmienną na double, doda liczbę double o wartości "1.5" i całość przerobi z powrotem na floata. Pomaga dodanie litery "f" na końcu liczby: [syntax=c] float zmienna; ... zmienna = zmienna + 1.5f; [/syntax]...
Jeśli jest to zmienna 1-bajtowa to rzutowanie nie ma znaczenia. Przy okazji masz odpowiedź na pytanie czy ten kod jest "dobry" (; 4\/3!!
Nie bez powodu, takie rozwiązanie znalazłem w kursie STM32 na forbocie, pomyślałem, że może tak zostać. Zrobiłem tak: GPIO_StructInit(&gpio); gpio.GPIO_Pin = GPIO_Pin_5| GPIO_Pin_6 | GPIO_Pin_7; gpio.GPIO_Mode = GPIO_Mode_AF_PP; gpio.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &gpio); Sprawdzałem w debuggerze i jak wstrzymałem program,...
Cześć, Chciałbym Was podpytać o najlepsze rozwiązanie. Sterownik na stm32 otrzymuje co kilkadziesiąt godzin czas do aktualizacji RTC w formie unixowej jako zmienna 32bit. Wykorzystywana jest ona następnie do przesyłania do innych urządzeń również jako zmienna 32bit. Pytanie - czy za każdym razem muszę robić konwersję 32bit na BCD do RTC i na odwrót,...
"Wtedy program zacina się w momencie kiedy wpisuje do rejestru gotową zmienna konfigurującą pętle PLL (RCC->CFGR = tmpreg;):" Sprawdź i wrzuć tu może wartość tego rejestru w tym momencie.
Po co ci ta sekcja krytyczna w EXTI9_5_IRQHandler ? Czy jeszcze jakies przerwanie korzysta ze zmiennych ktore chcesz chronic ? Jesli jest faktycznie potrzebna )w co watpie) to obliczaj pierwiastek poza nia, skopiuj wynik do zmiennej lokalnej i dopiero w sekcji krytycznej przekopiuj zmienna lokalna do globalnej. Nieliniowe funkcje biblioteczne potrafia...
Dzień dobry Koledzy. Piszę kod w C#.NETMF dla STM32F429I-DISC1. Próbuję zrealizować takie działanie w którym wykorzystuję metody klasy UIElement. Jedna z metod obsługuje zdarzenie dotknięcia panelu dotykowego. Druga z metod ("Invalidate();") pozwala aktualizować treść wyświetlacza. Do tego mam timer który co sekundę generuje przerwanie inkrementujące...
Powodem może być niepoprawna konfiguracja rejestrów sterownika. poza tym nie pokazałeś jak wygląda funkcja zapisu do ramu i ustawienia kursora. Ja używam takich funkcji: [syntax=c] typedef struct { vu16 REG; vu16 RAM; }LCD_TypeDef; #define LCD_BASE (0x6c000000) #define LCD (( LCD_TypeDef *) LCD_BASE) void LCD_WrReg(u8 reg, u16 data) { LCD->REG =...
Natomiast STM nie lubi działać na zmiennych typu char. Dla STM32 nie ma znaczenia czy zmienna ma 8-, 16- czy 32-bity... 8MHz dla RCC_SYSCLK_Div2 i RCC_PLLMul_2 pozostałe parametry bez zmian Możesz zdradzić nam powód, który każe Ci ustawiać dzielnik dla najszybszej i najważniejszej magistrali w tym układzie na jakąkolwiek inną wartość niż 1? Nie dziw...
Kolego Smashing, pominąłeś największy problem tego typu zagadnienia, czyli zgodność adresów w obu fragmentach kodu. Ładowany kod zapewne będzie się odwoływał do innych funkcji lub zmiennych globalnych etc. Funkcje która uruchamiam jest zawsze ładowana do wolnego ramu to można zrobić. Funkcje taka taktuję zawsze tak ze co coś jej daje a ona coś ma zrobić,...
Cortex nie potrzebuje __attribute__ ((interrupt)); przy deklaracji procedur obsługi wyjątków! W Twojej procedurze zmienna stan zawsze będzie miała wartość 0, bo jest za krótka na to, aby zmieścił się w niej testowany bit.
#include <stdint.h> #include "itoa.h" #include "inc/LPC214x.h" #include "armint.h" #include "config.h" #include "hdr/hdr_scb.h" #include "hdr/hdr_mam.h" #include "system.h" #include "czekaj.h" #include "hd44780.h" /* +=======================================...
unsigned int *ple=(unsigned int*)&ulamek; wszystko jest ok, bo to mówi mniej więcej tyle, co "postaw wskaźnik na unsigned int na adresie zmiennej ulamek". Jeśli tylko zadeklarowałeś 'ple' nie definiując go, to musisz zmienić wskaźnik (czyli samo ple), a nie to co pod nim jest (czyli *ple), i ten wskaźnik postawić na adresie zmiennej ułamek (czyli &ulamek)....
Witam, modyfikuję bibliotekę pod klawiaturę matrycową 4x4. W funkcji "Keypad4x4_ChangeColomn" dla określonego warunku należy zmieniać ustawienia pinów z PushPull na Oped Drain. Wszystko funkcjonuje dobrze : dla pierwszego warunku "if(colNum_0_to_3==0)" bity w rejestrze zostają ustawione poprawnie, jednak dla kolejnych warunków pozostają one bez zmian,...
Ok, problem rozwiązałem poprzez zapis do flasha, na pierwszy rzut oka, działa dokładnie tak jak chciałem, ale może jest coś o czym nie wiem - nieporządane efekty czy cos. [syntax=cpp] const uint16_t CFlashSignature::SIGNATURE = 0xFFFF; bool CFlashSignature::isFristRun() { return *(uint16_t*)&SIGNATURE; } FLASH_Status CFlashSignature::setSignature()...
ze zmęczenia nie dopatrzyłem się że zrobiłem tylko definicję preprocesora bez deklaracji ;) Ale tym niczego nie zdefiniowałeś tylko powiedziałeś aby preprocesor zastąpił slowo "UART_BUFOR" słowem "32" tekstowo. Jak w pliku .c zrobiłeś volatile char UART_BUFOR[UART_BUFOR_rozmiar]; to zastanów się co się z tym stanie i czy da się to skompilować. Jeżeli...
Tak wiem, że nie muszę przywracać zabezpieczenia, tylko spróbowałem ale się nie udało :). Rzutujesz wskaźnik na int16_t, a zmienna uparcie jest "short int" - po co? Bo tylko tak działa! Nie wiem jak inaczej mogę to zrobić ?
W sumie to mam pytanie czy dobrze rozumiem jak to ma działać. Tak skonfigurowany DMA wykonuje transfer raz, w momencie ustawienia bitu ENABLE. Kod z moimi komentarzami (wypisane z DSa). [syntax=c] void DMA_Conf(void) { RCC->AHBENR = RCC_AHBENR_DMA1EN; /* Procedura konfiguracji kanałów DMA 1. Ustawić adres rejestru peryferiów w rejestrze DMA_CPARx Dane...
Gdyż czyszczenie flag wymaga odczytu obu rejestrów. Cała trudność w I2C w STMach wynika z 2 powodów. 1. faktu ze jest buforowane, trzeba w odpowiednim momencie ustawić żądanie stop lub nack, oraz pewne zdarzenia muszą zostać wyjątkowo szybko zrealizowane. 2. Czyszczenie flag... AD2. w bibliotekach używana jest funkcja która z obu rejestrów tworzy jedna...
Podobają mi się te rzeczy o których czytam tutaj (; Do tej pory myślałem że DMA raczej nie ma sensu przy odbiorze danych których długość jest nieznana/zmienna, a tu proszę... Wychodzi na to, że przy zastosowaniu standardowych mechanizmów RTOSa (programowe timery) + ewentualne przerwanie od IDLE można mieć samo odbieranie "gratis". 4\/3!!
Ten adres nie jest prawidłowy w STM32. Flash zaczyna się od 0x8000000 Flash jest widoczny zarówno od 0 jak i od 0x8000000. W "dolnym" zakresie może być widoczne coś innego - np. RAM - zależnie od konfiguracji pinów BOOTx. To samo dotyczy nie zainicjalizowanego statica w funkcji. Niezainicjalizowana zmienna statyczna ma zawsze wartość 0. ZAWSZE. Jeśli...
Witam ! Tak mam zainicjowaną unię w pliku plik1.h typedef union _MMCstate { struct { BYTE isSDMMC : 1; // Set if it is a SDMMC BYTE isWP : 1; // Set if it is write protected }; BYTE _byte; } MMCSTATE; A tak jej próbuje użyć w pliku plik2.c: #include "plik1.h" static CETYPE DiskMount( DISK *dsk, BYTE *b, MMCSTATE...
Dzień dobry, Napisałem sobie program (korzystam z: STM32CubeMX oraz Atolli TrueStudio, mam BluePill STM32F103C8, port szeregowy podłączony za pomocą UART2 oraz konwertera FT232RL (ustawionego na 3,3V - bo w dokumentacji wyczytałem że te wejścia nie tolerują 5V) do portu USB, gdzie łączę się za pomocą BrayTerminal). Na BluePill mam wbudowaną jedną diodę,...
1. Jak wklejasz jakąś (szczególnie nie swoja) funkcję to dodawaj też komentarze autora w tym przypadku: /** * (at)brief This function is the implementation for tcp_recv LwIP callback * (at)param arg: pointer on a argument for the tcp_pcb connection * (at)param tpcb: pointer on the tcp_pcb connection * (at)param pbuf: pointer on the received pbuf * (at)param...
Korzystam z GuiBuildera i emWin na STM32F429i DISC1. Chciałbym automatycznie odświeżać napis (zmienna array) na polu TEXT. Tekst odświeża się po kliknięciu przycisku ale już automatycznie nie wiem jak zrobić. Kod z obsługą zdarzeń od kliknięcia itd. [syntax=c]/*****************************... * * * SEGGER Microcontroller...
Witam. Pozdrawiam szanownych forumowiczów! Potrzebuję odebrać przez moduł btm222 do procesora konkretne dane. Dane zapisane są do pliku w postaci ciągu cyfr np. 345675534999888432 ( tu może być ich więcej ale będzie to wielokrotność. 3*6*X ). Teraz wysyłam ten plik programem realterm. Nie umiem ich odebrać uP w pożądany sposób: Aby rozdzielił te dane...
Mnóstwo instrukcji assemblera nie może być wykonanych w jednym cyklu zegara... w sumie wszystkie wykonywane są w tej samej liczbie i zależy ona od PIPELINE'u... pobranie instrukcji, dekodowanie, wykonanie, zapis do pamieci, akumulacja wyniku. To jest taki najprostszy pipeline i umożliwia on właśnie wykonywanie instrukcji w "jednym" cyklu zegara.......
Mam STM32F4 DISC1 (z programem napisanym w C#.NETMF), który odbiera dane z aplikacji Windowsa (napisanej w C#.NET). Aplikacja wysyła zadany przebieg czasowy a STM32 go odczytuje i zapisuje w tablicy. Następnie zgodnie z zadanym przebiegiem czasowym ma sterować procesem. STM32 jest widziany jako wirtualny port COM. Prędkość transmisji - próbowałem 9600...
Masz przebieg sinusoidalnie zmienny przesunięty względem masy na połowę napięcia zasilania ?
Witam Kolegów Przy okazji problemu z jakim borykam się [url=http://www.elektroda.pl/rtvforum/vi... udało mi się poprawnie uruchomić na procesorze STM32F107 system freeRTOS. Jestem mega pozytywnie zaskoczony tym, że całość systemu udało mi się poprawnie odpalić w Eclipse w zaledwie 4 godziny. Do tej pory uważałem, że...
Dodam tylko że użycie metody którą opisałem nie wymaga zmieniania tablicy w locie jak to zrobił Marek_Skalski . U mnie kod z przerwania wygląda tak: [syntax=c] Angle2 += Angle2_Step; Angle2_2 = Angle2 >> 6; U = (sinus_3har[(Angle2_2 + 0) & 0x03FF] * Vm * 2816) >> 20; V = (sinus_3har[(Angle2_2 + 341) & 0x03FF] * Vm * 2816) >>...
1. Przyjmij że kompilator działa jak należy i przekazuje parametry do funkcji poprawnie. Gdzie pokaż jeszcze wywołanie funkcji. Optymalizacja -O0 nie zawsze Ci pokaże wszystkie zmienne lokalne. Przy debugwaniu w takiej sytuacji lepiej -Og. Ale wtedy różnica w szybkości prgramu może być 2-3 krotna. Wywołanie: static uint8_t str[12]; float32_t...
Witam Próbuję utworzyć plik txt na karcie sd korzystając z biblioteki FatFs zaimplementowanej na moim procku STM32F3 discovery. Niestety nie udaje mi się stworzyć takiego pliku, karta jest pusta a zmienna fresult wynosi 9 czyli FR_INVALID_OBJECT. W związku z tym wszystkim mam pare pytań odnośnie współpracy STM32 z kartą microSD. 1. Jak należy przygotować...
Problem to jest taki, że keil nie spełnia standardów języka C dotyczących kilku całkiem istotnych spraw. Jeśli kod o którym mówisz jest tym samym o którym myślę (nie chce mi się ściągać 14MB, bo pewnie wrzuciłeś tam pliki bin, elf i nie wiadomo jakie jeszcze zupełnie nie potrzebne do niczego) to w kodzie Keila jest mnóstwo operacji typu: Według mnie...
Zmienna przy debugowaniu się aktualizuje po zapauzowaniu (chyba) programu. Przy jtagu wiem że mam na bieżąco. Algorytm wgrywania jest w opcjach projektu, wybierasz debug, wybierasz debuger (st-link) i opcje. Następnie przechodzisz do zakładki flash download. Ale właśnie doczytałem że już debugujesz/wgrywasz więc mój post wcześniejszy jest nieważny....
Ostatnio często korzystam z FatFS ale na procku 2148 (pisze w C++ w Eclipse). Myśle że prawie na 100% powinna ta funkcja wygladać tak: f_write(&file,tmp,sizeof(tmp)... poza tym zmienna "x" chyba powinna być typu unsigned int; przynajmniej u mnie tak to wyglada i zawsze jest oki
5 funkcji potencjalnie zwracających błąd, a Ty nie sprawdzasz ani jednego. Przy okazji ciekawe czemu ignorujesz warning który kompilator na 100% daje Ci przy wywołaniu `f_write(&ff, zmienna1, bytes, &zmienna2);` - ten o niezgodności typów wskaźnika.
Dlaczego nie użyłeś po prostu typu int? int i long mają na Cortexach po 32 bity. Chciałem mieć pewność że zmienna będzie "długa" bez zagrożenia, że znów się przepełni. :idea: można dołączyć nagłówek <stdint.h> i użyć typu int32_t albo uint32_t. Świetny pomysł! :D Zwłaszcza, że w tych deklaracjach widać długość zmiennych, chociaż tutaj takie małe...
Ja kiedyś na AVRku zrobiłem bufor kołowy zapis do końca bufora a potem od zera. Jeden wskaźnik na zapis do bufora (wyzwalanie pomiaru z timera), jeden wskaźnik na odczyt (w wolnej chwili procesora) zapis inkrementował jedną zmienną a odczyt wysłanie RSem dekrementował (jak zmienna za wysoko urosła to przepełnienie bufora (usart się nie wyrabiał ) Ograniczenie...
bo jak zrobię wskaźnik uint8_t to mi obetnie dane, a jak zrobię wskaźnik uint16_t to mi go funkcja nie przyjmie. Przyjmie, ale kompilator da Ci ostrzeżenie w stylu: warning: passing argument xx of 'blaaarg' from incompatible pointer type Tym niemniej: [syntax=C](uint8_t*)&zmienna16Bit[/synta...
Też nie aż tak 'znacznie'. - dsPIC marnuje mniej czasu na wejście w ISR i na wyjście z niego, więc STM32 nadrabia zegarem i wychodzi podobnie. - W dsPICu instrukcja MAC wykonuje się w jednym cyklu, w STM32 w trzech (chyba). - dsPIC ma podzieloną pamięć na X i Y, z dodatkiem, że pewne przestrzenie adresów są dwuportowe i DMA nie kradnie cykli rdzenia...
Dzień dobry, Dopiero zaczynam swoją przygodę z uC, mniej więcej ogarniam język C i stanęło przede mną zadanie napisania kodu sterownika do diod WS2812B. Wiem, że na temat tych diod było już sporo wątków na forum, więc będę się streszczał. Sercem sterownika ma być docelowo mikrokontroler z serii STM32F0 lub STM32F4, w zależności od tego jak dużo będę...
Jakieś wskazówki...? Przyznam że to ciężki temat akurat w GCC. Sugeruję może mało eleganckie rozwiązanie, ale u mnie działa (System Workbench for STM32) i to bez "kosztów ubocznych". Najpierw ta zmienna, przykładowo: [syntax=c]volatile const char __attribute__((section (".mySection"))) Version[] = "Version 2.1.1 "\ " Date: " __DATE__ " Time (UTC):...
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...
Witam kolegów po fachu. Od 3 dni walczę z problemem. Tłumaczę o co chodzi. Staram się odczytać za pomocą stm32f103 szerokość impulsów PWM pochodzących z 4 kanałów odbiornika RC. Skonfigurowałem 4 przerwania zewnętrzne EXTI, na 4 kanałach , wyzwalane zboczem opadające i rosnące. Ustawiony jest również TIMER4 z przerwaniem od przepełnienia który liczy...
stm32 zmienna globalna stm32 zmienna globalny stm32 zmienna pamięć
alpine kostka radio samochodowy wymiana zawieszenie corsa
żarówka szeregowo początkujący elektronicy
Dawka startowa pelletu przy rozpalaniu pieca: ile? Jak naciągnąć pasek alternatora Citroen C5 1.6 HDI?