Picproje Elektronik Sitesi

DERLEYİCİLER => Diğer Derleyiciler => KEIL => Konuyu başlatan: mistek - 18 Şubat 2014, 01:16:17

Başlık: Keil'de veri tipleri ve boyutları
Gönderen: mistek - 18 Şubat 2014, 01:16:17
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.
Başlık: Ynt: Keil'de veri tipleri ve boyutları
Gönderen: z - 18 Şubat 2014, 02:04:21
Nasil tanimliyorsun?
Başlık: Ynt: Keil'de veri tipleri ve boyutları
Gönderen: mistek - 18 Şubat 2014, 08:13:18


#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;

}



Başlık: Ynt: Keil'de veri tipleri ve boyutları
Gönderen: JKramer - 18 Şubat 2014, 09:27:05
Byte mı bit'mi? Nereden bakıyorsunuz kapladığı yere? Optimizasyon kapalı mı?
Başlık: Ynt: Keil'de veri tipleri ve boyutları
Gönderen: mistek - 18 Şubat 2014, 09:29:50
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
Başlık: Ynt: Keil'de veri tipleri ve boyutları
Gönderen: z - 18 Şubat 2014, 11:00:08
code yazan kisim program kodlari.



Başlık: Ynt: Keil'de veri tipleri ve boyutları
Gönderen: Burak B - 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.
Başlık: Ynt: Keil'de veri tipleri ve boyutları
Gönderen: mistek - 18 Şubat 2014, 11:14:21
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?
Başlık: Ynt: Keil'de veri tipleri ve boyutları
Gönderen: Burak B - 18 Şubat 2014, 11:30:43
Derlediğiniz kodun asm çıktısına bakın.
Başlık: Ynt: Keil'de veri tipleri ve boyutları
Gönderen: 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

Başlık: Ynt: Keil'de veri tipleri ve boyutları
Gönderen: 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

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ı.
Başlık: Ynt: Keil'de veri tipleri ve boyutları
Gönderen: yamak - 18 Şubat 2014, 12:00:46
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
Başlık: Ynt: Keil'de veri tipleri ve boyutları
Gönderen: mistek - 18 Şubat 2014, 12:02:50
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?
Başlık: Ynt: Keil'de veri tipleri ve boyutları
Gönderen: yamak - 18 Şubat 2014, 12:07:14
Sadece Code değil
Code+RO-Data+RW-Data=32 kb olduğunda dolmuş olacak.
Başlık: Ynt: Keil'de veri tipleri ve boyutları
Gönderen: z - 18 Şubat 2014, 12:14:30
Code + RO Data = 32K olması lazım.

Başlık: Ynt: Keil'de veri tipleri ve boyutları
Gönderen: mistek - 18 Şubat 2014, 12:23:14
İşler hepten zora girdi ozaman. Hafızayı etkin kullanma tekniklerini araştırmam lazım. Keil haricinde Kod optimizasyonu yapmam lazım. :(



Başlık: Ynt: Keil'de veri tipleri ve boyutları
Gönderen: z - 18 Şubat 2014, 12:39:21
Optimizasyonu size tipine ve 3 seviyesine çıkar.

Bakalım ne olacak?
Başlık: Ynt: Keil'de veri tipleri ve boyutları
Gönderen: mistek - 18 Şubat 2014, 12:44:46
Optimizasyon Level 3

Program Size: Code=23256 RO-data=560 RW-data=204 ZI-data=1732 
Başlık: Ynt: Keil'de veri tipleri ve boyutları
Gönderen: yamak - 18 Şubat 2014, 13:27:10
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?
Başlık: Ynt: Keil'de veri tipleri ve boyutları
Gönderen: 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.

@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.



Başlık: Ynt: Keil'de veri tipleri ve boyutları
Gönderen: yamak - 18 Şubat 2014, 13:50:13
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)
Başlık: Ynt: Keil'de veri tipleri ve boyutları
Gönderen: mistek - 18 Şubat 2014, 13:58:36
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/)
Başlık: Ynt: Keil'de veri tipleri ve boyutları
Gönderen: 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.
Başlık: Ynt: Keil'de veri tipleri ve boyutları
Gönderen: mistek - 18 Şubat 2014, 14:08:25
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 
Başlık: Ynt: Keil'de veri tipleri ve boyutları
Gönderen: yamak - 18 Şubat 2014, 14:14:16
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
Başlık: Ynt: Keil'de veri tipleri ve boyutları
Gönderen: mistek - 18 Şubat 2014, 14:20:19
Bende teşekkür ederim, hiç bilmiyordum şimdi sizlerden doğrusunu öğrenmiş oldum.