Keil'de int8_t bir değişken tanımlıyorum hafızada 8 byte yer kaplıyor.
int16_t tanımlıyorum yine 8 byte yer kaplıyor.
float tanımlıyorum yine 8 byte yer kaplıyor.
char, long, short hepsi 8 byte yer kaplıyor. Bunun bi ayarı var mı acaba? Böyle olunca hafızayı etkin kullanamıyorum.
Nasil tanimliyorsun?
#include "stm32f10x.h"
char degisken1=0;
short degisken2=0;
long degisken3=0;
unsigned long degisken4=0;
int8_t degisken5=0;
uint16_t degiske6=0;
uint32_t degisken7=0;
float degisken8=0.0
int main()
{
degisken1=5;
degisken2=5;
degisken3=5;
degisken4=5;
degisken5=5;
degisken6=5;
degisken7=5;
degisken8=5.0;
}
Byte mı bit'mi? Nereden bakıyorsunuz kapladığı yere? Optimizasyon kapalı mı?
Keil derledikten sonra en altta Build output penceresinde bilgi veriyor.
Program Size: Code=27312
Buradan bakıyorum. Her değişken tanımlamamda 8 artıyor. Byte değil mi burası?
Optimizasyon level 0
code yazan kisim program kodlari.
Hizalamadan dolayı öyle oluyor. "Natural Data Aligment" diye bakın. Ayrıca 32 bit bir işlemci kullandığınızı unutmayın. Hafıza erişim komutları genel olarak 32 bit sınırlarında işlem yapar ve derleyiciyide buna uymaya zorlar.
Alıntı yapılan: z - 18 Şubat 2014, 11:00:08
code yazan kisim program kodlari.
Buna degiskenlere ilk deger atayan komutlar da dahildir. Ram'dan alikonan alanlar burada gozukmez.
Hocam kullandığım çipin 32kB flash hafıza ve 4kB sram i var. Yazdığım kodların hafızada ne kadar yeri doldurduğunu nereden görebilirim? Programı sıkıştırmaya çalışıyorum Keil programlayıcı ayarlarında Download to Flash yeri var tik atılıyor. Benim kodlarım default durumda nereye yazılıyor. Çipimde hangi bölgeleri işgal ettiğimi öğrensem ona göre hareket ederdim.
Alıntı yapılan: ByteMaster - 18 Şubat 2014, 11:05:13
Hizalamadan dolayı öyle oluyor. "Natural Data Aligment" diye bakın. Ayrıca 32 bit bir işlemci kullandığınızı unutmayın. Hafıza erişim komutları genel olarak 32 bit sınırlarında işlem yapar ve derleyiciyide buna uymaya zorlar.
Evet 32bit işlemci ancak 32bit = 4 byte olması gerekmez mi?
Derlediğiniz kodun asm çıktısına bakın.
R/W data kısmında görebilirsin.
Derleme ardından keil bir rapor verir.
Program Size: Code=XXXX RO Data: YYYY RW Data ZZZZ ZI Data WWWW
XXXX byte Romda program kodu var demek.
YYYY byte Romda veri var demek. (Romda tutulan sabit değerler, tablolar vs)
ZZZZ byte Ram kullanmışsın (değişkenler için) (Stack ve Heap alanı hariç)
WWW byte. Ramda değişkenler haricinde Stack, Heap alanı vs
Program Size: Code=27312 RO-data=560 RW-data=216 ZI-data=1728
Buradaki RW mi? Yani benim programım 216 byte mı yer kaplamış ? Keil'in 32kB sınırlaması sanırım Code kısmı için geçerli...
mesaj birleştirme:: 18 Şubat 2014, 11:44:04
Alıntı yapılan: ByteMaster - 18 Şubat 2014, 11:30:43
Derlediğiniz kodun asm çıktısına bakın.
Proje klasörümde asm kodları yok :o
Assembler source var bi tek oda .s dosyası.
Alıntı yapılan: mistek - 18 Şubat 2014, 11:42:13
Program Size: Code=27312 RO-data=560 RW-data=216 ZI-data=1728
Buradaki RW mi? Yani benim programım 216 byte mı yer kaplamış ? Keil'in 32kB sınırlaması sanırım Code kısmı için geçerli...
mesaj birleştirme:: 18 Şubat 2014, 11:44:04
Proje klasörümde asm kodları yok :o
Assembler source var bi tek oda .s dosyası.
Hocam,
yazdığın kodun;
Rom'da kapladığı alan=Code+RO-Data+RW-Data
Ram'de kapladğı alan=RW-Data+ZI-Data
Yani sizin kodların;
Rom'da Kapladığı alan=27312+560+216=28088 byte
Ram'de Kapladığı alan=216+1728=1944 byte
Alıntı yapılan: z - 18 Şubat 2014, 11:32:33
R/W data kısmında görebilirsin.
Derleme ardından keil bir rapor verir.
Program Size: Code=XXXX RO Data: YYYY RW Data ZZZZ ZI Data WWWW
XXXX byte Romda program kodu var demek.
YYYY byte Romda veri var demek. (Romda tutulan sabit değerler, tablolar vs)
ZZZZ byte Ram kullanmışsın (değişkenler için) (Stack ve Heap alanı hariç)
WWW byte. Ramda değişkenler haricinde Stack, Heap alanı vs
Alıntı yapılan: yamak - 18 Şubat 2014, 12:00:46
Hocam,
yazdığın kodun;
Rom'da kapladığı alan=Code+RO-Data+RW-Data
Ram'de kapladğı alan=RW-Data+ZI-Data
Yani sizin kodların;
Rom'da Kapladığı alan=27312+560+216=28088 byte
Ram'de Kapladığı alan=216+1728=1944 byte
Hocam şimdi benim 32kB flash ram li çipim Keil raporuna göre Code = 32kB olduğunda tamamen dolmuş mu olacak?
Sadece Code değil
Code+RO-Data+RW-Data=32 kb olduğunda dolmuş olacak.
Code + RO Data = 32K olması lazım.
İşler hepten zora girdi ozaman. Hafızayı etkin kullanma tekniklerini araştırmam lazım. Keil haricinde Kod optimizasyonu yapmam lazım. :(
Optimizasyonu size tipine ve 3 seviyesine çıkar.
Bakalım ne olacak?
Optimizasyon Level 3
Program Size: Code=23256 RO-data=560 RW-data=204 ZI-data=1732
Alıntı yapılan: z - 18 Şubat 2014, 12:14:30
Code + RO Data = 32K olması lazım.
Hocam RW-Data'nın da eklenmesi gerekmiyor mu?
@Mistek Code uzunluğu düşmüş işte. Optimizasyonu speed yerine size seçtiğinde işin görülecek.
@Yamak
Yok RW alanı neden eklensin o RAMla ilgili.
Keil'in deneme sürümü sadece ROMa yerleşecek veriler için 32K sınırı getiriyor.
Hocam RW-data alanı init edilmemiş değişkenleri barındırdığı için bu değişkenlerin init edilmesi için gereken kod boyutu galiba Code kısmına eklenmiyor o sebepten dolayı da RW-data'yı da hesaba katmamız gerekiyor.Arm'ın kendi sitesinde de eklenmesi gerektiği söyleniyor.
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0056d/ch06s11s02.html (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0056d/ch06s11s02.html)
Alıntı yapılan: z - 18 Şubat 2014, 13:31:33
@Mistek Code uzunluğu düşmüş işte. Optimizasyonu speed yerine size seçtiğinde işin görülecek.
Speed, Size bunlar nereden değiştiriliyor ? Ben sadece işaretli yeri değiştirerek level atlatıyorum.
Default olarak Level 0 da kullanıyorum. En son level 3 yaptım.
(http://s7.postimg.cc/xjkzp9ph3/Ekran_Al_nt_s.jpg) (http://postimg.cc/image/xjkzp9ph3/)
@Yamak
Bugüne kadar yanlış biliyormuşum. Evet dediğin gibiymiş. ROM=Code + RO Data + RW Data
Optimizasyon Level altında Optimization for time kutusu var. Bunda çentik varsa kaldır.
Bir çentikli derle bir de çentiksiz aradaki farkı göreceksin.
Evet şimdi oraya tik atınca böyle oldu.
Program Size: Code=25504 RO-data=560 RW-data=204 ZI-data=1732 ,
Tiksiz kullanıyorum.
Program Size: Code=23256 RO-data=560 RW-data=204 ZI-data=1732
Alıntı yapılan: z - 18 Şubat 2014, 14:05:39
@Yamak
Bugüne kadar yanlış biliyormuşum. Evet dediğin gibiymiş. ROM=Code + RO Data + RW Data
Optimizasyon Level altında Optimization for time kutusu var. Bunda çentik varsa kaldır.
Bir çentikli derle bir de çentiksiz aradaki farkı göreceksin.
Hocam ben de sizin bildiğiniz gibi biliyodum. Öğrenince şaşırdım ben de
Bende teşekkür ederim, hiç bilmiyordum şimdi sizlerden doğrusunu öğrenmiş oldum.