Stm32 int to string

erdemtr55

Üye
Katılım
3 Mart 2025
Mesajlar
51
Sa arkadaşlar,
Stm32 de adc pottan aldığım değeri
Lcd ekrana yazmayı deniyorum.V/f inverter sürücü tasarlıyorum.
Ama int değeri ekrana yazacak kod olmadığından dönüşüm yapacam.O yüzden " itoa" kullanıyorum.Buda denetleyiciyi yavaşlatıyor.Bu sorunu nasıl çözerim.
iyi günler
 
Problem yaşadığınız kısım ile ilgili kod paylaşmadınız ama aşağıdaki yöntem ile int değeri char array içerisine sprintf ile aktarabilirsiniz.

C:
#include "string.h"

char msg[100];
int adc_val;

sprintf(msg,"Deger:%d",adc_val);
 
Problem yaşadığınız kısım ile ilgili kod paylaşmadınız ama aşağıdaki yöntem ile int değeri char array içerisine sprintf ile aktarabilirsiniz.

C:
#include "string.h"

char msg[100];
int adc_val;

sprintf(msg,"Deger:%d",adc_val);
Aslında kütüphane kullanmadan yapmak isitiyorum.Zira herşey mikrodenetleyicide
yer kaplıyor.Aslında çok basit bir yol vardı,ama hatırlamıyorum
 
Ekran rutini icinde bir flagin degerinin degismesini dongu icinde bekleyen bir rutin olmamali.
Eger hazir kutuphane kullaniyorsan kutuphanenin de kullanmadigindan emin olman lazim.

Birde kritik fonksiyonlari olabildigince optimize et buna ragmen uzun zaman da aliyor olsa int rutinin icine yerlestir. Ekrandi ivir zivir di rutinler de ana programda kalsin.
 
Test etmedim buna benzer bir şey olmalı:

int8 *int2str (int8_t * buf_p, int16_t tint)
{

for(*(buf_p + 5) = 0, int8_t *str_p = buf_p + 4; ;str_p--)
{
*str_p = int16 % 10 + 48;
int16 = int16/10;

if (int16 == 0)
return str_p;
}
}
 
itoa, printf, sprintf hepsi arka planda aynı işlemi yapar neredeyse aynı zamanı harcar. ama gümcel bir arm işlemcide float değilse printfler çok az süre alır.

bunu denemenin en kolay yolu herhangi bir dönüşüm işlemini bir pini high yapıp 1000 veya 10.000 defa tekrarlamak ve pini low yaparak bu süreyi skop ile ölçmek. skop yoksa tick timer ile de yapabilirsin ama bu çok kaba ms çözünürlük verir. veya herhangi bir timeri us sayacak şekilde konfigüre ederek süreyi içeride de ölçebilirsin.
 
Bir potun değerinin okunması nasıl bir timing sorununa sebep oluyor anlamadım. Bir pot çok yavaş değişir, saniyede bir kere okusan bile anlamlı bir değer okursun, veya potu yavaş çevirirsin.

Ama genel olarak, neredeyse hiç timing sorunu çıkarmayacak bir loglama istiyorsan, ADC verisini kullanılmayan bir SPI porta yazdır, oradan da DSO tipi osiloskop ile veri kaydet.
 
Ne kadar ve nasıl bir yavaşlıktan bahsediyoruz acaba?
 
Ben alttaki fonksiyonu(0.4) kullanıyorum. Ondalık kısmı ben belirliyorum ve hem tam kısmı hem de ondalık kısmı bu fonksiyon ile dönüştürüyorum.


Ek:
Çıktı için bir blok strig oluşturuyorum. İlgili bölümlerini strcat, strcpy ile dolduruyorum. Xprint ve standart itoa fonksiyonlarından daha az yer kaplıyor ve daha hızlı oluyor.
Bu fonksiyon tanımlama satırında kullanılan "base" kelimesi, derleyicilerde sorun çıkarabiliyor. Başka bir kelime ile değiştirilebilmekte.
 
Son düzenleme:

Forum istatistikleri

Konular
7,887
Mesajlar
130,502
Üyeler
3,164
Son üye
aeneso

Son kaynaklar

Son profil mesajları

Mutluluğun resmi illa güzel çizilmiş tablo olmak zorunda değil.Bazen basit bir çizgi,doğru bir renk,yada küçük bir detay
Python Geliştirmeye eklediğim yapay zeka sunucusu, yeni başlayanlar için roket etkisi
Bir insanın zeka seviyesinin en kolay tesbiti, sorduğu sorulardır.
yapay zeka interneti yedi bitirdi, arama motoru kullanan, forumlara yazan kaldı mı ?
az bilgili çok meraklı
Back
Top