Aby float działał w printf/sprintf , należy dodać w opcjach linkera dodatkową bibliotekę. Jak to zrobić, opisane jest pod koniec pierwszego posta w temacie http://www.elektroda.pl/rtvforum/topic10...
To co podałem to kompletne polecenie dla linkera. Jeśli korzystasz z kreatorów to musisz linkować nie -lprintf tylko plrintf, to -l dodaje AS.
Weź wszystkie podstawowe pliki (startup, skrypt linkera, tablicę wektorów, Makefile) z jednego źródła, bo jak je mieszasz to nigdy nie wiadomo co nie zadziała. 4\/3!!
Ten skrypt linkera jest błędny... masz zdefiniowaną pamięć o nazwach ROM i RAM, a sekcje pakujesz do CODE i DATA. No to chyba coś tu nie gra? Poza tym masz kompilator i narzędzia sprzed 3 lat, ale to pewnie wiesz... 4\/3!!
W moim MPlab było w: Project -> Build Options ->Project -> PICC Linker -> int + long + float teras sprintf w %f daje liczbe zmiennoprzecinkową, a nie 'f', wyniki się wachają i problemu do końca ie rozwiązałem ale to już inna bajka(uśrednianie), bardzoi mi pomogło. Dzięki
Gdzie masz funkcję write_text(); ? Tworzysz w ogóle jakieś pliki nagłówkowe? extern możesz też zastosować do tej funkcji syscalls.c który współgra ze skryptem linkera a o tym poczytaj na stronie Freddiego http://www.freddiechopin.info/
Żeby sprintf() (lub tym podobne) zadziałał, to wystarczy że do projektu dołączysz syscalls - do ściągnięcia z mojej strony [; Z wiadomych względów są one idealnie dopasowane do skryptu linkera z przykładów <; Jest tam też taki sprintf()-lite, który obsługuje tylko podstawowe rzeczy (ale łatwo go rozbudować), i do tego nie zajmuje 25kB kodu [; 4\/3!!
int -> char[] - itoa() float -> char[] - tutaj funkcji jest wiele, zależnie od potrzeb - najlepiej poprzeglądać dokumentację do libc (zwykle newlib) - dołączoną do kompilatora. Implementację funkcji itoa() można znaleźć na mojej stronie www.freddiechopin.info -> Download -> ARM -> Różne Na podstawie funkcji itoa() można zresztą wymyślić własną funkcję...
Witam. Chcialem uzyc funkcji sprintf w kodzie, ale najwyrazniej program wymaga dołączenia jakis bibliotek. Standardowe bibliotek nie wystaczają, linker nie moze znalezc funkcji _sbrk itp. Czy ktos moglby wyjasnic o co dokladnie chodzi ? Dodatkowo sa tez zoptymalizowane funkcje sprintf bez uzycia floatow (oszczednosc miejsca) - jak spowodowac ze doda...
Nie wiedząc jaka jest wartość (a raczej "definicja") wartości _sstack ze skryptu linkera nikt nic nie wymyśli. Strasznie zakręcony ten startup... 4\/3!!
Linker nie może się czegoś doszukać, pewnie brak jakiegoś pliku bibliotecznego. Mogę powiedzieć Ci tylko tyle, że u mnie sprintf kompiluje się bez problemu na WinARM, specjalnie sprawdziłem. Jeżeli chcesz, możesz przesłać mi program, spróbuję skompilować go u siebie.
tmf o i pamiętałeś o dołączeniu libm.a i libprintf_flt.a? Do linkera przekazujesz -Wl,-u,vfprintf? Bez tych bibliotek sprintf nie działa. Do programowania pamięci flash mojego uC używam avr studio. Nigdy nie stosowałem żadnego przekazywania "czegokolwiek" do linkera. Myślałem, że samo #include <stdlib.h> załatwia sprawę. Mógłbyś nieco przybliżyć...
Dodaj do flag linkera: [syntax=bash] LDFLAGS += -Wl,-u,vfprintf -lprintf_flt -lm [/syntax] W Atmel studio pewnie można gdzieś wyklikać to myszką. Poza tym sprintf zwraca wartość. Warto to również sprawdzać.
Już próbowałem zwiększyć rozmiary na 2048 Może być zbyt mało. I który-main czy process? Przeczytaj komentarz nad tymi dwoma wartościami w skrypcie linkera. Przeczytaj go BARDZO wnikliwie. Dodam też, że szablony są skonfigurowane na pracę z dwoma osobnymi stosami. No i jeśli sprintf() używasz w przerwaniach (wielu), które mogą być zagnieżdżone, to nie...
Chyba logiczne jest, że jak chcesz mieć mały kod, to używasz optymalizacji rozmiaru, czyli -Os... No akurat te poziomy optymalizacji dają oszczędność na poziomie kilkuset B. Tak się składa że też od kilki dni "męczę" podobny projekt. Udało mi się uruchomić stronę (tzn. odpowiada ale nie ładuje danych)...związane jest to z tym że musiałem za komentować...
Kompilator przy optymalizowaniu programu wkłada funkcje biblioteczne niejawnie i jest z nimi też problem. Bo są rozwijane jako veneer i generują nie poprawny kod. Przykład sprintf(buf,"1234") jest zamieniany na strcpy i ma odwołanie typu veneer. Jak wywołam jawnie strcpy jest ok. Trzeba kontrolować skompilowany program i potem szukać przyczyny z kodem...
dodaj opcję -Map=$blabla.map,--cref do linkowania jeśli jej nie masz Nie bardzo rozumiem. Gdzie mam to dodać? W ogóle to zapomniałem napisać. ARM7-TDMI, Eclipse, CodeSourcery, extremalnie zmodyfikowane przykłady Freddiego Chopina. PS. masz strasznie dużo warningów. Łatwo w tym gąszczu przegapić ważne rzeczy. Dużo to ich było wcześniej ;) Ze 100. Teraz...
Hmm, a nie zwróciła twojej uwagi w tym oknie zakładka Libraries? Wybierasz w niej libm.a i klikasz add library, nie brzmi to znajomo? Podobnie aby sprintf działało z float trzeba dodać libprintf i custom options zdefiniować podane wcześniej symbole linkera.
Utrudnia? Przecież to tylko parę kliknięć, niewiele więcej niż ustawienie w konfiguracji w AVRStudio. A na WinAVR nikt chyba sam z siebie się nie rzuca, jest to po prostu opisane w kursie a tam zwykle krok po kroku jest opisane jak utworzyć plik makefile. Z jednej strony utrudnia, z drugiej strony ułatwia. Na przykład dołączenie biblioteki funkcji sprintf...
Witam! Chciałbym się dowiedzieć jak poprawnie używać liczby zmienno przecinkowe. Korzystam z win-avr i niestety nie mogę sobie poradzić. Dodałem biblioteki printf_flt oraz m (math) i odpowiednie opcje dla linkera (zywcem wziete ze strony avr-gcc) ale niestety jakiekolwiek uzywanie floatów daje mi 0 (sprintf'uje do tablicy znakow i usartem przesylam...
Tak wiem, ale spokojnie - floata używam w ostatecznosci. Output do char* można uzyskać biorąc cześć całkowitą i osobno pomnożoną przez np 1000 czesc ułamkową. Potem tylko "&d.%d". Ale po co sobie utrudniać życie :) Poza tym, procesor ma się dostosować do tego co aj chce a nie do tego co on może :P Po skorzystaniu z rady mi14chal , kompilator zgłąsza...
Tymi zerami zbytnio się nie sugeruj, bo czasami zamiast zer była jakaś okrutnie wielka liczba bez przecinka, a do tego często masakrowało całą pamięć. 4\/3!! O lol, znalazłem przyczynę "ERRORA". Tyle razy patrzyłem w tego makefile, ale za każdym razem tylko na opcje linkera, a tu inny zonk. :oops: -D sprintf=usprintf \ -D snprintf=usnprintf \ -D printf=uipprintf...
Dołacz odpowiednią bibliotekę. Opcje linkera w większosci toolchainów -u _printf_float jezeli zamierzasz skanować float-y to również -u _scanf_float Dodano po 4 Nie zauważyłem że to coocox - tam masz o ile pamiętam w konfiguracji projektu odpowiedni checkbox
Raczej nic to nie zmieni. W funkcjach variadic float jest traktowany jak double (zajmuje 8 bajtów lub 2 rejestry), stąd problem. Kompilator dba o stos podczas pracy programu, ale to co dostaje na wejściu musi być wyrównane do 8-miu bajtów. Jeśli chcesz znaleźć źródło problemów, to olej na chwilę FreeRTOSa i po prostu w jakimś programiku zwykłym przetestuj...
Witam, Dodałem do swojego programu funkcję sprintf i mam problem z skompilowaniem programu. 18:09:16 **** Incremental Build of configuration Release for project timer **** make all Building target: timer.elf Invoking: AVR C Linker avr-gcc -Wl,-Map,timer.map -mmcu=atmega8 -o "timer.elf" ./ds18b20.o ./lcd.o ./main.o /usr/local/CrossPack-AVR-20130212/lib/gc...
Ale rozwiązywałem na wiele sposobów, przerobiłem dziesiątki różnych makefilów, skryptów linkera wygrzebanych z sieci, kombinowałem z syscalls.c, kodem programu i jeszcze niewiadomo czym :-) Do szczęścia zabrakło mi tylko JTAG'a żeby debuggować program krok po kroczku. Zamiana na Yagarto pomogła, nie jest to eleganckie rozwiązanie, choć w moim wypadku...
Witam. Mam kłopot staram się wyświetlić na lcd lub wysłać przez USART zmienną która powinna przyjąć wartość około 70000 - 100000 ... Mam wielkiego zonka :-( Teoretycznie definiuję zmienną jako volatile uint32_t licznik = 70000; a na lcd dostaję jakieś dziwne odczyty ... to samo na rs... używam takiej funckji : sprintf_P((char*)tekst, PSTR("Licznik:...
Ja bym się tam nie poddawał. Jeśli nie działa Ci printf() z floatami, to - jak pisałem - jest spora szansa, że w projekcie masz poważny problem związany z wyrównaniem stosów. Zignorujesz semihosting to w końcu trafisz na inny objaw tego samego, nierozwiązanego problemu. W każdym razie problem z wyrównaniem stosów objawia się też tak, że czasem takie...
Albo użyć "sprintf" z biblioteki "stdio.h". sprintf (sbuf, "%0a.bf", temperatura); write_text (sbuf); W ciągu %... zamiast 'b' podstaw liczbę cyfr wyświetlanych po przecinku, a zamiast 'a' podstaw łączną liczbę znaków formatowanego ciągu łącznie z przecinkiem (kropką). Np. pisząc "%05.2f" dla temperatury równej "23.5" otrzymasz...
printf() używa okrutnych ilości RAM, więc zacząłbym od tego. Jeśli nie wyświetlasz liczb z przecinkiem, to użyj iprintf() - wersja ta nie obsługuje zmiennego przecinka, ale za to zajmuje mniej pamięci flash i chyba trochę mniej RAM. Do tego printf() wymaga funkcjonalnego syscallsa _write_r(), więc na "pierwszy ogień" lepiej zacząć od sprintf() (lub...
OK, więc tak: startup.s /* +=======================================... | includes +=======================================... */ #include "hdr/hdr_cpsr.h" /* +=======================================... | startup code +=======================================...
Trzeba skończyć z tym "Pan" - naprawdę. Zasadniczo jeśli weźmiesz plikich pochodzące z przykładów, to printf() czy sprintf() na tym działają (z funkcją sbrk() z mojej strony). Istotne są dwie rzeczy: 1. stosy muszą być zawsze wyrównane do 8 - to jest zrobione w skrypcie linkera, 2. Rozmiar stosu wymagany przez te funkcje to około 700B - trzeba zadbać...
To nie ma nic do windowsa, działasz totalnie na oślep. Tak się nie rozwiniesz jako programista. I nie naprawia się błędów przez reinstalacja, ale przez precyzyjną analizę. Na małych architekturach zmienny przecinek nie jest przyłączany by default, a na życzenie. Problem tkwi w twoim projekcie. To mogą być paradoksalne złączenia okoliczności, jak sprintf...
Witam! Próbowałem napisać jakiś prosty program wykorzystujący zmienne dynamiczne, niestety program przestawał działać w momencie wywoływania funkcji malloc bądź sprintf. Podobne przypadki były już tu omawiane, jednak ten jest trochę inny: syscalls.c #include <sys/types.h> #include <errno.h> #include "uart.h" caddr_t _sbrk(int...
Zrobiłem wszystko zgodnie z instrukcją na stronie pana Mirka: http://mirekk36.blogspot.com/2013/04/ecl... Używam Eclipse Indigo SR2 z toolchain-em Atmela z Atmel Studio 6.2 i z WinAVR z 2010 roku. Niestety mam błąd podczas budowania programu (konsola): ... ./wiring_shift.o -lprintf_flt -lm avr-g++.exe: error:...
Stos 1024 bajty o ile dobrze patrzę w skrypt linkera. Za mały jeśli chcesz używać funkcji typu sprintf(). Jak masz problem to pierwsze co należy zrobić to zwiększyć stos i to BARDZO, żeby wykluczyć najbardziej prawdopodobną przyczynę. Daj tam z 8kB. Chciałbym jednak zrozumieć na czym polega problem. Czy przyczyną jest obsługa double w newlib? Widzę,...
wystarczy czytać uważnie informacje wyrzucane po kompilacji: no matching function for call to `liczba::liczba()' candidates are: liczba::liczba(const liczba&) , liczba::liczba(int, int) #include <iostream> #include <cstdio> #include <cstring> #include "liczba.h" using namespace std; liczba liczba::operator+(liczba...
Witam, Mój komputer był już tak powolny, że byłem zmuszony przywrócić system, niestety... Teraz już komputer śmiga aż miło, ale niestety nie wszystko śmiga :not: Zainstalowałem, tak jak uprzednio (przed kilkoma laty) eclipse, bibliotekę HAL (czyli cały pakiet SW4STM32) i zintegrowany CubeMX. Niestety moje projekty nie kompilują się poprawnie. Wyskakuje...
Toolchain : C:\Program Files\GNU Tools ARM Embedded\4.9 2014q4 Debugowanie programu : http://obrazki.elektroda.pl/8776950400_1... Gdzieś w sieci wygrzebałem: In case that link ever disappears, what you have to do is ensure that your gcc command has "-Wl,-u,vfprintf -lprintf_flt -lm". This translates to: force vfprintf to...
Witam! Od jakiegoś czasu bawię się mikrokontrolerami. Ostatnio próbuje swoich sił przy WinArmie. Nie mam problemu przy prostrszych projektach, gdzie w skład wchodzi pare plików. Problem i to duży pojawił się ostatnio, gdy próbowałem skompilować projekcik FREE RTOS-a (dość rozbudowany). Zmieniam ścieżkę dostępu do projektu, w pliku poza tym nic nie zmieniam....
Od kilku dni zabawiam się kamerką OV7670, próbuję pobrać z niej obraz w formacie RGB565 i o mało ambitnej rozdzielczości QCIF(bo taki zmieści się w całości w RAM). Program, który napisałem ma za zadanie w przerwaniu pobrać obraz do pamięci, zatrzymać przerwanie i zapisać zawartość do pliku bmp. Oto mój kod : Otw. pliku 0 Init OV7670 1 System Clock 120...
Funkcje te są w nagłówku <avr/pgmspace.h>: http://www.tuxgraphics.org/common/src2/a... Te, które mają sufiks _PF obsługują wskaźniki 24 i 32 bitowe do FLASH. Pozostałe funkcje - np. sprintf_P i inne z IO.h z _P obsługują __memx ale tylko w obrębie pierwszych 64 kB - nie ma potrzeby,...
Mam problem z przesyłaniem liczb zmiennopozycyjnych przez port RS232. kod obsługi uartu jest poprawny, dobrze sprawdza się w innych aplikacjach. sklejam i wysyłam zmienne w ten sposób sprintf(mystr,"\r\n krok %i czas = %d \ty = %d",n,czas,y[k]); // sklejanie stringa mystr uart_puts(mystr); //wysylanie mystr po RS w...
po co ci struktura w ktorej jest TYLKO INT?! Czy ty znasz zastosowanie struktur? Po co przepisujesz stałą tablicę intów do dynamicznej tablicy intów (bo w efekcie wlasnie to osiągasz alokując na stercie miejsce na te swoje struktury)... 1. Nieeleganckie otagowanie struktury - Dlaczego typ u ciebie nazywa się tak samo jak tag?... eleganckim rozwiazaniem...
Kod, w którym testowałem liczby stałopozycyjne: ------ Build started: Project: FFP, Configuration: Debug AVR ------ Build started. Project "FFP.cproj" (default targets): Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!=''). Target...
Poniżej przedstawiam korespondencję oraz dalsze kroki mające na celu wykorzystanie implementacji funkcji printf pochodzącej z strony freddiego chopina. Ja: Witaj, Chcialem wykorzystac twoja funkcje printf, jednak w paczce z nia zabraklo pliku usart.h . Brakowolo jedynie referencji do funkcji usart_put_char więc ją dopisalem. Niestety nie ma również...
AKTUALIZACJA 4 - WB2S MQTT wysyłka (tzw. "publish") zdaje się działać Udało mi się uruchomić MQTT - a przynajmniej częsciowo. Poniżej zrzuty ekranu z Wiresharka: https://obrazki.elektroda.pl/5879949100_... Wireshark jest w stanie rozpoznać pakiety MQTT i odkodować ich zawartość: https://obrazki.elektroda.pl/6198785700_...
https://obrazki.elektroda.pl/2718988000_... Witajcie moi drodzy W tym temacie pokażę jak każdy początkujący może najprościej uruchomić w warunkach amatorskich mikrokontroler PIC32MX795F512H bez potrzeby trawienia/kupowania pod niego konkretnego PCB. Oprócz minimalnego niezbędnego układu pracy tego mikrokontrolera umieszczę tutaj kilka...
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------------------------------------...
https://obrazki.elektroda.pl/4024708700_... Witajcie moi drodzy. Przedstawię tu pierwszy na świecie tutorial programowania modułu WiFi WB2S, czyli BK7231. Moduł ten występuje w wielu urządzeniach smart home, a w internecie panuje opinia, że nie można stworzyć dla niego własnego firmware. Nic bardziej mylnego - pokażę tu krok po kroku...
Witam, Tak jak w temacie, programuję układ, którego celem jest zczytywanie wskazań akcelerometru i wyświetlanie ich na wyśeitlaczu LCD o takim: http://www.kamami.pl/index.php?ukey=prod... Ale nie chodzi o program, bo działa poprawnie, lecz o środowisko. Na jednym komputerze, na którym działam w notepad++ i programuje przy użyciu...
Witam. mam problemy z konwersją stringa char tab do double i odwrotnie. W linkerze dodałem "-Wl,-u,vfprintf,-lprintf_flt,-lm" do konwersji double to string wykorzystuje "atof" i generalnie chodzi ok, choć czasem jest błąd na ostatniej pozycji, problem jest przy konwersji w drugą stronę tu nie wychodzi nic. jakiej funkcji najlepiej użyć i jak? Ja próbowałem...
arduino sprintf float sprintf sprintf arduino
domofon bezprzewodowy otwieranie bramy triak sterowanie przekaźnikiem strzelająca żarówka
przesterowanie wejścia tunera wsady biosu
Troubleshooting Sony Bravia KD-43XG8096: Firmware and Boot Issues Lokalizacja zbiornika oleju wspomagania w koparce Ostrówek