A nie prościej jak człowiek rozmiar przekazać jako argument, którym mógłby być sizeof?
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!!
(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.
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.
[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 ;)
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);
Zastanów się dobrze czego rozmiar tak naprawdę podajesz. [syntax=c]DMA2_Channel1->CNDTR = sizeof(dst_buf); //Buffor size :[/syntax]
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;...
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,...
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...
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...
[syntax=c]#include <string.h> ... memcpy(¤tFont, Font, sizeof(currentFont));[/syntax] Tak czy siak nie jest to kopiowanie do niczego potrzebne - wystarczy sobie gdzieś zapisać wartość Font (wskaźnik) i tego używać zamiast currentFont.
Witajcie, siedzę i szukam błędu w bibliotekach do obsługi NRF24L01. Skopiowałem je z biblioteki, którą wykorzystuje w ATmega8. Działa nawet dobrze tam, niestety na STM32F0DISCOVERY już nie chce. Będę bardzo wdzięczny za pomoc. To najpierw kody, które wyrażają więcej niż tysiąc słów ;) : main.c http://obrazki.elektroda.pl/4732813300_1...
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",...
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...
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...
w załączniku archiwum z kilkoma ciekawymi plikami dla STM32F0. 1. Cortex-M0.ld oraz STM32F051x8.ld Skrypty linkera - w projekcie używać należy bezpośrednio tylko tego drugiego, który zaś w środku dołącza ten pierwszy. Podział spowodowany jest tym, że "mapa" pamięci generalnie jest wspólna, więc wszystkie takie rzeczy są w tym Cortex-M0.ld, zaś w tym...
Moim zdaniem użycie tutaj TCP jest błędem i powinieneś użyć UDP. Kto o zdrowych zmysłach otwiera połączenie TCP "forever"? P.S. Jakie jest "sizeof(Dev2PcState)" ? Jaka jest długość bufora ramki TCP? Co z retransmisją pakietów niedostarczonych? Tylko że TCP daje mi to że mam potwierdzenia(ack), a UDP nie działa tak że mogę coś zgubić ? Połączenie otwieram...
nie no - sizeof() podaje rozmiar tablicy, ale nie zawsze. Jeśli tablica jest "widoczna" dla tego sizeof'a (czyli np. jest globalna w tym właśnie pliku, lokalna w tej właśnie funkcji), nie jest tylko wskaźnikiem na tablicę itd. to sizeof zwróci rozmiar tablicy w bajtach. [syntax=C]int tablica[] = {0, 1, 2, 3, 4}; extern int tablica_globalna_z_innego_pliku[];...
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));...
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...
Cały czas jednak nie ogarniam tego, dlaczego jeżeli chce pobrać dane z IrQHandler z tablicy gpsread do tablicy RxBuffer w funkcji niżej, to wgl nie moge skopiować danych nawet zwykłym for'em? [syntax=c]void USART1_IRQHandler(void) { //odbiór danych if((USART1->ISR & USART_ISR_RXNE) != RESET) { uint8_t data = USART1->RDR; gpsread[wpp] = data; if(++wpp...
Tak to ja, dołączam kod - main.c: [syntax=c]#include "main.h" #include "fatfs.h" SPI_HandleTypeDef hspi2; TIM_HandleTypeDef htim2; UART_HandleTypeDef huart2; void send_string(char* s) { HAL_UART_Transmit(&huart2, (uint8_t*)s, strlen(s), 1000); } volatile uint16_t Timer1=0; uint8_t sect[512]; //char buffer1[512] ="Selection of VAM is set by the previous...
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
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"...
Hej, Od kilku dni borykam się z dziwnym problemem. Napisałem sobie obsługę UART4 na mikrokontrolerze STM32F103RET6. Wycinek z kodu: https://obrazki.elektroda.pl/7181097200_... Napisałem sobie aplikację w C# (VS Community 2017) do odbioru ramek: (wycinek) https://obrazki.elektroda.pl/4415666900_... dostaję tylko jedną...
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
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,...
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)...
Udalo mi sie napisac dzialajaca bibloteke. Problem byl jedynie z obsluga urzadzenie, jego statusu, configu. Jednak dla mnie to nie byl maly problem i ciesze sie ze w koncu to rozwiazalem. Oto kod i krotki film: https://filmy.elektroda.pl/51_1352475444...
Przy takim przekazywaniu wskaźników, zamiast prostego przyporządkowania [syntax=c]*ptr = 0x12345678;[/syntax] lepiej użyć: [syntax=c]uint32_t stala; stala = 0x12345678; memcpy(ptr, &stala, sizeof(stala));[/syntax] Wtedy na pewno nie będzie Hard Fault. Innym rozwiązaniem (nie zawsze możliwym), jest zadbanie aby przekazywany wskaźnik był wyrównany do...
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...
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...
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ć...
Dobra, to ja się podczepię: odpaliłem w końcu semihosting, natomiast nie bardzo wiem, co zrobić ze skryptem linkera - bo nie do końca łapię pewne rzeczy: /* Linker script to place sections and symbol values. Should be used together * with other linker script that defines memory regions FLASH and RAM. * It references following symbols, which must be...
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()....
Panowie, teraz pewna partia wprowadziła modę na rybę, nie wędkę - popłyńmy na myśli prezesa. Gotowiec: działają tak choćby karty SD, pamięci Flash czy EEPROMy - jak to się wtedy ma do Twojej koncepcji, bo tak się składa, że z punktu widzenia mastera coś musisz jednak nadać żeby cokolwiek odebrać... Nie ten procek, co go autor ma, ale ficzer przydatny,...
Możliwe przyczyny: skrypt linkera, stos itd. "program idzie z RAM-u", a w programie mamy wymuszenie tablicy adresów wyjątków spod adresu 0. Parę innych kwiatków też tam jest, np. żmudne wisywanie do rejetrów ich domyślnej zawartości. No i to mnie rozwaliło: memset(&sys_timer.flaga, NIE, sizeof(sys_timer.flaga)); - ileż się trzeba namęczyć, żeby wyzerować...
(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...
Po inicjalizacji HAL, dodaj sobie: FLASH->ACR |= FLASH_ACR_PRFTBE; Dziękuję za wskazówkę, jak na razie niestety nie spowodowało to przyspieszenia programu, będę próbował dalej. Dokumentu co sie nazywa reference manual. A optymalizowanie to sie zaczyna od algorytmu a nie opcji kompilatora, ktore sa "wisienka na torcie" Mam prośbę - nie pisz takich...
Mam problem z inicjalizacją UARTA. Otóż kod działa na portach PA9,PA10 lub PC4,PC5. Jednak gdy zmieniam na PB6, PB7 komp nie otrzymuje danych wysyłanych przez płytkę. Może źle to robię, ale według specyfikacji to na te porty można wyprowadzić USART1, więc nie wiem o co chodzi, a jeszcze raczkuje w temacie STM32. [syntax=c]#ifndef _USART_C_ #define _USART_C_...
[syntax=c]double* xcorr_table = malloc(Na*Ma*sizeof(double));[/syntax]
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...
Jak zadajesz pytanie to napisz przede wszystkim co to są te Twoje tajemnicze watości, jakiego typu są zmienne etc etc. Jak chcesz wyłuskać połowki uint32_t to możesz: 1. Użyć unii [syntax=c]union { uint32_t u32; uint16_t u16[2]; }ADC_Data32; ADC_Data32.u32 = *AdcDataTable; wynik1 = ADC_Data32.u16[0]; wynik1 = ADC_Data32.u16[1]; [/syntax] albo [syntax=c]wynik1...
Tu masz przykład DMA. Zrobione na szybko. Po przesłaniu dowolnej liczby znaków DMA się wyłącza. [syntax=c]void init_usart( void ) { RCC->APB1ENR |= RCC_APB1ENR_USART2EN; RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; RCC->AHB1ENR |= RCC_AHB1ENR_DMA1EN; gpio_pin_cfg( GPIOA, 2, GPIO_AF7_PP_50MHz_PULL_UP ); gpio_pin_cfg( GPIOA, 3, GPIO_AF7_PP_50MHz_PULL_UP ); USART2->BRR...
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...
kod w C z stm-a (bibliotek). U mnie działa. [syntax=c]//////////////////////////////... // // FUNCTION NAME : // CRC_CalcBlockCRC // // // FUNCTIONAL DESCRIPTION : // Calculate a CRC the same way as the STM32F10x hardware generator. // // // FORMAL INPUT PARAMETERS : // buffer - pointer to series of 32-bit words...
Sam main.c raczej nic nie da ale proszę. /** ****************************************... * File Name : main.c * Description : Main program body ****************************************... * This notice applies to any and all portions of this file * that are not between comment...
Witam, mam problem z komunikacją po 1-Wire, termometr DS18S20 odpowiada mi na sygnał reset jednak nie wysyła danych, odczytuje cały czas z magistrali 0xFF. - Termometr działa na 100% - mam inną płytkę z ATmegą 32 w której go sprawdzam - i tam działa wszystko bez problemowo, Oto kluczowe fragmenty mojego kodu: [syntax=cpp] #define SYS_CLK 8000000 //...
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...
Witam! Eclipse Kepler Sourcery CodeBench Lite 2011.09-69 OpenOCD 0.6.1 STM32F103ZET6 Szablon projektu - Freddie Chopin Do tej pory wszystkie projekty na STM32 działały dobrze jednak teraz buduję większa aplikację i pojawiają się problemy. Objawia się to losową zmianą wartości zmiennych np. zadeklarowanych jako const czy przerwaniem __Default_Handler....
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ą...
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...
Jako początkujący miałem problem, aby poprawnie ustawić np. 5 środkowych bitów w rejestrze. Wrzucam trywialne macra - może komuś się przydadzą: [syntax=c] #define u32 unsigned #ifdef __GNUC__ #defineasm__asm__ #else #defineasmasm #endif [/syntax] podstawowe operacje: [syntax=c] #defineread32( addr ) *( ( u32* )( addr ) ) #definewrite32( addr, val )...
Jesteś pewien, że tego bufora o długości 255 Ci starcza? Spróbuj podwoić i zobaczyć czy długość poprawnego działania nie zwiększy się. Wygląda na to że po podwojeniu bufora program poprawnie działa dłużej. Teraz zwiększyłem go do 1000 elementów i zobaczę ile "wytrzyma". Rozmiar największej z przesyłanych stuktur wynosi 72 (zwrotka z sizeof()). To dlaczego...
Witajcie. Zacząłem jakieś 2 miesiące temu przygodę z ARMami na przykładzie STM32. Moim celem jest przygotowanie samochodowego odtwarzacza mp3 zastępującego zmieniarkę CD. Początek zabawy przeszedł dość gładko i po paru dniach już odtwarzałem muzykę z pendrive'a. Jednak odbywało się to w pętli, więc równoczesna aktualizacja wyświetlacza czy inne czynności...
Witam, w moim projekcie muszę zapisywać informację we wspomnianej pamięci FRAM (link do https://obrazki.elektroda.pl/4945033000_... Za pierwszą część odpowiada polecenie: HAL_I2C_Mem_Write(&i2c, 0xa0, 0x10, 1, (uint8_t*)&test, sizeof(test), HAL_MAX_DELAY); Za drugą część odpowiada polecenie: HAL_I2C_Mem_Read(&i2c, 0xa0, 0x10, 1, (uint8_t*)&result,...
A po co w ogóle chcesz ręcznie wywoływać przerwanie od nadania? Wrzuć po prostu dane do TDR to się samo wywoła w odpowiednim momencie. [syntax=c]volatile unsigned charut0_mst=0, ut0_sta=0, ut0_end=0, ut0_buff[32]; //pomocnicze dla nadajnika/odbiornika rs //bufor kołowy nadajnika void rs_tx(uint8_t data) { TX_1;//led tx //ltx0=2; EnterCritical(); if(!ut0_mst)...
[syntax=c]#include <stdint.h> #include <unistd.h> #include <fcntl.h> #include <stdio.h> #include <string.h> #include <math.h> double M2F(char x) { return 440.0 * pow(2.0, ((double)x - 69.0) / 12.0); } int main(int argc, char *argv[]){ unsigned char midi[256*1024]; int maximum = 0; if(argc<2) { printf("MIDI (Type...
Ok, z niechęcią pokażę jeszcze trochę kodu. Od razu wyjaśniam - ten kod to tylko taka tymczasowa partyzantka celem sprawdzenia i wykrycia takich sytuacji jak ta powyższa. Docelowo to będzie zupełnie inaczej zorganizowane. Dane są zbierane do RAMu przy pomocy DMA do podstawy 5-5ms/kratkę. Powyżej już są wyświetlane na bieżąco. Niemniej w obu przypadkach...
W cpp podany kod jest bardzo prosty do napisania (możemy się pozbyć sprawdzania nulli co rusz). Ja jeszcze jestem zwolennikiem niepisania komentarzy :P Wersja bez goto4 i bez udziwnień. Moim zdaniem czytelniejsza. Ale nie chcę nikogo przekonywać, bo i tak mi się to nie uda :) [syntax=c] // open_control() -- [C] // Open a file and assign it a control...
Czy znane są wam inne skuteczne algorytmy pomiaru amplitudy PWM? Pracuje na STM32F072CB i tylko taki mam do dyspozycji wedle założeń projektu więc przesiadką choćby na F1 nie wchodzi w grę... Do tego celu jest więcej niż wystarczający. Metoda pomiaru jest dobra. Dodatkowe pytania: 1. Czy oglądałeś ten przebieg na oscyloskopie? Może po prostu nie jest...
Usiłuje uruchomi DMA tak aby zgłaszało mi przerwanie (na początku może by po zakończeniu transferu) Timer wyzwalający mam już skonfigurowany [syntax=c] TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; /* USER CODE BEGIN TIM1_Init 1 */ /* USER CODE END TIM1_Init 1 */ htim1.Instance = TIM1; htim1.Init.Prescaler...
Nie wiem - tyle ze uznali ze poniewaz mogą to nie należy nic const - antować. No właśnie - mądrość tej decyzji jest adekwatna do mądrości twórców tego tworu. Dzięki temu, np. takie wywołanie w zasadzie ma "undefined behavior" (a w C++ daje błąd kompilacji, już nawet pomijam to że muszę rzutować z char na uint8_t): HAL_USART_Transmit(handle, "Hello...
Mam problem z odpaleniem komunikacji (master nadaje) na przerwaniach w STM32F103. W poolingu działa OK, natomiast na przerwaniach nie chce ruszyć, już kombinowałem na różne sposoby i bez efektu. Inicjalizacja I2C: [syntax=c]void I2C_Init(void) { // I2C GPIO CONFIG RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; // Software reset I2C I2C1->CR1 |= I2C_CR1_SWRST;...
(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, od kilku dni walczę z pobieraniem adresu po DHCP. udało się komuś uruchomić to ? Podglądając transmisję widzę że leci: DHCP Discover DHCP Offer i na tym koniec :( oto kod: int main(void) { static struct pt s; struct uip_eth_addr mac = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06}; uip_ipaddr_t ipaddr; struct timer periodic_timer,...
1) Za czekający na flagę while() w przerwaniu grozi ci publiczny lincz i ukamienowanie 2) ten ISR moze i nic nie gubi ale nigdzie nie masz flagi 'odebrałem_paczke_i_czekam_na_jej_obslug... Pewnie dlatego cos ci sie gubi gdzies glebiej w kodzie. Powinienes miec conajmniej podwójne buforowanie, o ile nie zupelnie oddzielne FIFO. Najlepiej tagowane......
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...
1. Czy wiesz, że Twój programowy timer liczy do 2001? 2. timerFlag źle zadeklarowane. Powinno być static volatile _Bool. Reszta zmiennych też dość radosna. 3. Kod, który wkleiłeś nie zawiera niczego, co odnosiłoby się do inicjowania portów dla wyświetlacza ani samego wyświetlacza, a problem masz podobno z wyświetlaczem, a nie z diodami LED. Mogą to...
Cześć! Po kilku małych projektach opartych na Nucleo i Discovery postanowiłem wykonać trochę bardziej skomplikowany i praktyczny projekt - odtwarzacz plików WAV z karty SD i... zwracam się do Was z prośbą o pomoc 😄 Projekt oparty jest o STM32F103RCT6 do którego podłączone jest gniazdo kart microSD i DAC (PCM1780). Za pomocą FatFs odczytuję plik WAV...
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...
Witam Pisze program przetwarzający dwa kanały ADC (potencjometr i termometr). Używam do przesyłania danych DMA i w końcu USARTA do wysyłania danych do terminala. Problem polega na tym, że cały czas odbieram zerowe wartości, tak jakby DMA w ogóle nie przesyłało danych. Prosiłbym o pomoc z rozwiązaniem problemu! Pozdrawiam Kod: [syntax=c] #define TEMP110_CAL_ADDR...
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...
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...
Próbuję odpalić wyświetlacz Siemens S65 przy użyciu mikrokontrolera STM32. Uruchomiłem SPI i jak wynika z oscyloskopu - działa. Jednak ani razu nie udało mi się wyświetlić tego co chcę na ekranie. Użyłem po części bibliotek ze strony Kranza. Jedyną reakcją, gdy wysyłam dane do wyświetlenia jest mruganie, tj. raz występują "krzaki" na ekranie, a raz...
Cześć, Platforma: STM32F769I-DISCO OS: FreeRTOS Środowisko: System Workbench for STM32 Próbuję zaimplementować PTP na podanej platformie, jednak od dłuższego czasu męczę się z regularnie pojawiającym się Hard Faultem. Jak zdołałem wybadać, błąd pojawia się prawdopodobnie, gdy upłynie czas jednego z timerów programowych, które są tworzone. Tworzonych...
Witam. Nie chcąc zakładać nowego tematu zapytam tutaj, bo również problem dotyczy freeRTOS'a. Mam pytanie odnośnie tego, które funkcje w funkcji main są konieczne , aby RTOS mógł zacząć pracować. W demie funkcja main wygląda jak poniżej. Oczywiście prvSetupHardware i vTaskStartScheduler wiem, ale co do większości z nich nie mam pojęcia. Prosiłbym ewentualnie...
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, Od razu pisze że nie jestem mistrzem w pisaniu programów, a z stm zaczynam swoją przygodę. Chce wyłączyć przerwanie od EXTI na przykład po obsłudze tego przerwania: Do wyłączenie/wyłączenia przerwania np. od Timera jest TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); //TIM IT enable Generalnie chodzi mi o to że muszę zrobić detekcje sekwencji...
Dzięki za odpowiedzi! gaskoin wydaje mi się, że sprawdzanie bufora w przerwaniu po odebraniu znaku nie będzie zbyt optymalne bo komunikacja wygląda tak: Zapytanie: AT\r\n Odpowiedź: AT\r\n// Z włączonym echem OK\r\n Więc w trakcie odbierania znak \n pojawia się klika razy przez co będę blokował przerwanie podczas odbierania danych. Teoretycznie echo...
Witam. Od pewnego czasu walczę z chińską płytką (blue-pill) z STM32F103 na pokładzie i z tego co już się nauczyłem oraz co sobie w ReferenceManualu wyczytałem to wiem, że AVR'y odłożę na półkę:) Moja nauka jest w stylu 'bare-metal' wykorzystuję jedynie pliki nagłówkowe stm32f103xb.h i kilka od CMSIS które można wydobyć z STM'owych bibliotek, więc ich...
Witam serdecznie. Od kilku dni walczę z problemem uzyskania prawidłowych odpowiedzi od PAD'a PS2 na STM32F411RE nucleo. Wykorzystuję do tego SPI oraz USART w celu odbierania komunikatów. Częstotliwość zegara mam ustawioną na 8MHz, w konfiguracji SPI prescaler 64 co daje mi 125KHz (lub KBits/s). Pierwszy bit pobierany jest od LSB, paramert CPOL na 1...
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, 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ę...
STM32 + FreeRTOS 7.1.0 + IRQ Siedze już dłuższą chwilą nad takim czymś. Mam zdefiniowaną kolejkę i zadanie: xQueueReceive definiuje po ilu taktach (czyli ms) zadanie ma przechodzić w stan ZABLOKOWANE. Co bym tam nie wpisał zadanie się nie blokuje i działa. Ilość znaków w kolejce się zgadza - po wyświetleniu ostatniego znaku z kolejki zwraca 0. Próbowałem...
Witam ponownie, zacząłem niedawno zabawę z CANem, a raczej powinienem napisać, że chciałem zacząć. Jako, że ostatnio nie mam dostępu do auta postanowiłem pogadac z interfejsem ELM327. Tak więc podłączyłem CANL z CANL i CANH z CANH między płytką a interfejsem. Idea jest taka: wysyłam komendy do interfejsu przez usart1 a on wysyła do mnie odpowiedzi po...
Witam. Próbuję zapisać i odczytać zmienna w pamięci eeprom. Nóżki A2,A1, A0 i WP mam połączone z gnd. Zapisuje 0x5a jednak odczyt dostaję 0xff czyli według mnie odczyt działa bo odczytuję wartość nie zapisanej komórki ale dlaczego nie działa zapis? Oto kod: https://obrazki.elektroda.pl/2936629500_...
Jeśli użyłeś przykładu stm32cl_blink_led i ściągnąłeś teraz przykład lpc4330_blink_led to musisz wykonać takie oto kroki: 1. w startupie zastąp to: /* +---------------------------------------... | Initialize .data section +---------------------------------------... */ ldr r1, =__data_init_start...
Witam serdecznie. Początkowo miałem problem z uruchomieniem układu, nawet pisałem do Piotra czy nie ma jakiegoś błędu w zamieszczonym kodzie. Problemy były dwa, po pierwsze używałem płytki testowej na której był umieszczony kwarc, którego z niewiadomych mi powodów zostawiłem. Po drugie istotny jest rodzaj bramki lub konwertera napięcia na wyjściu. Np...
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...
Tak więc wysyłanie zrobiłem tak : [syntax=c] void MPU6050_I2C_ByteWrite(u8 slaveAddr, u8* pBuffer, u8 writeAddr) { #define BITBAND_PERI_REF 0x40000000 #define BITBAND_PERI_BASE 0x42000000 #define BITBAND_PERI(a,b) ((BITBAND_PERI_BASE + (a-BITBAND_PERI_REF)*32 + (b*4))) //Convert PERI address #define I2C2_CR1_START_bb *((volatile unsigned long*) BITBAND_PERI(I2C2->CR1,8))...
Witam, Napisałem kod obsługi interfejsu SPI dla uC STM32F303 oraz STM32F051. Kod ten obsługiwał komunikację z NRF24L01+. Miałem problem z tym programem gdyż mikrokontroler przy próbie posłania bajtu do urządzenia za pomocą funkcji: [syntax=c] while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET) ; SPI_I2S_SendData(SPIx, byte); while (SPI_I2S_GetFlagStatus(SPIx,...
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, procesor jak w tytule, startup, skrypt linkera z Distortos, nagłowkowe od ST. Zestaw oparty na STM32F746I z SDRAM 8MB. Sterta w SDRAM, skrypt linkera przerobiony pod SDRAM. [syntax=c] MEMORY { flash : org = 0x8000000, len = 1048576 flashVma : org = 0x200000, len = 1048576 SRAM : org = 0x20000000, len = 327680 ITCM : org = 0x0, len = 16384 BKPSRAM...
dataSize (w javie / C# byśmy opuścili, bo to jest zintegrowane w typie tablicowym) A inicjowało by to się jak poprzednio: [syntax=c]const Metryczka metryczki[] = { { FONT8x8, sizeof(FONT8x8)/sizeof(FONT8x8[0]),8,8,0 }, { FONT10x10, sizeof(FONT10x10)/sizeof(FONT10x10[0]),1... }, // h=10, w=8, modyfikator=1 { FONT12x12, sizeof(FONT12x12)/sizeof(FONT12x12[0]),1...
Witam! Posiadam wyświetlacz graficzny 162x64 z kontrolerem S1D15705, dokumentację kontrolera http://obrazki.elektroda.pl/3067606300_1... Generalnie wyświetlając np. poziome paski, piksele na górze się nie świecą, na dole świecą się za bardzo (nawet tam gdzie nie powinny), a po środku jest mniej więcej to co chcę uzyskać. Moja funkcja...
sizeof struct stm32 sizeof tablica stm32 f103rb
anoda magnezowy zamontować działa wkrętarka mitsubishi falownik
pralka indesit cieknie zafira schemat
Błąd P1750 w VW: Diagnostyka i Naprawa Zamiennik silnika ACME Motori A349 - Honda, Briggs & Stratton, Kohler