Myślę, że już otrzymałeś odpowiedź, jak to zrobić. Podejrzewam, że zmienną modul_depth masz zadeklarowaną jako uint16_t ...dlatego uint16_t musisz zamienić na uint32_t na czas tych operacji, np. przez rzutowanie typów więc powinno być: [syntax=c] procentowo=((uint32_t)modul_depth*1000)/... //wspolczynnik zmian [/syntax] ponieważ bez rzutowania kompilator...
1 jest typu int więc jest 16 bitowa Dokładnie, po prostu pierwszy argument w wyrażeniu przesunięcia x : ( x << y ) jest 16-bitowy , więc jeśli chcemy użyć 32-bitowego - to trzeba zrobić rzutowanie typu.
Można użyć operacji stałoprzecinkowych zamiast operacji na float. Autor nie ma nigdzie operacji float. (100 - volume_coefficient) *127)/100 Ta część obliczeń jest stałą w pętli, więc nie powinna wprowadzać żadnych obciążeń. W wielu miejscach rzutujesz typ na 32-bity, podczas, gdy wynik operacji nie może przekroczyć 16 bitów. Takie rzutowanie wprowadza...
Poprawki, które powinieneś nanieść do kodu, aby pozbyć się warningów (łącznie z sugestiami kolegów wyżej): lcd_ILI9341.c: In function 'lcd_pisz_tekst_32': lcd_ILI9341.c:377: warning: operation on 'temp' may be undefined Zainicjalizuj zmienną temp zanim zostanie użyta: [syntax=c]void lcd_pisz_tekst_32(uint16_t x, uint16_t y, char * str,uint16_t kolor,uint16_t...
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/
Chcę obliczyć współczynnik b = 256*(x1-x2)/(y1-y2) A mnożysz przez 255 :P wsp_b = wsp_b*0xff; Jeżeli nie jest Ci potrzebny wsp_a, możesz zrobić tak: long int wsp_b; wsp_b = (((long int) (x1-x2))<<8) / ((long int) (y1-y2)); Nie wiem, jakiego typu są zmienne x1, x2, y1 i y2, a jeżeli jest...
Witam, 1. UL to jest unsigned long (32bitowa liczna bez znaku) standardowo wszystkie stale liczby traktowane są jako int ponieważ 4000000 nie zmieści się na 16bitowym int , wiec musi być jako long lub też unsined long 2. uint8_t to tak naprawde unsigned char w pakiecie WinAVR znajduje się plik inttypes to właśnie w nim są zdeklarowane podobne typy zmiennych...
jesli dostosujesz w jakis sposob swoje dane, to miej swiadomosc, ze stracisz 75% pamieci na 'puste miejsca' miedzy tymi char'ami. napisz lepiej funkcje, ktora bedzie w stanie poskladac z 4 bajtow (dowolnie umieszczonych) jedna 32-bitowa zmienna. analogoicznie dla zmiennych 16-bitowych na poczatku takich funkcji mozesz sprawdzic, czy mozliwy jest odczyt...
zmieniłem wynik z milisekund na sekundy poprzez elapsedTIme = (millis() - startTime)/1000, jednakże "elapsedTime" nie wyświetla wyniku po przecinku a zaokrągla liczby. Jak sprawić by zmienna elapsedTIme wyświetlała liczby niecałkowite? Wstępna ocena dostępnych informacji Analiza podanych przez użytkownika danych: - Użytkownik zmienił wynik pomiaru...
Zawsze można w if sprawdzać R zamiast powtarzać operację odejmowania. Tak, to też przyszło mi do głowy, ale to mnoży zmienne w programie. Cały program testowy wziął się stąd, że tak się odlicza opóźnienia w programie tylko zamiast zmiennej Tim odczytuje się wartość z systemowego SysTic. No i przyszło mi do głowy "... a co jak urządzenie będzie działać...
rzutowanie zmiennych poprostu...
Spróbowałem napisać programik w Verilogu tak, by można było to samo napisać w C (nie chciałem komplikować poprzez używanie pól bitowych, więc rozmiary zmiennych 8 i 16 bitów): [syntax=verilog]module s1b; reg [7:0] r1 = 3; reg [7:0] r2 = -2; reg [15:0] rd = 95; initial begin repeat (32) begin $display("r1=%02x r2=%02x (r1-r2)=%02x (r1-r2)<rd=%1d rd=%02x",...
no wiec czas poznac nowa umiejetnosc (nowy skill [; ) - rzutowanie zmiennych - type casting - pisalem o tym ostatnio - http://www.elektroda.pl/rtvforum/viewtop... 4\/3!!
Prawdopodobnie problemem są typy zmiennych. Funkcja atan2 operuje na zmiennych typu double - Ty podajesz zmienne typu int. Czasem trzeba w takich sytuacjach zrobić jawne rzutowanie każdej zmiennej na typ float - sprawdź czy to pomoże.
Hmmm, rzutujesz na unsigned long i zmienna czas_podawania_sredni jest tego typu, natomiast rzutowanie nie zmienia typu zmiennej czas_podawania_odliczony, pozostanie ona typu unsigned int.
Tak. Rzutowanie typów jest zasadniczo dla programisty, bo o ile w przypadku bezpośrednich zmiennych mają one różne typy i w związku z tym rozmiary, to kompilator i tak wie jak konkretna zmienna została zadeklarowana. Ale użycie zmiennej typu X w miejscu gdzie ma być typ Y oznacza prawdopodobną pomyłkę programisty i rzutowanie mówi kompilatorowi, że...
No chyba że tak, myślałem że jawne rzutowanie ma miejsce wtedy gdy wszystkim zmiennym przyporządkowujemy taki typ, żeby w danym wyrażeniu występowały tylko zmienne danego typu.
Czyli dla pewności zawsze trzeba dodawać? Nie, nie trzeba tego na pewno "zawsze" dodawać i zwykle takie "profilaktyczne" rzutowanie tylko zaciemnia obraz, podobnie jak profilaktyczne nawiasy wszędzie gdzie się da. Trzeba do sprawy podchodzić rozsądnie i po prostu za każdym razem przemyśleć co jest potrzebne - uniwersalna zasada którą mógłbyś stosować...
Zapis przez rzutowanie jest "długaśny" szczególnie jak chcę zamieniać z ramki na int32 Zawsze możesz zamiast nazw zmiennych używać pojedynczych liter, przedefiniować nazwy typów na max 3 znakowe i usunąć wszystkie białe znaki. Tym sposobem Twój program będzie maksymalnie kompaktowy i nikt nie będzie w stanie go zrozumieć - włącznie z Tobą za 2 tygodnie.
Pomiar zaczyna pulsować . Troszkę za dużo wrzuciłem programu . Wystarczyło przerwanie od licznika PWM . Jeżeli chodzi o długość przerwania to może błędnie myślałem , że lepiej jedno dłuższe niż kilka krótszych . Spróbuje zastosować przerwanie od przetwornika ac .Ile pomiarów najlepiej zrobić i jak rozwiązać rzutowanie zmiennych int na char ? Na początku...
Stworzenie wskaźnika jako volatile nic nie zmienia z pewnością, choć słyszałem pogłoski że zmienia, ale jednak kompilator daje komunikat o tym: Moja sekwencja myślenia jak kompilator daje warningi sugerujące rzutowanie, analiza "top down" (oczywiście słowo użyłem nieco umownie), często prowadzi do tego, że już pierwsze użycie ma nieprawidłowe modyfikatory....
Czyli ciągnąc ten temat, powinna zostać utworzona pośrednia zmienna 16 bit? Nie ma to żadnego znaczenia, ponieważ wartość którą możesz otrzymać w wyniku - np. 135 - _NIE_ mieści się w typie finalnym. Jeśli po drodze przepuścisz ją przez 10 zmiennych w których się mieści, to nagle nie zacznie się mieścić w int8_t. Obliczenia "wewnątrz" tego wyrażenia...
oj oj ;) W Bascomie zmienna to Double 8 Bytes 5.0 x 10^–324 to 1.7 x 10^308 Doubles are stored as signed 64 bit binary numbers, jest inaczej traktowana, zobacz na jej zakres!!! Nie operuj na tej zmiennej, skoro chcesz numer seryjny pilota to wystarczy zmienna 32 bity skoro jest on 28 bitowy. Dodatkowo Keeloq ma podzieloną transmisje na dwa bloki...
Jeśli zmienne w cudowny sposób przyjmują kosmiczne wartości, to zwykle problemem jest zbyt mały stos. Np stos przerwań nadpisuje Ci zmienne głównego wątku (lub odwrotnie) albo stos wchodzi na obszar zmiennych globalnych.. Jeśli używasz funkcji variadic (ze zmienną ilością argumentów, np. printf() ) to konieczne jest wyrównanie stosu do ośmiu - przy...
Dzięki za pomoc. Skorzystałem z funkcji w core_cm3 [syntax=c]uint32_t __REV16(uint16_t value) { uint32_t result=0; __ASM volatile ("rev16 %0, %1" : "=r" (result) : "r" (value) ); return(result); }[/syntax] i wszystko działa już poprawnie. Z tym 8051 i AVR rzeczywiście nie korzystam ze zmiennych 16bit (sięgam do pojedynczych bajtów) wiec zapewne też...
Niestety w C nie ma lekko - jest kilka wyjść. Najprościej wymusić aby jeden z operandów był typu float. Można tego dokonać stosując rzutownaie, albo przypiusując jedną ze zmiennych temp1, temp2 do zmiennej tymczasowej o typie float i potem ją wykorzystać do obliczeń. Takie rzutowanie jak w poście gaskoin nie zadziała, bo znaczy ono tylko, że wynik ((temp1...
Kolega ma problemy z podstawami C. Z jakich elementów składa się string ? Nie odróżniasz zmiennych od wskaźników i tego co chcesz uzyskać, rzutowanie w ogóle bezsensu. Jak odpowiesz na pierwsze pytanie może przejdziemy dalej. Dlaczego nie chcesz użyć itoa jeśli w ogóle posiadasz tą funkcję w stdlib ? Musisz przygotować string z wynikiem temperatury,...
Chyba jakieś rozkazy tam zaszywa, ale to trochę dziwny sposób... Nie znam kompletnie USBASP od strony programowej, ale myślę, że stosowanie zmiennych 32-bitowych wiąże się z protokołem USB (który przecież działa na 32-bitowym PC). Być może to implementacja pewnych funkcji pochodzących z PC, których autorowi nie chciało się konwertować na 16-bitowe...
Program napisany jest pod bitmapę 24 bitową czyli brak w pliku palety kolorów przed pikselami. struktura RGB (3 bajty): [syntax=cpp] typedef struct RGBTriplet { BYTE blue; BYTE green; BYTE red; } RGB; [/syntax] zmienna tmp to wskaźnik void. Wskazuje ona na miejsce pamięci gdzie znajduje się width, po to by po jego zmianie był punkt odniesienia. int32_t...
Witam jestem studentem informatyki i mam problem ze zrozumieniem jak działa rzutowanie PTR w TASM. Używam Visual Studio 2010 do debugowania. Mam prosty program do analizy (tak mi się wydałało :D ) który realizuje deklaracje zmiennych różnej długości. [syntax=asm].686 extern _ExitProcess(at)4: near public _main _DATA SEGMENTdword public 'DATA' use32...
1. Zrób jawne rzutowanie typów 2. Sprawdź, czy przypadkiem nie przeładowujesz gdzieś stosu - nie wiem jak to wygląda w MSP430 i ile toto ma ramu i ile jeszcze używasz na inne zmienne, ale w AVR stos jest budowany od dołu ramu, a zmienne od góry. I czasem albo w przypadku za dużej liczby zmiennych globalnych, albo gdy stos się rozrośnie (dużo zagnieżdżonych...
Po pierwsze jest to kod c++ a nie c. Odpowiednik w c: [syntax=c] int wbuffer[]={1,1,1,1,1,1}; const int *bufor; //1 bufor = (const int*)wbuffer; //2 printf("B: %d\n", bufor[1]); //3 error bufor[1] = 3; printf("B: %d\n", bufor[1]); [/syntax] To co tutaj zachodzi to tak zwane rzutowanie. Umożliwia ono zmianę jednego typu na drugi (o ile jest to możliwe)....
A co dokładnie oznacza ten niewyrównany dostęp? W wielu architekturach założone jest (na poziomie sprzętowym!), że zmienne o rozmiarze 2, 4 i 8 bajtów znajdują się na adresach podzielnych przez (odpowiednio) 2, 4 i 8. Tzn. że gdybyś układał zmienne w pamięci, to np. zestaw czeterobajtowych wylądowałby pod adresami 0, 4, 8, 12, ..., a zestaw dwubajtowych...
Co do dzielenia, it's not a bug, it's a feature! :) Po naszemu, to nie ograniczenie, tylko odgórne założenie, dzięki temu w C nie ma dwóch operatorów dzielenia (całkowite i zmiennoprzecinkowe), jak w niektórych innych językach, ale trzeba uważać na typy zmiennych, coś za coś. Według tego, co wyczytałem z dokumentacji avr-libc int zajmuje 2 bajty, a...
Przeważnie jest tak, że wskaźnik jest tego samego typu co zmienna, na którą wskazuje (przynajmniej tak gdzieś wyczytałem). Jednak co w przypadku gdy wskaźnik wskazuje na element struktury? Wówczas powinien on być typu struktury czy elementu? Oto przykład, jest taka oto struktura: typedef struct { unsigned char hundsecs: 8; unsigned char seconds:...
Troszkę więc nieuprawnione chyba jest stwierdzenie, że korzystanie z funkcji dostępnych w kompilatorze jest pójściem na łatwiznę - nieprawdaż ? Chłopcze, czepiasz się słówek. A ciebie co sieknęło nagle ? Piszę dyskutuję, nie czepiam się ciebie - myślałem że kulturalnie dyskutujemy. Zobacz w jakiej formie to napisałem - użyłem słowa "chyba" .... bo...
Witam. Zająłem się dzisiaj tablicami (to w ramach prób odczytu numeru seryjnego z urządzenia Dallasa). Aby sobie ułatwić i sprawdzić jedną z funkcji zdefiniowałem tablicę 16-elementową z wartościami liczbowymi, a następnie chciałbym wyświetlić osiem pierwszych liczb na LCD, w postaci numerycznej, czyli na LCD chcę w tym przypadku uzyskać 12345678 (a...
No mi nie raz rzutowanie coś tam ułatwiło. Też jestem zdania że nie ma co przesadzać. Są rzeczy nad którymi trzeba pomyśleć i zbadać o nie samemu. No trudno że program będzie działał tylko przy określonej konfiguracji zmiennych a przy innej nie a kompilator nawet nie zwróci błędu. Myśleć trzeba zawsze, jakich zaawansowanych opcji w języku by się nie...
Projekcik fajny, gratuluję ambicji :) Kliknąłem "Fajne" mimo kodu PHP! Nie chcę tutaj opisywać Twoich błędów, więc zerknij na to co dla Ciebie przygotowałem: [syntax=php]<?php /* Pobieranie parametru z $_GET['d'] Dodatkowo wykonujemy rzutowanie na typ liczbowy całkowity (int) */ $d = (int) $_GET['d']; /* Sprawdzanie czy podany parametr jest w poprawnym...
Jak użyć stałych zapisanych w pamięci programu przez const unsigned char TEXT[] = "jakiś tekst"; W funkcjach typu strcpy(), strcmp() itp? Te funkcje nie przyjmują wskaźnika do const więc nie można zrobić tego w ten sposób: strcmp(bufer, TEXT); co gorsza nie da się w ten sposób: strcmp(bufer, "jakiś tekst");...
Ja mam troche inne zdanie. We wszelkich operacjach arytmetycznych powinno sie uzywac konwersji typow nawet jezeli sa nadmiarowe. Dzieki temu mozemy czasami uniknac pomylek. Odsylam do C Codic Standard. 8-O Gdzie tak uczą? Po pierwsze, nie ma czegoś takiego, jak uniwersalny "C Coding Standard" - niestety :-(. Więc nie wiem, co konkretnie masz na myśli....
Dobra. Kod prezentuje się następująco: to jest program w którym wszystko działa jak potrzeba: [syntax=cpp]//Data utworzenie: 20-09-2014 #include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #include <avr/pgmspace.h> #include "MYUART/myuart.h" #include "MK_TERMINAL/mk_term.h" #define REF_256 (1<<REFS1)|(1<<REFS0)...
Nie sprawdzałem ale mam wątpliwości czy to zadziała. W nowym oknie musisz wywołać metodę GetParent() która zwróci uchwyt do okna z którego nowe zostało wywołane. Pewnie trzeba będzie wykonać rzutowanie. Do zmiennych dostaniesz się przez pParent. [syntax=cpp] stareOkno* pParent = (stareOkno*)GetParent(); pParent->zmienna [/syntax]
To wiele wyjasnia, dziękuję bardzo. Korzystając z okazji chciałbym jeszcze zapytać o wyrażenie : *(int*)20000=7 Ja to rozumiem jako wpisanie do zmiennej typu int mieszczącej się pod adresem 20000 wartości 7. Samo (int*)20000 oznacza rzutowanie na wskaźnik do zmiennej typu int, zmienna mieści się pod adresem 20000, Dodanie gwiazdki * przed nawias powoduje...
Najlepiej zadeklaruj int A; a do wszystkich obliczeń stosuj A/10.0 (najprostszy i najwygodniejszy sposób) Można też zaokrąglić stosując funkcje RoundTo(A,-1) lub ((int)(A*10))/10.0 (poprostu najpierw mnożymy razy 10 później rzutujemy na inta a póżniej dzielimy przez 10 i rzutujemy na float)
Jeśli chcesz, żeby zaokrąglał zamiast obcinać to do zmiennej float dodawaj 0,5 i następnie rzutuj.
Masz błąd w tej linii: [syntax=c] odczytane = (odczytane1<<8) | odczytane2; [/syntax] Dodaj rzutowanie. [syntax=c] odczytane = ((uint32_t)odczytane1<<8) | odczytane2; [/syntax]
Dzięki 2P. Działa. Podejrzewałem, że chodzi o rzutowanie zmiennych, ale próbowałem sposobem kolegi BlueDraco i niestety.
Może spróbuj zmienić typ zmiennej *odebrano* z uint8_t na char bo może to jest problem z rzutowanej zmiennej unsigned na signed.
Przecież uint8_t to jest unsigned char, więc co tu chcesz przerabiać? Jak masz warninga to po prostu rzutuj zmienną na char i już. 4\/3!!
rzutowanie tablicy rzutowanie wskaźnik rzutowanie zmiennej
kopia dekodera zawijanie wierszy iskra agregat
nissan quashqai nissan quashqai
mb170_recovery.bin for Vestel 17MB170 USB Recovery – Toshiba, JVC, Hitachi TV Firmware Łączenie taśmy filmowej 8 mm: metody i narzędzia