Thomek
Guest
Fri Apr 09, 2004 3:40 pm
Witam
Zachcialo mi sie uzyc floatow niestety na intach nie potrafie. I co pisze
sobie kodzik normlanie.
float a=0.5*0.5;
unsigned char out = (unsigned char) a;
No i mam w zmiennej "out" zero. Chyba powinno byc 6 nie ?
Zagladam do pliku asm wygenerowanego przez kompilator i nie malo sie
zdziwilem bo tej liniki od floatow to wogole nie ma. Gdzie ona jest ??.
Mysle sobie inaczej z nim pojdziemy.
#include <float.h>
void main()
{
float f;
unsigned char out;
f = __fsmul(2.5, 2.5);
out = __fs2uchar(f);
}
Niby kod sie generuje ale w out nadal zero widze zamiast 6.
Wolam pomocy !!
Pozdrawiam
Thomek
feder
Guest
Fri Apr 09, 2004 3:54 pm
----- Original Message -----
From: "Thomek" <niema@niema.op.pl>
Newsgroups: pl.misc.elektronika
Sent: Friday, April 09, 2004 6:40 PM
Subject: [SDCC] floaty i problemy.
Quote:
Witam
Zachcialo mi sie uzyc floatow niestety na intach nie potrafie. I co pisze
sobie kodzik normlanie.
float a=0.5*0.5;
unsigned char out = (unsigned char) a;
No i mam w zmiennej "out" zero. Chyba powinno byc 6 nie ?
Zagladam do pliku asm wygenerowanego przez kompilator i nie malo sie
zdziwilem bo tej liniki od floatow to wogole nie ma. Gdzie ona jest ??.
Mysle sobie inaczej z nim pojdziemy.
#include <float.h
void main()
{
float f;
unsigned char out;
f = __fsmul(2.5, 2.5);
out = __fs2uchar(f);
}
Niby kod sie generuje ale w out nadal zero widze zamiast 6.
Wolam pomocy !!
NIe znam się na SDCC, ale czy przypadkiem słowo 'out' nie jest zastrzeżonym
słowem kompilatora? Spróbuj zmienić nazwę zmiennej.
Pzdr
feder
Mister
Guest
Fri Apr 09, 2004 7:52 pm
Quote:
Niby kod sie generuje ale w out nadal zero widze zamiast 6.
A dlaczego masz widzieć 6 skoro wynik jest mniejszy od 1?
Mister
Thomek
Guest
Sat Apr 10, 2004 8:39 am
Quote:
A dlaczego masz widzieć 6 skoro wynik jest mniejszy od 1?
Mister
Hmm zle napisalem oczywiscie nie powinnio byc tam 0.5 tylko 2.5 tak jak w
drugim przykladzie jest. A dokladnie to mam taki kawalek kodu ktory zawsze
daje mi wartosc 0. A nie powinien bo val zmienia sie od 0-255.
unsigned char val;
unsigned char w_4 = 10, w_9 = 233;
float f;
unsigned char out;
val = ac_read();
delay_ms(200);
lcd_gotoxy(0, 0);
f = __fsdiv(__uchar2fs(w_9 - w_4), __uchar2fs(5));
f = __fsdiv(__uchar2fs(val - w_4), __uchar2fs(f));
out = __fs2uchar(f);
show_bin3(out); // zawsze wyswietla 0 :(
Juz nie wiem co z tym zrobic a najbardziej mnie rozsmiesza zdanie z
dokumentacji SDCC:
Also notice that you don't have to call this routines directly. The compiler
will use them automatically every time a floating point operation is
required.
Tylko jak to ma sie do tego ze jak nie uzywam ich bezposrednio to kod nie
jest generowany ??. Moze trzeba dodac jaka opcje podczas kompilacji ??
Pozdrawiam
Thomek
J.F.
Guest
Sat Apr 10, 2004 12:21 pm
On Sat, 10 Apr 2004 11:39:43 +0200, Thomek wrote:
Quote:
unsigned char val;
unsigned char w_4 = 10, w_9 = 233;
float f;
unsigned char out;
val = ac_read();
delay_ms(200);
lcd_gotoxy(0, 0);
f = __fsdiv(__uchar2fs(w_9 - w_4), __uchar2fs(5));
f = __fsdiv(__uchar2fs(val - w_4), __uchar2fs(f));
out = __fs2uchar(f);
show_bin3(out); // zawsze wyswietla 0 :(
Juz nie wiem co z tym zrobic a najbardziej mnie rozsmiesza zdanie z
dokumentacji SDCC:
Also notice that you don't have to call this routines directly. The compiler
will use them automatically every time a floating point operation is
required.
Tylko jak to ma sie do tego ze jak nie uzywam ich bezposrednio to kod nie
jest generowany ??.
Ale co widac na wydruku z assemblera - w ogole tego nie kompiluje ?
Niezbyt wierze..
Quote:
Moze trzeba dodac jaka? opcje podczas kompilacji ??
Tez mi sie tak wydaje ..
J.
Thomek
Guest
Sat Apr 10, 2004 1:52 pm
Quote:
Moze trzeba dodac jaka? opcje podczas kompilacji ??
Tez mi sie tak wydaje ..
J.
Sciagnelem inna wersje SDCC. I o dziwo zaczelo wszystko funkcjonowac ale sam
nie wiem co bylo tego powodem bo program tez sie troche zmienil od
ostatniego czasu. Szkoda ze nie wiem jaka wersja byla poprzednio. Wazne ze
teraz dziala. Taka mala swiateczna magia

.
Pozdrawiam
Thomek