Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

STM32F103 CMSIS float problem

Başlatan Yuunus, 14 Eylül 2025, 23:47:28

Yuunus

Merhaba, stm32f103 ile LCD ekrana float bir sayiyi yazdirmaya calisiyorum fakat degerler ekrana surekli bos geliyor, Sttings bolumunden "Use float with printf from newlib nano" secili olmasina ragmen, Linker bolumune manuel olarak "-u _printf_float" ekledim yine degisen birsey olmadi, ama ayni kodu HAL kutuphanesi ile olusturdugumda sorunsuz bir sekilde LCD ekrana float sayiyi yazdirabiliyorum, problem ne acaba?

#include "stdint.h"
#include "stm32f1xx.h"

char buf[20];
float fp;

int main(void)
{
 fp=10.98;
 sprintf(buf,"%.2f",fp);
 //LCD yaz vs.
} 

mehmet

Ondalık bölümünü kendiniz belirleyin ve alttaki linkteki itoa fonksiyonunu kullanın. Epey kolaylık sağlıyor.


http://www.strudel.org.uk/itoa/
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"

Yuunus

Alıntı yapılan: mehmet - 15 Eylül 2025, 12:38:45Ondalık bölümünü kendiniz belirleyin ve alttaki linkteki itoa fonksiyonunu kullanın. Epey kolaylık sağlıyor.


http://www.strudel.org.uk/itoa/

bu tip bir fonksiyon kullaniyorum, gayet guzel calisiyor, ama hal kutuphanesinde calisip cmsis te calismamasini garipsedim, float carpma bolme islemlerini yapiyor ama sprintf kismi calismiyor, char array in ici bos geliyor, simdilik isimi goruyor tesekkurler.

mehmet

#3
"sprintf" yerine "strcat", "strcpy" kullanmayı deneyin.




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"

Tagli

#4
RTOS var mı projede? Veya sprintf'in hem kesme içinde hem de normal kodda çağrılma durumu var mı?

Bildiğim kadarıyla sprintf float işlerken gizlice malloc yapıyor. Yıllar önce multithread kullanımlarda bu malloc'a bağlı bir sorun vardı, sanırım arkadaki libc'nin yanlış konfigüre edilmiş olması ile ilgili. Yani malloc thread-safe değildi. Adamın biri ST'ye bu durumu uzun uzun anlatmış, çözüm de önermiş, ancak ST'den bir yanıt alamayınca epey kızmış ve vermiş veriştirmişti. Aradan geçen yıllar içinde sorun çözüldü mü bilmiyorum.

Daha önce bir kez daha dile getirilmiş burada: https://www.picproje.org/index.php/topic,81160.msg622850.html#msg622850

Gökçe Tağlıoğlu

Yuunus

#5
@Tagli projede rtos yada interrupt yok, i2c ile harici bir adc den veriyi okuyup birkac islemden gecirip ekrana yazacak bir nevi voltmetre gibi, ozel bir durum yok yani, herhangi bir uyari filanda vermiyor, hersey yolunda ama calismiyorum der gibi.

Yuunus

Simdi kafam karisti, ben kod yuklerken "Run Configuration" menusunden C/C++ Application dan Relase altindaki .elf dosyasi ile calisiyormusum, bunun yerine C/C++ Application dan Debug altindaki elf dosyasini secince sprintf duzgun calisti, ne ilgisi var bununla, diger tum kodlar Relase dosyasi ile normal calisirken sadece sprintf de mi problem cikariyor, kod yuklerken surekli Debug yapip mi kaptmam gerekiyor.

mehmet

Aktif olan Debug ise bunun altındaki . elf dosyası seçilmeli.

Project > Build Configurations > Set Active > Debug / Release

IDE kendisi kodu yüklemiyor mu?
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"

Yuunus

@mehmet Active kisminda problem yok, /Debug klasorunun altindaki .elf dosyasi secili ise sorun ortadan kalkiyor; /Relase klasorunun altindaki .elf dosyasi secili ise sadece sprintf, sadece float icin calismiyor, iki dosya arasinda hatri sayilir bir boyut farki var, /Relase klasoru altindaki .elf dosyasi ne ise yariyor onu anlayamadim, ve neden sadece float sayiyi yazdirirken problem olusuyor? Atollic de hic boyle dertlerim yoktu.

kod yuklemede sorun yok ama dosya farkli olunca belliki birseyleri kirpiyor.

Yuunus

biraz arastirdim, Relase klasorundeki dosyanin musteriye dagitilacak hali gibi birseyler okudum ama pekte anlam veremedim sonucta eksik calisan bir versiyon niye daitilsin ki, neyse Debug klasorunu kullanacagiz demekki, tesekkur ederim @mehmet @Tagli

Benzer Konular (5)