z tego co pamiętam to piszesz "%#4x", tutaj masz opis: http://www.cplusplus.com/reference/cstdi... Czasami zdarza się że nie chcemy wykorzystywać printfa wbudowanego (jest bardzo kosztowny rozmiarowo z obsługą wszystkich flag). Wtedy warto napisać własną funkcję, a jest ona banalnie prosta.
Zawsze możesz próbować grzebać na stosie i w rejestrach (adres "powrotu" powinien być w LR), ALE... HardFault wyskakuje jak pojawia się inny - krytyczny - problem, który jest nieobsługiwany. 4\/3!!
Pomijając sensowność używania sprintf do SKOPIOWANIA stringa do jakiejś zmiennej, to błędów jest bardzo dużo. 1. Skasowałeś stronę którą chcesz zapisywać? 2. Odblokowałeś zapis do flasha? 3. Twój zapis jest dziurawy, bo jak zero będzie na nieparzystej pozycji, to pętla nie zakończy się wtedy kiedy będziesz chciał 4. Odczytujesz FlashStatus, to sprawdź...
Witam! Próbuję zaprogramować mikrokontroler STM32F107, aby współpracował z siecią. Najpierw chciałbym skompilować kod z przykładowym projektem dostarczonym do STM32 jako EthernetDriver, czyli stm32_eth_lib. Przykład napisany jest z użyciem stosu TCP/IP uIP. Całość kompiluje się bez żadnych błędów (ew. warningi) z użyciem kompilatora CodeSourcery G++...
Mam kolejny problem z programem na standardowych bibliotekach (niestety nie mam czasu do końca projektu na "właściwe" nauczenie się STM32)... Próbuję wyświetlić pewną przekonwertowaną wartość odczytaną z ADC na LCD. Kod wygląda tak: [syntax=c] void ShowPomiarK(int pomiarK, char linia) { #define dzielnikU 1 //do okreslenia pomiarK=1; float tmp; int buf=0;...
Dzień dobry, mam pytanko, mam dziwny problem z przerwaniem zewnętrznym ( właściwie to 2 ). po 1 kod. Inicjalizacja: [syntax=c] GPIO_InitTypeDef GPIO_InitStruct; EXTI_InitTypeDef EXTI_InitStruct; NVIC_InitTypeDef NVIC_InitStruct; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GP... ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SY... ENABLE); GPIO_InitStruct.GPIO_Mode...
A jeszcze takie pytanie. uruchomiłem jakąś wersje po "ulepszeniu" i zmieniłem konfigurację na: http://obrazki.elektroda.pl/6693818900_1... Tz że router próbował przydzielić adres 192.168.1.102 ?
Używam STM32F7-45 na własnej płytce i próbuje zrobić USB Device podpinane do PC (próbowałem (osobno) virtual COM i HID). Ale po wpięciu do PC płytka jest wykrywana (po chwili) z błędem "Nieznane urządzenie - żądanie deskryptora urządzenia nie powiodło się". Elektrycznie (PCB): - Myślę, że samo PCB nie jest tutaj błędem. Prowadzę po prostu sygnały D+...
Proszę o jakiś example z tym scanf - swoją drogą wydawało mi się że te funkcjie typu printf i scanf to już wgl są beznadziejne jeżeli chodzi o optymalne rozwiązanie, dlatego raczej stroniłem od ich używania. Możliwe po przejściu z PHP gdzie o nic się nic nie martwiło tutaj, trzeba myśleć bardziej hmm o wszystkim. Nie mniej jednak jestem chyba w punkcie...
Moim zdaniem problem jest znacznie prostszy niż się wydaje. Mikrokontrolery mają znacznie okrojone zasoby sprzętowe. Skupmy się na pamięci. C bez używania bibliotek umożliwia napisanie programu z narzutem na pamięć FLASH porównywalnym z assemblerem. Z ich użyciem (startup, printf itp) to kilkanaście kb (dla rzeczonego Cortexa) C++ podobnie ale tylko...
Wiem o tym. Dla STM32 program piszę na ślepo jak dla AVRów i debuguję printfem, oscyloskopem lub innymi metodami. Bez JTAGa też da się uruchamiać systemy, ale z JTAGiem może być trochę łatwiej. Zależy od poziomu złożoności programu w połączeniu z doświadczeniem i sprytem programisty. Debuggowanie przez terminal (bo chyba o takim właśnie piszesz) sprawdza...
Przeczytałem wątek z dużym zainteresowaniem, wracam do uP po paru latach natomiast jestem starym programistą C Nie będę redagował jednolinijkowych cytatów, wypowiem się w punktach mam nadzieję każdy wyczyta co pochwalam / czemu się sprzeciwiam 0) nie zmienimy starego albo nie swojego kodu (np AVR czy innego) ale nowy możemy pisać lepiej. a) makra to...
Witam Jak że jest to mój pierwszy wpis tego typu to proszę o wyrozumiałość. Słowem wstępu. Chciał bym się z wami podzielić kilkoma moimi doświadczeniami w programowaniu mikrokontrolarów STM32F103 i STM32L152 (STMDISCOVERY) za pomocą otwartej biblioteki libopencm3 ( http://www.libopencm3.org ). Ja pracuję tylko na Ubuntu 64bit. Jako toolchain używam...
Witam Na wstępie środowisko środowisko na bazie tutorialu Freddie Chopin-a , z dołączonym "STM32F10x_StdPeriph_Lib_V3.5.0" Płytka bazowa ZL27 Kamami. Kompilator CodeBench Lite for ARM EABI Praca bez systemu operacyjnego (na ARM) Problem jest następujący. Chciałem uzyskać możliwość pełnego wysyłania danych przy pomocy Printf na wiecej niż standardowe...
OK. Ja też jestem w pracy i nie zawsze mogę o tej porze coś robić. Ale dalej: Do testowego używania UARTA przyda się "podmienienie" standardowej obsługi funkcji printf na taką, która wysyła dane przez UARTA do naszej Windowsowej konsoli. Możesz to wpisac standardowo przed obsługą assert_failed() /** * (at)brief Retargets the C library printf function...
Dzięki za odpowiedź. Lutowanie nie wchodzi w grę zatem kupuje przejściówkę usb-uart. Mając Nucleo nie potrzebujesz żadnej przejściówki jeśli chcesz "pogadać" z ESP z komputera, bo Nucleo ma więcej Uartów niż tylko ten jeden podpięty do ST-Linka i wystarczy tylko prosty programik by te Uarty programowo połączyć. I co wyślesz do Nucleo, wyląduje w ESP...
Funkcja z tego pierwszego wywoływana jest przez różne funkcje standardowe typu printf(). Funkcja z tego drugiego wywoływana jest pewnie przez startup albo przez jakąś inną funkcję z bibliotek coocoxa.
Sprawdź debuggerem gdzie konkretnie się wiesza.
Mi zadziałało coś takiego: http://obrazki.elektroda.pl/1811887400_1... [syntax=text]symbol-file Release-v1.2/aboard.elf monitor arm semihosting enable monitor reset halt[/syntax] a openocd uruchamiam tak: [syntax=text]bin\openocd-0.7.0 -f interface/stlink-v2.cfg -f target/stm32f1x_stlink.cfg -c "$_TARGETNAME configure -rtos FreeRTOS"[/syntax]...
http://home.comcast.net/~derelict/files/... Sam korzystam z tej biblioteki. Działa bardzo dobrze. Polecam każdemu jako znamiennik pamięciożernego printf'a.
f_printf zwraca ilość zapisanych bajtów, lub EOF w razie błędu, a więc to sam test (res != FR_OK) sprawia problemy.
oto kod który przekształci timestampa na datę, oczywiście można sobie te pola zrobić jako strukturę czy jak kto woli, ja tylko daje gotowy algorytm z którego korzystałem podczas obsługi tego śmiesznego RTC w stm32f1 :D [syntax=c] #include<stdio.h> int czyPrzestepny(int rok) { if (rok % 4 == 0 && rok % 100 != 0 || rok % 400 == 0) return...
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...
Dzięki za odpowiedź. A jak to samo zrobić bez printf?
Ostatnio był podobny tamat na forum. Możesz wykorzystać compound literals. https://gcc.gnu.org/onlinedocs/gcc-3.2/g... http://www.elektroda.pl/rtvforum/viewtop... Przykładowo: [syntax=c] #include <stdio.h> #include <stdint.h> #define COMPOUND_LITERAL(type, value)(type){value} #define TEST_U8 COMPOUND_LITERAL(uint8_t,...
Powoduje wyrzucenie na serial port samych spacji. coś jeszcze może tu być źle źle? Kiedyś mówiło się, że problem jest typu "PEBKAC", ale teraz chyba nie wolno... Wiesz w ogóle jak działa funkcja printf() czy po prostu wklejasz na ślepo jakieś fragmenty znalezione z netu? Czego spodziewasz się podając do funkcji printf() adres zmiennej w której jest...
Zrobiłem mały tescik na PC: #include <stdlib.h> #include <stdio.h> #include <stdint.h> #define UIP_BIG_ENDIAN 0 #define UIP_LITTLE_ENDIAN 1 #define UIP_BYTE_ORDER UIP_LITTLE_ENDIAN #ifndef HTONS # if UIP_BYTE_ORDER == UIP_BIG_ENDIAN # define HTONS(n) (n) # else /* UIP_BYTE_ORDER == UIP_BIG_ENDIAN */ # define HTONS(n)...
Próbuje mierzyć częstotliwość sygnału wykorzystując przerwanie i Timer2 Napisałem taki oto kod przy pomocy CubeMX: 249992 Hz i niby ok. Jednak znalazłem kurs STM32 na FORBOT ( 249986 Hz. I teraz nie wiem czy prawidłowo należy skonfigurować timer do tego zadania tak jak zrobiłem czy tak jak w kursie?
Popraw tą funkcję: void UDP_appcall(void) { switch(uip_udp_conn->lport) { case HTONS(68): dhcpc_appcall(); printf("."); break; }
Faktycznie nie zauważyłem, że tam było przesunięcie o 8 w adresie w tym miejscu w tabelce, rzeczywiście ruszyło odrazu, Dzięki za pomoc Dodano po 42 P.S. A czy ten przykładowy program umożliwia odrazu korzystanie z takich funkcji jak printf czy tam sprintf?
A ten poważny błąd w skrypcie, to jaki (i czemu działa podstawowa wersja, skoro skrypt jest zły)? Działa tylko dlatego, że nie masz żadnych zmiennych globalnych/statycznych. Dodaj sobie takową i spróbuj zmienić jej wartość to się przekonasz. Opcje kompilacji także starałem się ograniczyć do minimum, może czegoś brakuje, albo jest za dużo? Twój zapęd...
Komunikacja bezprzewodowa dla urządzeń Internetu Rzeczy staje się coraz bardziej powszechna. Jednym z standardów, który można wykorzystać w IoT jest LoRa. Standard ten charakteryzuje się stosunkowo niskim zużyciem energii oraz bardzo dużym zasięgiem. https://obrazki.elektroda.pl/4539068700_... Powyżej możecie zobaczyć moduł SX1278 wraz...
Witam Dopiero zaczynam swoją przygodę z mikroprocesorami z rodziny ARM. Posiadam moduł prototypowy: STM32 LCD3.2" ARM Cortex, z procesorem: STM32F103VCT6 . Korzystam ze środowiska Kyle uVison4. Problem pojawił się przy próbie uruchomienia magistrali I2C. Obecnie mam 3 ATMEGI połączone ze sobą po I2C i między nimi komunikacja przebiega prawidłowo. W...
1. O co chodzi dokładnie z Serial Wire Viewer oraz Serial Wire Output? To taki jednokierunkowy port szeregowy do wystawiania nim informacji jakie uznasz za słuszne. http://infocenter.arm.com/help/index.jsp... Chodzi mi dokładnie o to SWO to pin dedykowany do tego? Jak najbardziej. czy si e jakoś to uaktywnia?...
(at)tadzik85 jak to robisz dokładnie? [syntax=bash](at)echo "###Size of target .elf file: " (at)$(SIZE) -B $(ELF) (at)echo ' ' (at)$(SIZE) -B $(ELF) | gawk 'NR > 1 {printf "FLASH: ......................[/syntax] Chodzi o pozbycie się 2-krotnego wywołania size....
Popatrz, ile razy był tu wątek "wysyłam w kółko 'A', a odbieram krzaczki". Na moje oko nie pojawia się to jakoś często na forum. Poza tym co niby chce ktoś osiągnąć wysyłając coś w kółko bez żadnej przerwy. Jedyny przypadek to chyba debug printf typu: [syntax=c] while (1) { printf("Hello world\n"); } [/syntax] Poza tym wysyłana sekwencja musi być odpowiednia...
Zaprojektowałem i zbudowałem płytkę wyposażoną w procesor STM32F107RCT6 oraz dekoder popularny MP3 VS1003. Jest to kolejna wersja starszego projektu na PIC32, który przenoszę na nowy mikrokontroler. Większa część projektu PCB pochodzi ze starej wersji. Do komunikacji z VS1003 używam popularnej biblioteki Andy'ego Karpova, którą już wcześniej przeportowałem...
Widzę, że nikt się nie skusił na 500pkt.... Pracuję nad tym dzień i noc, teraz próbuję podejść od drugiej strony przerabiając projekt do kamery, pozamieniałem wszystkie wyprowadzenia GPIO aby pasowało to do mojej płytki, ale niestety nie chce działać - wyświetlacz cały biały. Wydaje mi się, że problem tkwi w pliku GLDC.c, ale nie wiem gdzie... main.c...
Wciąż nie rozumiem do końca... LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc(length=%"U16_F")\n", length)); //LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc(length=hu)\n"));//Moja modyfikacja - powyższa linijka powodowała hard fault Jak odkomentujesz tą drugą linijkę to się wykrzacza tak? Czy może wykrzacza się jak zakomentujesz pierwszą...
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,...
Ściągnąłem ten sprintf_ ale przy kompilacji co chwila o coś woła jakieś usarty i inne.. A wystarczyło zajrzeć do pliku nagłówkowego i wyłączyć "printf", no ale co kto lubi. Nikt nie powiedział, że to bezobsługowe. 4\/3!!
Dzięki za podpowiedzi. Na razie kompiluję z opcją -O1. Wygląda że problemem był za mały rozmiar stosu (STACK) lub sterty (HEAP). Po powiększeniu rozmiaru obydwu program wystartował i nie mam żadnego HardFault (na razie sprawdziłem tylko podstawowe funkcje interfejsu). Pod debug czasami wygląda jakby w ICTM pojawiały się tymczasowe kopie zmiennych ale...
Operator new używa malloc() i wyjątków, a obsługa tych dwóch wymaga dostarczenia funkcji zwanych "syscalls" - takich jak właśnie close, exit, sbrk, write, read, itd. Najlepszym rozwiązaniem jest zastąpienie domyślnego operatora new swoim własnym (takim który wywołuje tylko malloc() ). Wielu "problemów" unikniesz dodając gdzieś w kodzie coś takiego:...
Wywołanie printf() oczywiście nie wejdzie do tej funkcji, bo nie używa Twojego pliku tylko stdout. Wywołanie drugie to oczywiście inna kwestia. Być może pocieszy Cię, że "nadziałeś" się na to, na co chyba natknął się absolutnie każdy. stdio obsługuje domyślnie buforowanie (można je wyłączyć, ale to oczywiście nie jest najlepsza opcja), to co masz w...
Pierwsza opcja to oczywiście zdefiniowanie NAPRAWDĘ DUŻEGO stosu, ale to średnie rozwiązanie jak wiadomo [; Do rozbudowanej aplikacji na ARMa myślę że należy liczyć minimum 1kB, jeśli używa się jakichś potwornych funkcji standardowych (printf!) i to głęboko to lepiej zaopatrzyć się w 2kB (o apetycie tych funkcji na pamięć pisałem ostatnio http://www.elektroda.pl/rtvforum/topic13...
Wykonałem po 400 wywołań foo(). Otrzymane średnie wyniki: Bare-metal: 1. 7 2. 244,27 3. 44281,76 FreeRTOS: 1. 6 2. 236,22 3. 42486,88 Także wychodzi na to samo. Kod dorzucam dla ewentualnego sprawdzenia, czy na pewno dobrze wykonuje te pomiary. [syntax=c] uint32_t w1 = 0; uint32_t w2 = 0; uint32_t w3 = 0; void foo() { __disable_irq(); uint32_t j = 0;...
Miło przeczytać rozsądną opinię. Przytoczony Harold Abelson zapewne nie jest zwolennikiem takich programów, napisałem to gdzieś około 1997 roku: [syntax=c] _(__,___){return ___<__?__%___?_(__,___+1):0:1;} #include <stdio.h> int main() { int k; printf("\ngive a number to check: "); scanf("%d", &k); if (_(k,2)) printf("\n%d is a prime number.\n",...
Faktycznie, rozwiązanie kwestii działania SPI było dosyć proste i po sprawdzeniu - SPI działa. Odczytuję zapisany wcześniej rejestr poprawnie. Teraz mam inny problem. Poniżej zamieszczam program z pliku main.c, w którym są dodane miejsca wysyłania kolejnych numerów przez UART i program zatrzymuje mi się po wysłaniu numeru 88. Nic więcej się nie dzieje,...
po prostu chce pisać w środowisku którego używają ludzie do zastosowań komercyjnych, po co mam pisać w eclipsie, skoro w crossworks są zupełnie inne biblioteki Wielu ludzi (choćby ja <: ) używa do zastosowań komercyjnych Eclipse'a... Czy w CrossWorks są jakieś "zupełnie inne biblioteki"? Wątpię - implementacja biblioteki standardowej jest inna,...
przy oversampling na 8 trzeba ustawić BRR na 0x34 Poddaję się - nie wiem skąd ta wartość (0x34) :?: Metodą "prostego dzielenia", tak jak piszesz, wychodzi 0x1c (28). Dla weryfikacji tej wartości "zgrzeszyłem" i zainstalowałem CubeMX - wygenerowałem inicjalizację UARTu dla F4, baudrate=6M, zegar=84MHz. Kod wygenerowany przez Cube też zapisuje do BRR...
stm32 printf printf double printf write
brother drukarka domyślna silnik dmuchawy megane turbina wiatrowo akumulator
Objawy uszkodzenia regulatora ciśnienia paliwa 1.9 JTD Serwis i naprawa wyciskarek Bio Juice - gdzie szukać?