No, z przerwaniami to już masz program wykonujący wiele zadań jednocześnie - nie wiadomo, w którym momencie w gpsread starą jego wartość do 128 - a więc w następnym przerwaniu możesz wpisać do gpsread[128] - poza zakresem? A lepiej pisać if (++wpp >= sizeof gpsread) wpp = 0; - jak potem zmienisz rozmiar gpsread, to nadal będzie dobrze.
Witam Mam pewien problem - obstawiam że banalny ale nie mogę znaleść rozwiązania od 2 dni ;-( Otóż mam czujnika MEMS z którego zbieram dane (najlepiej ok 256 pomiarów z jednej osi) i chcę je wgrać na kartę SD. Niestety coś jest nie tak bo nie działa to dobrze. tzn działa gdy danych jest mało np: MEMS1_to_SDCard (50) oraz char tText_x[500]; natomiast...
Przy okazji walki z "magicznymi cyframi" - zapewne korciło Cię (może nawet tak zrobiłeś) żeby do funkcji podać rozmiar "4", natomiast o wiele lepszym rozwiązaniem jest napisać "sizeof (nazwa_twojej_zmiennej)". 4\/3!!
A nie prościej jak człowiek rozmiar przekazać jako argument, którym mógłby być sizeof?
(at)dziechu poczytaj co robi operator sizeof zamiast grzebać w rejestrach Ale przecież po inicjalizacji natępuje prawidłowe jednokrotne kopiowanie wg. sizeof.
[syntax=c]void MIDImessage(byte command, byte data1, byte data2) { uint8_t data[3]; data[0] = command; data[1] = data1; data[2] = data2; HAL_UART_Transmit_IT(&huart2, data, sizeof(data)); }[/syntax] Pamiętaj transmisja jest wykonywana w tle.
[syntax=c] int i; int suma_af = 0; const unsigned char * p = (const unsigned char *)&data for (i = 0; i < sizeof(my_type)l i++) { suma_af += p[i]; } [/syntax] Zakładam, że struktura jest upakowna ;)
Moze popatrz na to tak: Edit: lepszy sposob liczenia sz [syntax=c] const uint32_t *p = (const uint32_t *)data; const size_t sz = (ileśtam + 3) / 4; arrr = 0; for (i = 0; i < sz; i++) { BOOT_Save_32B((BASE_ADDRESS+ addr), p[i])); addr+= sizeof(uint32_t); } [/syntax] Zapisuje sie naraz 4 bajty.
tprs->child = (struct TPARSER**)malloc (sizeof(TPARSER)); //dynamiczna allokacja pamieci To jest chyba źle, alokujesz rozmiar pamięci o wymiarach sizeof(TPARSER) a potem pod te wskaźniki dajesz znów malloc, nie powinno być coś w stylu?: tprs->child = (struct TPARSER**)malloc (sizeof(TPARSER*)*ElementsOfTab);
W moim przypadku to wygląda tak, że mam wypracowaną własną warstwę abstrakcji sprzętu. Przykładowo do SPI jest maszyna stanów co mieli strumień bajtów danych + nagłówek z kolejek (typu FIFO jako bufor cykliczny). Pod to callbacki do sprzętu (open, write, read, close, ioctl), i rybka czy w środku jest if (queue) wyslij czy na przerwaniach. Nagłówek zawiera...
Witam, Kolego atom1477 z ciekawości uruchomiłem Twój projekt, z tym że zmodyfikowałem tak main-a, że najpierw wypełniam ALGO_TAB jakimiś tam danymi, a później jednorazowo kasuję sektor i te dane zapisuję do FLASH-a i u mnie działa zawsze ok, niezależnie od poziomu optymalizacji. Nie chciało mi się już robić jakiegoś porównywania danych, to co zapisuję...
Zastanów się dobrze czego rozmiar tak naprawdę podajesz. [syntax=c]DMA2_Channel1->CNDTR = sizeof(dst_buf); //Buffor size :[/syntax]
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...
Tak, to wiem, ale funkcja będzie pobierać dane wg swojej deklaracji czy wg deklaracji tablicy? Według swojej deklaracji. Jeżeli przekażesz do funkcji tablice: [syntax=c] uint8_t tab[] = {0x14, 0x2A, 0x56, 0xDF}; [/syntax] to w funkcji odczytasz przez wskaźnik na zmienna 16 bitowa (zakładając ze procek jest little endian): [syntax=c] font[0] - 0x2A14;...
Wielkie dzięki za projekt. Trochę czasu mi zajęło zanim się za niego zabrałem - pełno projektów na uczelni. Wielkie dzięki jeszcze raz! Przystosowałem projekt do swoich wcześniejszych wypocin ale dostaje dziwne błędy: uip\fs.o:(.rodata.file_404_html+0x0): multiple definition of `file_404_html' uip\fsdata.o:(.rodata.file_404_html+0x0)... first defined...
Czasem Arduino do czegoś się przyda Dodano po 2 Możesz dać przykład takiej krytycznej czasowo operacji? Problem jest a raczej był związany z buforem nadawczym uarta. Mam funkcję: Blokuj tylko przerwania od UART.
Niestety dalej hard fault. Na tej funkcji na pierwszym LWIP_DEBUGF. Hard fault występuje na drugim wywołaniu tej funkcji. [syntax=c]struct pbuf * pbuf_alloc(pbuf_layer layer, u16_t length, pbuf_type type) { struct pbuf *p, *q, *r; u16_t offset; s32_t rem_len; /* remaining length */ LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc(length=%"U16_F")\n",...
Po co ten cały dziwny kod w callbackach. Przesuwanie bitowe w prawo liczby ze znakiem jest niesprecyzowane przez C (implementation definded behaviour) a Ty po prostu chesz skopiować dane z jednej tablicy do drugiej. Uzyj memcpy memcpy(txBuf, rxBuf, 4 * sizeof(*txBuf)); /* i */ memcpy(txBuf + 4, rxBuf + 4, 4 * sizeof(*txBuf));...
Poprawiłem adres na 0x20 i próbuje użyć funkcji HAL_I2C_Mem_Write() i HAL_I2C_Mem_Read(), aby sprawdzić czy dobrze przesyłam dane, ale podczas debugowania wyświetla się problem, który staram się naprawić. https://obrazki.elektroda.pl/8895164800_... Jako test chciałem napisać to w taki sposób: uint8_t test = 0x11; // 0b00010001 HAL_I2C_Mem_Write(&hi2c1,...
Freddie ja się w całości z tobą zgadzam. Jednak prostu uart i2c coś prościutkiego gdzie jednak pokazane jest ze to C++ a nie C napisany z C++. Od dłuższego czasu wspierasz C++ z czym się zgadzam ale dla większości ludzi uwierzyć znaczy zobaczyć........... Trzeba by to przemyśleć (razem z aktualizacją przykładów), tylko ten brak czasu... Ehh... Ale...
(at)BlueDraco O to mnie chodzio. Tu dla kolegi przykad jak zrobic - aczkolwiek na f7 bo tylko taki mam podaczony. Ale zasada ta sama (projekt z cube i dlatego taki mix HAL i nie HAL): https://obrazki.elektroda.pl/8200577700_...
Witam I zaczęło się .... Mam taki problem Robię w stm32 tcpClient łączę się z PC [syntax=cpp]conn = netconn_new(NETCONN_TCP); err= netconn_connect(conn, &addr, 11001); for(;;) { ++Dev2PcState.counter; err= netconn_write(conn, &Dev2PcState, sizeof(Dev2PcState), NETCONN_COPY); vTaskDelay(500); }[/syntax] ten licznik zwiększam co 0,5 sekundy. W PC odbieram...
Cześć Od razu nadmienię, że jestem w tym początkujący. Posiadam mikrokontroler STM32F100C4T6B oraz moduł GY-50 L3G4200D. Próbuję nawiązać połączenie za pomocą interfejsu I2C i wyświetlić informację na komputerze kominukując się po UART, który na pewno działa. Jeżeli chodzi o połączenie to jestem na 99% pewny, że jest dobrze. Korzystam z programu STM32CubeMX...
Zmieniłem : 2. change The initial stack pointer in the vector table: (void *)&pulStack[STACK_SIZE-1]... to (void (*)(void))((... long)pulStack + sizeof(pulStack)), w startup_stm32f10x_md_vl.c Dalej to samo. [syntax=c]/** ****************************************...
Zaraz, zaraz. Trzeci krasnoludek to tablica globalna. Pierwszy - GPS nadaje ciągle w f = 1Hz, chyba, że masz na myśli coś innego. A drugi - z tego co zrozumiałem o DMA, to linia DMA_InitStructure.DMA_BufferSize = (uint16_t)sizeof(buf) - 1; powinna załatwić sprawę, tzn. po wysłaniu 99 znaków DMA skończy pracę. Ale nie wiem czy dobrze zrozumiałem DMA,...
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
Parę przykładów DMA na STM32F bez SPL niedawno się tu przewinęło - szukaj. Włącz DMA w rejestrze AHBENR, a potem np. coś takiego: DMA1_Channel2->CMAR = (uint32_t)time; DMA1_Channel2->CPAR = (uint32_t)&USART1->TDR; DMA1_Channel2->CCR = 0;// disable DMA1_Channel2->CNDTR = sizeof(time);// no. of items // increment memory adress, mem->periph, enable DMA1_Channel2->CCR...
No więc reasumując - jeśli element i tablica będą miały taki sam typ, to pomiędzy nimi kompilator na 100% niczego nie umieści. W przeciwnym wypadku może (ale nie musi) być tam "dziura". Dodano po 15 Jak można się wskaźnikiem poruszać wewnątrz struktury po komórkach tablicy ? Jak to napisać ? W sposób "zgodny ze sztuką" nie jest to możliwe. Można za...
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ć...
Optimized CRC-8-CCITT calculation. Zapomnieli tylko dopisać, że "optimized for small size", bo na pewno nie zoptymalizowany pod względem wydajności czy wygody używania. Do generowania kodu liczącego różne CRC polecam po prostu https://pycrc.org/ . Jak ktoś chce kod który jest szybki, to wybiera algorytm "table driven" - tablica o wielkości `sizeof(crc_t)...
Witam, chciałbym zrobić projekt w postaci pianina na mikrokontrolerze. Posiadam kontroler midi Behringer SWING, którego podłączam do mikrokontrolera STM32-Nucleo-F303RE z nakładką midi (MIDI OUT na klawiaturze do MIDI IN na nakładce). Klawiatura midi jest zasilona za pomocą usb z komputera. Chciałbym prosić o pomoc w przesłaniu sygnału midi z klawiatury...
Nie zwróciłem na to uwagi w ogóle :P racja, sizeofem nigdy się nie dowiesz jaki jest rozmiar tablicy. Zawsze musisz to przekazać jako jakiś parametr (albo cokolwiek - define const etc.). Jak nie będzie działało to wkleję Ci moje inicjalizacje i powiesz czy działa (musi :P).
(at)marycyś No to przecież dałem Ci gotową funkcję. Dla Twojej tablicy to prostu wywołaj Dodano po 10 PS. Nie pisz na priv tylko tutaj. Nie wiem co znaczy [syntax=c]A jak zapisać Twoje: writeF(Page_127, Tablica, sizeof(Tablica)); w podobnym stylu jak tu?: *(__IO uint16_t*)(Page_127 + i) = (uint16_t*)&Rozum[0][0]; U mnie Eclipse zgłasza niechęć gdy...
Witam bardzo serdeczenie, pisząc bibliotekę na akcelerometr ADXL345, na mikrokontrolerze STM32F103C8T6 (BluePill), napotkałem problem. Tak jak w temacie chodzi o "UsageFault_Handler" w który to program wskakuje zaraz po obsłudze funkcji "ADXL345_readReg " lub "ADXL345_writeReg " . Właściwie to tyle co udało mi się ustalić jak do tej pory :). Zwykle...
Dzięki Panowie za szybką odpowiedź :) bonczi7 LinkDriver użyłem niestety nic nie dało :( Marek_Skalski - nigdzie nie znalazłem nic na temat uruchamiania LSE do SD, a myślę że o SD przejrzałem cały User Manual od HAL jednak dla pewności uruchomiłem LSE jednak problem pozostał :( załączam zdjęcia po uruchomieniu LSE, Dla pewności użyłem programu od HAL-a...
Witam, Próbuje uruchomić obsługę karty SD pod STM32f103ZET6. Wykorzystuje do tego bibliotekę, używaną wcześniej pod STM32f407. Zmodyfikowałem tylko inicjalizacje SPI i dorzuciłem testową funkcję zapisu do karty. Mimo to karta nie chce ruszyć. Przy próbie otwarcia jakiegokolwiek pliku dostaje: FR_NOT_READY. Próbowałem już na dwóch kartach SD, formatowałem...
Witam, Program jak poniżej w debuggerze zaiwesza się już na lini f_open. W momencie gdy zakomentuje linie z buforem BYTE buffer[256] program rusza i otwiera plik. Również gdy zmniejsze rozmiar tablicy np do 20 to program też przechodzi dalej i fresult zwraca FR_OK. Czym to może być spowodowane ? [syntax=c]#include "stm32f10x.h" #include "stm32f10x_gpio.h"...
No i pojawił mi się następny, gorszy problem (tamten został już rozwiązany). Otóż okazuje się, że w momencie kiedy użyję gdziekolwiek w programie funkcji malloc wynikowy wsad jest kompletnie niepoprawny pomimo iż kompilator nie zgłasza żadnych błędów. Program automatycznie się zawiesza, nie zostaje wykonana nawet choćby jedna linijka z funkcji main()....
Mam na pewno sterownik WinUsb.sys. Poniżej cały skrypt linkera: Dodano po 10 Zapomniałem dodać, że używam zewnętrznego ST-linka dołączonego do płyty Nucleo-f103rb. Mam drugą taką płytkę i gdy teraz ją podłączyłem ale skorzystałem z wbudowanego ST-linka wszystko zaczęło działać prawidłowo. Co w takim razie może być nie tak?
Witam, Mam problem z nawiązaniem komunikacji między dwoma zestawami STM32F103ZET6+nRF24L01. Bazowałem na informacjach z tej strony: "[url=http://maniacbug.github.io/RF24Net... Ściągnąłem odpowiednie pliki z klasami RF24 i RF24Network, oraz klasą SPI(wykorzystywana przez poprzednie klasy), przerobiłem je pod STM32, po czym spróbowałem...
Jak chcesz wysyłać kilka zmiennych o różnych rozmiarach, to zrób strukturę. Ja mam np taką [syntax=c] struct CfgEEiic { uint32_t crc; // crc musi byc pierwszom zmienna w strukturze uint32_t CntWrite; uint32_t CntRst; uint16_t szt; uint32_t total; char txt[16]; }; struct CfgEEiic Cfg; [/syntax] Później wysyłasz tą strukturę przekazując adres i rozmiar...
Oczywiście mój przykład odnosi się do sytuacji prostych. Narzut w zależności od platformy jest mały i może wynosić zaledwie sizeof(void*) bajtów. Oczywiście jest tak jak piszesz, że alokator zazwyczaj zwraca blok co najmniej tak duży jak żądany, ale zwykle większy. Natomiast tkie śledzenie nie bardzo w ogóle ma sens - co z tego, że sprawdziłeś, że masz...
Mam ta samą płytkę. Może pobaw się tak jak ja: wysył przez DMA, odbiór w przerwaniu oto co starczy: [syntax=c]void SYSTEM_DMAConfig() { DMA_InitTypeDef DMA_InitStructure; DMA_DeInit(DMA1_Channel4); DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)(&USART1->DR); DMA_InitStructure.DMA_MemoryBaseAddr = (u32)SYSTEM_USART1BufferTx; DMA_InitStructure.DMA_DIR...
ta płytka ma standardowy program do obsługi i teoretycznie można z niego obsłuztc karte ale ja niewiem jak ją zamontować [syntax=c]/*****************************... (c)*************************************... ** ** http://www.powermcu.com ** **--------------File Info------------------------------------...
Witam W budowanym urządzeniu zapragnąłem wysyłać informacje diagnostyczne przez USART. Nie znalazłem żadnej informacji o kolejce FIFO znanej mi z AVR-ów - szkoda :cry:. Zmuszony zostałem do wykorzystania DMA. Konfigurując DMA musiałem podać rozmiar bloku pamięci do wysłania więc skorzystałem z operatora sizeof() dla struktury: [syntax=c]struct ramka_t...
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...
Witam, Korzystam z płytki HY-RedBull. Wyprowadzenia PB8 i PB9 - standardowe dla serwera CAN w procesorach STM32F103 - podłączone są do transceivera CAN MCP2551. Sprawdzałem działanie serwera CAN w trybie loopback i wszystko działa jak należy. Niestety po przełączeniu w tryb normalny procesor nie wystawia żadnych danych na PB8 i PB9. Poniżej zamieszczam...
WItam, uczę się ze strony Forbota obsługę DMA z ADC. UART z DMA działa mi prawidłowo, ale z ADC nie chce. W przykładzie w kursie Forbota użyty był procesor STM32F4, a ja mam na płytce STM32F1. Więc okna z ustawieniami w Cube się różnią i myślę, że coś źle odznaczyłem. Otóż w Cube ustawiłem tak: https://obrazki.elektroda.pl/5147916400_...
Witam. Chcę skopiować tablicę uin16_t o wymiarach 16x16 elementów do Backup SRAM. [syntax=c] uint16_t wart[16][16]; //tablica uint16_t *BKPSRAMADDR0 = 0x40024000UL;//wskaźnik do początku przestrzeni adresowej BACKUP SRAM uint32_t licz1, licz2, licz3; //zmienne licznikowe void ustaw_BKSRAM(void) { __HAL_RCC_PWR_CLK_ENABLE(); //Power interface clock enable...
Dobra, możecie się już śmiać. :lol: Problemem był nie sam deskryptor a jego długość . Nic dziwnego, że zmiana deskryptora powodowała problem jak i sama długość jego się zmieniała. Wystarczyło policzyć ilość bajtów i wklepać do definicji: CUSTOMHID_SIZ_REPORT_DESC Ale tutaj pojawia się moje pytanie. Czy mogę to jakoś zautomatyzować? Żeby za każdą zmianą...
sizeof struct stm32 sizeof tablica stm32 f103rb
chrysler grand voyager usterka fałszywy płomień schemat hamulca
Odblokowanie przycisków w telewizorze MANTA 1905 bez pilota Elektryczna pompa wody VW T5 – funkcje, objawy awarii, diagnostyka