Gömülü yazılımda for içinde int/uint8_t

cemalb

Üye
Katılım
9 Eki 2019
Mesajlar
113
Puanları
3
Merhabalar. Mikrodenetleyicler için gömülü yazılım geliştirirken for kullanımında "for(int i=...)" yerine "for(uint8_t i=.....)" şeklinde bir kullanım program hafızada tasarruf sağlar mı sizce? Ben yaklaşık 35 tane for döngüsü kullandığım bir programda int yerine uint8_t kullandığımda program hafızada daha fazla yer kapladığını farkettim. Neden olabilir ?
 

hkn_blt

Üye
Katılım
31 Ağu 2009
Mesajlar
1,110
Puanları
33
int tanımladığınızda ramde 32bit yer ayrılırken int8 yaptığınızda 8bit yer ayrılır yani tasarruf sağlarsınız.
 
Konu Sah
cemalb

cemalb

Üye
Katılım
9 Eki 2019
Mesajlar
113
Puanları
3
Bende öyle düşünmüştüm ama tüm for'lardaki int leri uint8_t ile değiştirdiğim halde program memory azalması gerekirken arttı. Onu çözemedim.
 

mehmet.bey

Usta Üye
Katılım
19 Ara 2011
Mesajlar
1,213
Puanları
183
Derleyicinizin stdint.h dosyasını kontrol ediniz.
 
Konu Sah
cemalb

cemalb

Üye
Katılım
9 Eki 2019
Mesajlar
113
Puanları
3
stdint.h da neyi kontrol edeceğim?
 

silisyum92

Üye
Katılım
12 Kas 2020
Mesajlar
1
Puanları
3
Yaş
28
Evet bellekten tasarruf sağlar. Fakat int yerine uint8_t veya uint16_t kullanılmasının başka getirileri vardır. Açıklaması biraz uzun. O yüzden link veriyorum. Oradan aradığın cevabı bulabilirsin.

http://ozenozkaya.com/blog/?p=186
 

karaapak

Profesyonel Üye
Katılım
2 May 2011
Mesajlar
1,777
Puanları
384
Yaş
32
Program hafızasında tasarruf sağlaması mümkün değil.
Kodun saklandığı yer Program hafızası,
değişkenler Ram hafızası denen alanda bulunur.

Ram den tasarruf sağlar mı diye sorulursa:
Mcu 32 bit ise 8 bit değişken kullanmanın bazı durumlarda faydadan çok zararı olur.
Eğer mcunun 8 bit değişkenlerle çalışmak için gerekli komut seti yoksa (mcu tadarımı ile ilgili bir durum)
bu değişkenlerle işlem yapmak için daha fazla adım gerekir çünki
aslında değişken ramde 32 bitlik bir alanda tanımlıdır,
mcu bu 32 bit in kendine lazım olan 8 bitini alıp geri kalanını bozmadan ilem yapmaya çalışırken
and or vs birkaç adım daha harcamak zorunda kalır.
Bu pek olacak bir durum değil,
genelde mcu 32 bit olsada 8 bit işlemler için komutları bulunur.
Bunun yanında derleyicide güzel tasarlanmışsa bu işe el atar.

Bunların dışında:
her for döngüsü için
for(uint8_t i=.....)"
şeklinde değişken kullanımı gereksiz,
for ların dışında bir tane "i" tanımlayıp
bütün for döngüleri için aynı değişeni kullanabilirsin.

Daha doğru yorum yapabilmek için kullanılan mcu ve ide derleyici nedir bilmek ona göre incelemek lazım.
 

Sponsor Bağlantı

Forum istatistikleri

Konular
113,112
Mesajlar
796,028
Kullanıcılar
415,227
Son üye
akondra

Yeni konular

Üst