Myślę że bład jest zupełnie gdzie indziej. Parametry są tak przekazywane jak być powinny. Nie szukaj błedu kompilatora. To nie przeszkadza ale 2.454545 o ile nie zdefiniowałeś flagi -fsingle-precision-constant to double a nie float.
W CodeSourcery (a raczej w newlibie) nie ma dtostr() tak samo jak nie ma np. itoa(). Są inne funkcje konwertujące double/float to stringa, ale są równie rozbudowane jak sprintf() (syscalls). 4\/3!!
Trochę nie składnie to napisałem, ale przy pow() mam ten sam błąd. Jakby ktoś chciał to mała funkcja na pierwiastek: float moje_sqrt(float a) { double x=1; int i=20; while(i--) { x=(x+a/x)/2; } return (float)x; } Ale nie podoba mi się ten błąd :/
Ja nie wiem co tu kogo dziwi. Tablicę do której formatujesz dane masz na stosie w przerwaniu. Tablicę tą przekazujesz do nieblokującej funkcji, która rozpoczyna transfer przez UART. Następnie wychodzisz z przerwania, tablica przestaje istnieć, a UART sobie dalej z niej odczytuje dane... Dodano po 30 Nie wiemy nic o typie uC. Jeśli nie jest to Cortex-M4,...
Czy mozna w tym CoIDE jakos korzystać z bibliotek innych firm, czy raczej nie bardzo? Np. z bibliotek Keil uVision? Dodano po 1 Dalej nie odpowiedziałeśna pytanie czy masz wogóle obsługe liczb zmienno przecinkowych. To znaczy jak? To trzeba gdzieś ustawić? włączyć? Robiłem takie rzeczy jak np.: float a = 123.5; float b; b = log20(a); albo: double a;...
Nienazwany "STM32" może to robić softwarowo w setkach cykli Nazwany - H7 ma FPU operujące na double OK, dzielenie ma (bo nie wszystkie mają) Divide (14 cycles) Square root (14 cycles) W propozycjach kompresji mowa o na przykład powf(). Moja wiedza o implementacji (tudzież dokładności na float) jest wyłącznie intuicyjna, ale nadal mi wychodzi "setki...
Pytanie, co z ta liczbą 64 bit zrobisz? Konwersja sprintfem nie wypali. Sprintf obsługuje int i float. Double traktuje jak float wiec nie wyświetlisz tyle cyfr ile byś chciał. Bawię się w kalkulator i mam własne procedury wyświetlania/wprowadzania longów. Jednak, jak widzę, użycie "po łatwiźnie" procedur matematycznych dostarczanych z Arduino ogranicza...
[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...
Po pierwsze to powinieneś solidnie komentować takie funkcje. Opisz sobie dokładnie które zmienne powinny mieć jakie jednostki. Gdybyś to zrobił to byś zobaczył że do zmiennej która trzyma wartość w stopniach przypisujesz radiany. Dalej - zastąp RAD2ST makrem DEG2RAD(x). Będzie czytelniej. Jeżeli nie masz jakiejś kosmicznej konieczności stosowania liczb...
1. Co będzie jak nie wyrównam stosu, kiedy natknę się na problem? Zasadniczo problem występuje praktycznie tylko przy przekazywaniu 64-bitowych zmiennych do funkcji o zmiennej ilości argumentów, takich jak printf() (tutaj od razu uwaga - 32-bitowy float dla takich funkcji zawsze jest konwertowany do 64-bitowego double). Ze względu na to jak zdefiniowane...
Freddie prośba o wytlumaczenie. Mam szybki MCU. Starcza mi mocy więc wrzucam float, double i co tam jeszcze bez namysłu. Czy potrzebne, czy nie i wręcz przeszkadza. I to nazywasz duchem czasu. A zwykły delay nazywasz złym nawykiem. A przecież on jest często też najprostszym rozwiązaniem problemu. Jeśli więc starcza mi mocy ... Dlaczego stosujesz inną...
Witam wszystkich w nowym roku, Napisałem taki kod: double ff(double a, double b) { return b * a; } double c, e, f = 3; int d, g; int a = 3, b = 1; int main() { asm("cpsid i" : : ); e = ff(a, b); c = ff(f, b); d = e; g = c; while(1); return 0; } Kompiluję to z takimi...
Wiesz, że to będzie tak wolne, że będziesz liczył klatki w ilości klatek na minutę, a nie na sekundę? :-) Tak, bardzo to wolne, ale nie musi być w realtime. Po pierwsze to coś masz nie tak z _max. Skoro robisz -_max/_max to nie będziesz miał wyniku -1/1. powinno być -(_max/2)/_max Na początku kodu robię _max = _max / 2. Przykładowo załóżmy, że mamy...
No to w sumie temat jest prosty. Poprzednio zrozumiałem że tę funkcję chcesz ładować z zewnątrz w trakcie pracy procesora (np. z PC albo innego układu podłaczonego jakimś interfejsem komunikacyjnym) robisz sobie wskaznik na funkcję. Jak chcesz zmienic co jest wołane zmieniasz po prostu ten wskaźnik: [syntax=c]float Oblicz(float v1,float v2){ return...
Uwierz mi, że wszystko działa jak trzeba, tylko trzeba mieć świadomość różnic między float a double... Np. jak wezmę Twój przykład i zmienie double na float: volatile float f = 123.5434; Niby OK, ale... 123.5434 jest... liczbą typu double, więc faktycznie masz konwersje (ze względu na volatile). Jak dasz 123.5434 f (albo zrzutujesz na float), to już...
Bezpośrednie wywołanie funkcji termf ("double - %d", 1.35); powoduje błędne wyświetlenie. Bo parametr %d nie określa liczby zmiennoprzecinkowej. Trochę pobawiłem się biblioteką (STM32) i jak pisałem wyżej, funkcja termf nie działa prawidłowo gdy brakuje w jej wywołaniu wskaźnika do tablicy (nie wiem dlaczego) Trzeba go dodać: int termf (char *ptr,const...
Rzeczywiście, problem dotyczy konsolidacji. Mimo tego nadal nie jestem w stanie stworzyć pliku wynikowego, który mógłbym wgrać do uC. Pytanie nadal aktualne: Dlaczego przekazując do funkcji zmienne float albo double nie jestem w stanie stworzyć programu wykonywalnego? EDITED: Spróbowałem linaro i na nim poszło bez problemu.
Chyba żartujesz? Masz wbudowany kontroler do matryc U mnie w Keilu dla ubogich wszystko działa normalnie. Natomiast gdy korzystałem z jakiś wartości w programie które nie były ani zdefiniowane ani w formie zmiennych/stałych to musiałem je rzutować na float bo domyślnie kompilator traktuje je jako double (kompilator w formie warninga informuje o domyślnej...
(at)grzegorzn - FPU w Cortex M jest 32bitowy, nie ma natywnych instrukcji na typie 64bitowym więc ich stosowanie na siłę uważam za nierozsądne. (at)_lazor_ nie wiem co to za pierdoły. Jaki "upscale" do 64bit? Przecież taka konwersja jest bez sensu, szczególnie, że domyślnie aktualnie do floating point używane są instrukcje SSE2 a nie x87. Niemniej jeśli...
[syntax=c] IMU *imu = new IMU(); int main(void) { double dt; // delta time for all calculations uint32_t timer = 0, debug_timer = 0; // double madgwickRoll, madgwickPitch, madgwickYaw; // double madgwickRollRate, madgwickPitchRate, madgwickYawRate; fpu_enable(); system_init(); pll_start(CRYSTAL, SYSCLK_FREQ); _delay_ms(1000); while (1) { // Calculate...
Jasne ! sqrtf już nie konwertuje na double. Ale jeszcze dopytam z ciekawości, skoro FPU ma wsparcie dla float to jak jest wykonywany sqrt dla double ?
można zobaczyć co to jest to M_PI? Jakby się zrobiła doublem (np w wyrażeniu) to by potrzebowała format %lf A po drugie z tytułu optymalizacji często są po dwie biblioteki z printfem: ze zmiennym przecinkiem i bez.
Kiedyś szukałem jak zaokrąglić do 3 miejsc po przecinku. Znalazłem różne rozwiązania m.inn. to Co prawda dotyczy double ale może coś wykombinujesz. [syntax=c] double zaokraglij_do_3(double x) { int y = x * 10000; // przesuwamy przecinek o 4 miejsca i pozbywamy sie reszty za przecinkiem - y jest calkowite if (y % 10 >= 5) y += 10; // jezeli cyfra jednosci...
Kolejne pytanie jakie się pojawiło dlaczego Timer1 działa z prędkością 168mhz powinno być 84Mhz(przy 84mhz odmierzając 10s przerwanie pojawia się po 5 ). Ten temat pojawia się tutaj kilka razy na miesiąc [; Jak przeczytasz DOKŁADNIE podrozdział o zegarach w RCC to wszystko stanie się jasne. Co do Twojego przykładu to niezby ma on jakikolwiek sens,...
Witam, Korzystam z tego kodu: [syntax=c]#include "main.h" #include "stm32f3_discovery.h" /** * (at)brief Initializes the putput pins for the Timer one channels. Currently * hard coded to drive the LED3 (channel 1), LED7 (channel 2), and * LED10 (channel 3) on the STM32F3 Discovery board. * (at)param pwm_freq: Frequency of the PWM in Hz * (at)retval...
Wszystkie są bardzo pamięciożerne i generują masę nadmiarowego kodu. Działać - działają Czy dla STM, czy dla AVR, arduinowe biblioteki są beznadziejne i nie trzeba się tym przejmować, przynajmniej Arduinowcy się nie przejmują. Jak widać na przykładzie AVR, czy 1 cykl ale z DMA nie skorzystamy. Po co w Arduino DMA? Amatorom się nigdzie nie spieszy,...
Sprawdziłem bibliotekę do JPEG, o której pisałem w pierwszym poście: [syntax=c]//1999 Cristi Cuturicu //#pragma hdrstop #include <stdio.h> #include <stdlib.h> #include <string.h> #include "datatype.h" #include "stm32f4xx.h" struct Parametry_JPG { char ile_pikseli_Vert_pola; char ile_pikseli_Hor_pola; char *p_bufor_YUV_pola; int numer_konwertowanego_pasa;...
Są konkretne powody; pierwszy z nich to czas alokacji, drugi to problemy z fragmentacją pamięci, trzeci to garbage collection. Standardowy malloc w przerwaniu to pomyłka jesli chodzi o czas wykonywania... Przesada - malloc trwa (sprawdzałem) koło 150 cykli - nie wiem gdzie tutaj tragedia... Dłużej może trwać free, zwłaszcza jeśli będzie łączył bloki....
Jeśli mówimy o 32-bitowych układach, to ogólnie nie warto. Jak jest wspomaganie sprzętowe, to już w ogóle nie ma o czym mówić. Jedyny wyjątek może być wtedy, gdy mając algorytm na float, który jest już "matematycznie i algorytmicznie optymalny", układ się nie wyrabia (bo nie ma wspomagania sprzętowego) - wtedy można kombinować. Tyle że dopiero jak się...
Opisywane zachowanie może być spowodowane zlinkowaniem z (alernatywnym) libc , która z powodów objętościowych nie ma pełnej obłsugi double/float (zresztą atof powinien zwrócić double, nie float). Sprawdź, czy twój kompilator/środowisko/biblioteki są prawidłowo skonfigurowane/użyte do pracy z float/double.
Zawsze robie clean. Nie po zmianach, które wprowadziłem. To nie ma związku. W projekcie, w main() mam przygotowanie obszarów tablic, w których będą wykonywane transformaty fft. Zakomentowanie tego, co poniżej nie powoduje w/w błędów. Odkomentowanie powoduje błąd. [syntax=c]int dims_obraz[2] = {Ma,Na}; // dimensions of fft obraz int dims_znak[2] = {Ma,Na};...
(at)BlueDraco myślę ze (at)Freddie Chopin ma rację i po prostu jeszcze to działanie się nie zrobiło. a to jest niepotrzebne int16_t tr = byte_0 | byte_1 << 8; Głupio tez że najpierw robi działania na double, później przekształca do float. Tu to nie ma sensu.
Wracam do tematu liczenia wartości skutecznej, ponieważ znów napotkałem problem - tym razem z wykorzystaniem funkcji sqrt(). Do maina załączyłem plik nagłówkowy "math.h" i podczas wykorzystania sqrt() do pierwiastkowania mojej zmiennej pojawia się błąd. Projekt się nie builduje, ponieważ wyrzuca właśnie błąd gdy dodaje linijkę z liczenie pierwiastka....
Kod inicjalizacji działa, niestety problem braku filtracji dalej występuje. Jak to jest możliwe że wychodzi z filtra identyczna wartość jak ta z akcelerometru? Może to jakiś błąd kompilatora albo co? Poniżej udostępniam kod do wglądu. Może ktoś coś znajdzie. [syntax=c] double kalman_calculate (double new_angle, double new_rate, unsigned long time) {...
Witam serdecznie Kolegów! Aktualnie jestem w trakcie pisania gry typu labirynt z kulką na procesor ARM STM32F103VCT6. Wszystko mam pięknie i ładnie obsłużone (symulacja odbić od powierzchni płaskich, detekcja kontaktu z otworami) no ale zostało jeszcze najważniejsze - symulacja odbić kulki od kantów prostokąta. I tu niestety zaczynają się schody. Z...
Znalazłem opis algorytmu. Teraz dopiero zrozumiałem, że punkty stawiane są symetrycznie względem osi nachylonej pod kątem 45 stopni. Mogę więc stwierdzić, że to proste. Zmieniłem double na float bo nie wiem czy FPU w STM32F373 obsługuje double.
czyli widze, że myślimy o dwóch różnych rzeczach... Mi chodziło o zrobienie porządku w projekcie, aby uniknąć pisania bez przerwy "extern cośtam cośtam"... Nie jest to może najbardziej eleganckie ale działa. Nie wywaliłem starych wpisów tylko je zakomentowałem także łatwo zobaczyć o co chodzi... [syntax=c] ///////////////// Zewnętrzne zmienne procesowe,...
Witam, Od pewnego czasu przestawiłem się z AVR na STM32, zbudowałem sobie proste ramię robota na 5 serv + sterownik Maestro od pololu, wszystko ładnie śmiga. Tydzień temu kupiłem sobie takie Gamepad: http://botland.com.pl/joystick/2560-game... . Chciałem za pomocą tego pada sterować ramieniem. I już na 1 kroku...
float double double stm32 stm32 double
zakładanie nowych tematów obliczać obwód metoda oczko elektryczna tylna klapa
instalacja offgrid amica piekarnik
Kręcące się kółeczko przy kursorze w Windows 10 po wakacjach Jak umieścić klucz publiczny w OpenPLi?