GCC math.h funcs...

Başlatan baran123, 18 Haziran 2015, 00:39:53

baran123

Üstte #include <math.h> belirttim ama hazırladığım fonksiyonu kullanamıyorum.

static void Calculate_PPM(void)
{
    double Rl = 5000.0;
    double lgPPM, Vrl, Rs, _ratio, ppm;

    Vrl = (double)ADC_Value * 0.0032226562;
    Rs = ( Rl * ( ( 5 - Vrl ) / Vrl ) );
    _ratio = Rs/Rl;
    lgPPM = (log10(_ratio) * -3.7)+ (0.9948);
    ppm = pow(10,lgPPM);
}


pow ve log10 undefined reference hatası veriyor.

usahin

#1
Yanılıyor isem değerli hocalarım uyarsın ama gördüğüm kadarıyla bir değer döndürmüyorsunuz  (static int fonksiyon(void) { ....... KOD ..... return a;} gibi)? Sorun bu olabilir fonksiyonu çağırdığınızda hangi değer dönecek belirtmeniz gerek. Eğer sorunun matematiksel fonksiyonlar olduğunu düşünüyorsanız Üst alma işlemini '^' operatörü ile ve log10 işlemini bir recursive fonksiyon yazarak  yapabilirsiniz.

baran123

sonuç olarak o fonksiyonda ppm değerini yeniliyorum.Geri dönüş değerinin void olması bence problem değil.

muhittin_kaplan

#3
http://i.stack.imgur.com/O3Moc.png

gdi32 yerine m yaz

mesaj birleştirme:: 18 Haziran 2015, 13:34:54

bu fonksiyonda geri dönen değer yok

baran123

Alıntı yapılan: muhittin_kaplan - 18 Haziran 2015, 13:33:37
http://i.stack.imgur.com/O3Moc.png

gdi32 yerine m yaz

mesaj birleştirme:: 18 Haziran 2015, 13:34:54

bu fonksiyonda geri dönen değer yok
Hocam şimdi derlendi.Geri dönen değer olmak zorunda mı ki ? Her çağırdığımda fonmksiyonun içindeki ppm i yeniliyorum.Geri dönen değerlide yapabilirim aslında.Ama fark etmez dimi ?

muhittin_kaplan

ppm bu fonksiyonun dışında kullanılamaz.

baran123

Global yaparsam bir problem olmaz sanırım...

mehmet

Şöyle yapsanız nasıl olur?

double Calculate_PPM(void)
{
    double Rl = 5000.0;
    double lgPPM, Vrl, Rs, _ratio, ppm;

    Vrl = (double)ADC_Value * 0.0032226562;
    Rs = ( Rl * ( ( 5 - Vrl ) / Vrl ) );
    _ratio = Rs/Rl;
    lgPPM = (log10(_ratio) * -3.7)+ (0.9948);
    ppm = pow(10,lgPPM);
   
    return ppm
}


İstediğniz yerden de:
double deger;
deger = Calculate_PPM();

şeklince çağırabilirsiniz.

Değişkenler global yapılırsa hep hafızada kalırlar. Ancak
lokal olursa; sadece işlem yapıldığı sürede hafızaya alınır,
işlemi yapılır, sonuç geri gönderilir ve değişkenler temizlenir...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

newpronik

merhaba Baran bende bu problemi yaşamıştım math kütüphanesini kullanmadan sorununu çözmeye çalışmanı öneririm. Ben ntc ile sıcaklık ölçerken kullanmıştım eklemek için editörün debug ayarlarında gcc include yerine m yazman yetiyor ancak çok büyük bir dezavantaj sahibi oluyorsun romda çok fazla yer kaplıyor. m ekledikten sonra stm32f0 kullanıyorum hafızamın 53kb si dolmuştu şuanda sıcaklığı table'den karşılaştırarak ölçüyorum ve math kullanmıyorum rom boyutum 20kb civarlarında yani math kullanmamaya çalışman gerekiyor. Bildiğim kadarıyla sen stm32f0 kullanıyorsun maximum 64kb yerimiz var eğer kullanman gerekiyorsada işlemcini değiştirmeni öneririm ilerde büyük problem yaşayabilirsin. Bu konuda ki bilgim bu kadar yanlış bilgi varsa ustalarım düzelte :)