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



Teraz jest 29 mar 2024, o 00:24


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 29 cze 2018, o 18:24 
Offline
Nowy

Dołączył(a): 25 lut 2014
Posty: 14
Pomógł: 0

Witam, piszę gdyż mam problem z przepełnieniem pamięci w procesorze.
Przed dodaniem funkcji USART_Transmit_float rozmiar pamięci wynosi.
Program Memory Usage : 6986 bytes 85,3 % Full
Data Memory Usage : 839 bytes 81,9 % Full

Natomiast po dodaniu funkcji następuje przepełnienie:
region `text' overflowed by 406 bytes

Sprawdziłem, że największy problem tworzy funkcja dtostrf, po jej implementacji program memory usage rośnie o 20%.
Czy może ktoś podpowiedzieć jak zastąpić tą funkcje lub wskazać gdzie leży błąd aby zmniejszyć zużycie pamięci ?

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


A tu poniżej kody powiązanych funkcji:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 cze 2018, o 18:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1020
Lokalizacja: Trójmiasto
Pomógł: 188

baryla92 napisał(a):
gdzie leży błąd
błędu tu nie ma. Avr-y nie potrafią operować na liczbach float, ich użycie w kodzie powoduje że kompilator generuje "ciężki" kod który emuluje obsługę typu float.
Jak chcesz przesyłać liczby zmiennoprzecinkowe musisz je rozbić na dwie liczby całkowite i w takiej formie je transmitować dodając pomiędzy znak kropki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 cze 2018, o 19:02 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27212
Lokalizacja: Szczecin
Pomógł: 1041

baryla92 napisał(a):
Czy może ktoś podpowiedzieć jak zastąpić tą funkcje

w ogóle nie zastępować ;) szczególnie w małych prockach tylko W OGÓLE jej nie używać ;) zamiast tego działać w oparciu o liczby całkowite a też można otrzymać IDENTYCZNY efekt końcowy ;) tyle że DUŻO szybciej no i przy minimalnym zużyciu pamięci

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 cze 2018, o 20:18 
Offline
Nowy

Dołączył(a): 25 lut 2014
Posty: 14
Pomógł: 0

W jaki sposób mógłbym podzielić zatem liczbę float xPost2[0], na dwie wartości integer ?

Używanie samych wartości integer w programie akurat u mnie nie jest możliwe gdyż mam zaimplementowane filtry Kalmana na kontrolerze a obliczanie poprawnych wartości estymacji wymaga liczb zmiennoprzecionkowych, musiałbym się sporo napracować aby to konwertować wartości macierzy za każdym razem na int. Co nie jest mi niezbędne a algorytm działa poprawnie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 cze 2018, o 21:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1146
Lokalizacja: Kraków
Pomógł: 93

A nie możesz pomnożyć liczb z przecinkiem razy 10^x, tak, żeby pozbyć się przecinka?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2018, o 10:51 
Offline
Nowy

Dołączył(a): 25 lut 2014
Posty: 14
Pomógł: 0

Wszystko zależy od tego jaką dokładność chcesz uzyskać :)
Ok już znalazłem rozwiązanie, być może komuś się przyda ta konwersja:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Teraz tylko obie wartości wystarczy wysłać prze UART jako integer i po sprawie. Dzięki za podpowiedzi.



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 9 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