Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 8 sty 2025, o 09:06


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 30 paź 2016, o 16:14 
Offline
Użytkownik

Dołączył(a): 22 kwi 2015
Posty: 50
Pomógł: 0

Witam. Poniżej wklejam prosty kod programu, który się kompiluje poprawnie, natomiast nie działa na procesorze.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Otóż błąd znajduje się w przypisaniu zmiennej typu int do zmiennej typu float. W czasie wykonywania tej linijki, program przeskakuje do pętli nieskończonej:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Jak poprawnie dokonać takiego rzutowania ? No bo chyba jest to możliwe ?



Ostatnio edytowano 30 paź 2016, o 16:26 przez _damian, łącznie edytowano 3 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 paź 2016, o 16:16 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8597
Pomógł: 337

Proszę poprawić formatowanie kodów

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 paź 2016, o 18:19 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 296
Lokalizacja: Szczecin
Pomógł: 47

Popatrz jak wygląda kod w asemblerze, może jest używany FPU a nie jest włączany?


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 paź 2016, o 20:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 sie 2013
Posty: 230
Lokalizacja: Zabrze
Pomógł: 17

W pętli while(1) nic się nie dzieje, więc kompilator najzwyczajniej (prawdopodobnie) optymalizuje i wywala niepotrzebne "rzeczy":
- przypisanie z rzutowaniem nie jest nigdzie wykorzystywane, więc wywala;
- port jest zawsze w jednym stanie, więc być może jest to stan domyślny po resecie lub w sekcji startowej programu jest to ustawiane;
--- zatem jak widać zawartość tej pętli z punktu widzenia kompilatora nic nie robi, więc zostaje pusta pętla while(1)

_________________
40-32:2=4!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 paź 2016, o 22:20 
Offline
Użytkownik

Dołączył(a): 22 kwi 2015
Posty: 50
Pomógł: 0

PJS napisał(a):
W pętli while(1) nic się nie dzieje, więc kompilator najzwyczajniej (prawdopodobnie) optymalizuje i wywala niepotrzebne "rzeczy":
- przypisanie z rzutowaniem nie jest nigdzie wykorzystywane, więc wywala;
- port jest zawsze w jednym stanie, więc być może jest to stan domyślny po resecie lub w sekcji startowej programu jest to ustawiane;
--- zatem jak widać zawartość tej pętli z punktu widzenia kompilatora nic nie robi, więc zostaje pusta pętla while(1)


To tylko przykład, tak samo dzieje się w przypadku bardziej rozbudowanego programu gdzie te zmienne są wykorzystywane, a tutaj chciałem jak najprościej pokazać jaki jest błąd.

Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Tak wygląda kod assemblera. Nie potrafię na razie powiedzieć co on oznacza, ponieważ nie znam ASM ale jutro do tego przysiąde, może coś to pomoże



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 paź 2016, o 15:24 
Offline
Użytkownik

Dołączył(a): 22 kwi 2015
Posty: 50
Pomógł: 0

krish napisał(a):
Popatrz jak wygląda kod w asemblerze, może jest używany FPU a nie jest włączany?

Jako, że wygrał we mnie leń to postanowiłem po prostu włączyć FPU, nie analizować na razie kodu asm i zobaczyc co się stanie. I poszło! Także wielkie dzięki bo pewnie bez pomocy męczyłbym się z tym z 2 tygodnie. Generalnie sam opis FPU znajduje się w programming manual, a moja nauka stm opierała się głównie na RM i nie zwróciłem w ogóle uwagi na koprocesor. Także przestroga dla początkujących - czytajcie też PM :-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 5 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO