[]

8051 C integer to char problemi.

Keil ile 8052 programlıyorum, grafik lcd'ye değer yazdırmam için fonksiyona girecek olan veri char array olmak zorunda.

aşağıdaki şekilde integerdan char'a dönüşüm yapabiliyorum, çalışıyor ama 1K yiyor kod belleğinden, zaten altı üstü 8k kod belleği var, bir kaç dönüşüm yapmam lazım, bu sefer kod belleği yetmiyor.

char buf[5];
sprintf(buf, "%d", frekans2);

örneğin 5 basamaklı bir integer'ı 1k kod belleği harcamadan nasıl char array'e atarım ? mod demeyin, math.h kütüphanesindeki ilgili fonksiyon float kullanıyor, astarı yüzünden pahalıya geliyor.

extern float modf (float val, float *n);

 
Aşağıdakiler kendi düşüncelerim doğruluğunu bilmiyorum.
1- Kod belleğinden kastedilen şey kodun saklandığı bellek mi?Eğer öyle ise kod belleğinden bir işlem için 1k yer alıyorsa beş işlem 5k almaması lazım. Onu 1K yapan şey, eklediğin kütüphanedir ki sprinft komutu stdio da.
2-Eğer daha verimli olur mu bilmiyorum ama, type casting döngüler gibi bir şey yapabilirsiniz.
Mesela sayı
sayi = 58919,
birinci_basamak = sayi/10000;
ikinci_basamak = sayi/1000 -birinci_basamak*10;
...
tek tek basamaktan rakamları döngü içinde almalı.
buf[0] = birinci_basamak + '0';
mı çalışır yoksa
buf[0] = (char) (birinci_basamak + (int) '0');
bilmiyorum biraz kurcalarsanız bulursunuz.

------------------------------------------------
Bunlar benim aklıma gelenler, bu konuda çok bilgim yok tekrar hatırlatırım.

Edit: düzeltme
  • ilkdefa  (28.11.10 10:19:53 ~ 10:21:53) 
8051'in kütüphanesi sınırlı bir bakayım dediğin fonksiyon ne kadar yiyecek :)

edit : ne yazık ki sprintf den başka yol yok gibi görünüyor c de, verdiğin syntax olmuyor. assembly yolu göründü bana...
  • kimlanbu  (28.11.10 11:05:57 ~ 11:13:07) 
kesin cozum:

1- sayiyi alip rakamlar haline getireceksin. 58919 ise elinde 5, 8, 9, 1 ve 9 olacak.
2- her basamagin degerini 48 (decimal bu) ile toplayip buffer'da ilgili yere yazacaksin.
3- buffer'in en sonuna da 0 degerini basacaksin. (null byte)

sonuc olarak elindeki buffer'da 53,56,57,49,57,0 byte'lari olacak. (bkz: ascii tablosu)

1. adim en uzun surecek adim. izin verdigin max. basamak sayisi kadar bir dongu kurup, pow fonksiyonunu kullanarak 10,100,1000,10000 gibi rakamlar elde edip, sayidan ufak mu degil mi diye bakarak basamak sayisini bulur, basit bolme islemi ile rakamin degerini cikartirsin. (edit-ek: pow eger yavas ise 10 ile carpa carpa gidebilirsin, onceki_deger=1, i=0 iken onceki_deger=10*onceki_deger=1, i=1 iken onceki deger*10=100, i=2 ise nonceki deger*10=1000, vs)
  • disq  (28.11.10 20:25:19 ~ 20:37:08) 
Merak edenler için söyleyeyim, sprintf fonksiyonunu kullanınca 1 seferlik olarak 1k artıyor programın boyutu, sonraki kullanımlarda sadece bir kaç bytle lık artışlar oluyor. Fonksiyonu kendim yazmaktan vazgeçtim 1k lık kod belleğim kaldı, oraya sığdıracağım artık kalan programı.


  • kimlanbu  (29.11.10 02:46:36) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.