Keil'de veri tipleri ve boyutları

Başlatan mistek, 18 Şubat 2014, 01:16:17

mistek

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.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

z

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mistek


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

}

boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

JKramer

Byte mı bit'mi? Nereden bakıyorsunuz kapladığı yere? Optimizasyon kapalı mı?

mistek

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
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

z

#5
code yazan kisim program kodlari.



Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Burak B

#6
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.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

mistek

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?
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

Burak B

Derlediğiniz kodun asm çıktısına bakın.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

z

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

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mistek

#10
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ı.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

yamak

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

mistek

#12
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?
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

yamak

Sadece Code değil
Code+RO-Data+RW-Data=32 kb olduğunda dolmuş olacak.

z

Code + RO Data = 32K olması lazım.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com