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.
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,...
Co do zmiennego przecinka - jeśli ARM nie ma FPU to jest to tak samo prawdziwe dla ARM jak i AVR. Bezedura (; Po co mam kombinować bezsensownie jak coś policzyć na liczbach całkowitych, skoro układ ma prawie 100MHz i nawet bez FPU mogę sobie takich operacji wykonywać kilkadziesiąt-kilkaset tysięcy na sekundę? Kiedyś pisałem dosyć skomplikowany algorytm,...
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 :/
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...
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;...
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...
Korzystam z gotowca Freddie'ego Chopin'a dla uC stm32f103 i używam CodeSourcery. Mam następujący problem: Próbuję obliczyć splot korzystając z funkcji: Linking target: out/stm32_blink_led.elf arm-none-linux-gnueabi-g++ -mcpu=cortex-m3 -mthumb -TSTM32F103xB_rom.ld -g -Wl,-Map=out/stm32_blink_led.map,--cref,... -Wl,--gc-sections -nostartfiles...
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...
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...
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...
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...
Niby dla ARM double i float to to samo a jednak nie to samo. Chyba Ci się pomyliło z AVR... Typ double na ARM jest pełną 64-bitową liczbą zmiennoprzecinkową podwójnej precyzji. volatile float f = 123.5434; f *= 123.123 też nie przejdzie przez koprocesor. Wyżej napisałem dokładnie o tym - bez końcówki "f" (albo rzutowania), to są liczby typu double,...
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 ?
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...
(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...
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};...
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...
[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...
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...
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.
To f na końcu informuje kompilator żeby liczbę traktował jako float a nie double :) float32_t to tylko typ biblioteki st i jest to bezpośrednio float. Sprawdziłem jeszcze na innym projekcie przeznaczonym dla stm32f4discovery i jest to samo. Coś mi mówi ze muszę przeinstalować Keila. ------- Okazuje się że nie Keil winien, a jak zawsze błąd ludzki. W...
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;...
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,...
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,...
[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...
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.
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....
(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.
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) {...
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....
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.
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
reset kropelka 42ld650 procesor zaprogramowa programator pralki
instrukcja serwisowa termet silver sterowanie bramą przesuwną
Rozrusznik VW Caddy 2.0 SDI: numery czy zęby? Zamienniki układu scalonego ME8321A w zasilaczach