Algoritma Nedir ?

Başlatan muhittin_kaplan, 06 Ekim 2013, 10:46:36

muhittin_kaplan

Bu arkadaşların Hafızadaki Durumu Nasıl Olur ?

AsHeS


union paylas{
                float f;
                int   i;
                char  kr;
          };


Bu arkadaş hafızada 4 byte tutar en büyük elemanı int veya floattır.
(Keil C Arm Compiler:http://www.keil.com/support/man/docs/armccref/armccref_Babfcgfc.htm)
  struct paylas{
	     float f;
             int i;
             char kr;
          };

Bu ise eğer packed edilmişse 4+4+1=9 byte tutmaktadır.
Arm adresleri 32-bit veri tutuyor diye biliyorum eğer öyleyse packed edilmemişse 4+4+4=12 byte olacaktır. Not:Burayı şimdilik çok kafanıza takmayın.

z

ARM işlemcide değişkenler boyutlarına göre ramda özel adreslere yerleştirilirler.

Char değişkenler için herhangi bir sınırlama yok.
Short değişkenler daima çift adreslere yerleşirler.
Integer değişkenler ise daima 0 dahil 4 ün katları adreslere yerleştirilirler.

C buna dikkat eder.

Değişkenler bu sıralamaya uymadan rama yerleştirilirse rama erişim performansı çok düşer hatta bazı cpu komutları fault ile sonuçlanır.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

AsHeS

Alıntı yapılan: z - 18 Kasım 2013, 22:01:17
ARM işlemcide değişkenler boyutlarına göre ramda özel adreslere yerleştirilirler.

Char değişkenler için herhangi bir sınırlama yok.
Short değişkenler daima çift adreslere yerleşirler.
Integer değişkenler ise daima 0 dahil 4 ün katları adreslere yerleştirilirler.

C buna dikkat eder.

Değişkenler bu sıralamaya uymadan rama yerleştirilirse rama erişim performansı çok düşer hatta bazı cpu komutları fault ile sonuçlanır.
O zaman struct packed etmek tehlikeli midir hocam ARM'da ?

z

Tehlikeli degil. C structure uyelerini bahsettigim kurala gore yerlestiriyor.

Bu durumda ornegin char short int siralamasi varsa

char, bos char, short, int seklinde dizilis yapiyor. Yani kurali bozan adreslere kullanilmayan char karakterler yerlestiriyor. Bu durumda structure boyu tek tek degiskenlerin uzunluklari toplamindan daha fazla yer kapliyor.

Dolayisi ile herhangi bir tehlike yok.

Bu siralamayi progma direktifi ile degistirebiliyorduk ama neydi hatirlamiyorum.

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

AsHeS

Alıntı yapılan: z - 18 Kasım 2013, 22:44:51
Tehlikeli değil. C structure uyelerini bahsettigim kurala gore yerlestiriyor.

Bu durumda ornegin char short int siralamasi varsa

char, bos char, short, int seklinde dizilis yapiyor. Yani kurali bozan adreslere kullanilmayan char karakterler yerlestiriyor. Bu durumda structure boyu tek tek degiskenlerin uzunluklari toplamindan daha fazla yer kapliyor.

Dolayisi ile herhangi bir tehlike yok.

Bu siralamayi progma direktifi ile degistirebiliyorduk ama neydi hatirlamiyorum.
#pragma pack(1)  değil anladığım kadarıyla. :)

z

Oyle bir sey yok derken?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

AsHeS

Alıntı yapılan: gerbay - 18 Kasım 2013, 23:54:39
@z


Oyle birsey yok. Packed struct yapip istediginiz sirada dizip gorun..

Align etmek tüm platformlarda performans artirir. 32-bit platforma 4-byte align etmek daha uygundur, 16-bit platformda 2-byte a..
gerbay hocam sonuç olarak #pragma pack(1) structı birbirine yapıştırıyor mu ?

z

AsHes

Sanirim Gerbayin itiraz sebebini anladim.

Benim yaptigim aciklama kuru structure kurulumu yapilirsa olan duruma aitti. Aciklamamin sonunda "Bu siralamayi progma direktifi ile degistirebiliyorduk ama neydi hatirlamiyorum" dedigim kisim (aradaki fazlalik ve kullanilmayan alanlari kaldirirsaniz) bahsettiginiz paketleme durumu olusuyor.

Fakat bu durumda bu tip "structure"lara erisirken dedigim performans sorunu ortaya cikiyor. Daha da kotusu bu tip align edilmemis alanlara bazi makine kodlari ile erisemiyorsunuz.
Bu C acisindan sorun degil cunku C zaten bu durumlarda o tip komutlari kullanmaz.

Fakat  bazi ozel cpu komutlariyla bu alanlara asm ile erismek isterseniz o zaman makine fault durumuna dusecektir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

AsHeS

Ne işte ne de hobi olarak ASM kullanmadığıma sevindim o zaman :).

z

Programi C ile de yazsan ASM ile de yazsan sonucta CPU nun VDD sine - , VSS'sine + voltaj verirsek CPU bozulur. :)

"ASM"de hersey klavyeyi parmaklayanin sorumlulugunda.



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

muhittin_kaplan

Kaç kişi bir fonksiyonları yazarken Fchart kullanıyor ?
bu akış diyagramlarının kaç çeşidini biliyoruz ?
android için geliştirilmiş app inventör bir çeşit akış diyagramı yöntemini mi kullanıyor ?

z

Tasarim asamasinda yazilmak istenen fonksyon karmasiksa, pek cok durum arasinda gecis yapilacaksa akis diyagrami cizmeden zaten kod yazamazsin.

Fakat gecis durumlari aklinda tutabilecegin kadar az sayida ise akis diyagrami zaten kafanda olusmus demektir.

Aslini sorarsan program yazarken beynimizdeki pencerelerden birisinde akis diyagramini olusturuyoruz. Bir diger pencerede ise bu akis diyagramina uygun dil kodlamasini yapiyoruz. Fakat proje karmasiksa beynimizdeki akis diyagram penceresinde stack overflow vs oldugu icin mecburen kagit kaleme donuyoruz.

Bilgisayar programlari kullanarak bu gune kadar hic akis diyagrami cizmedim. Dokumantasyon icin gerektiginde ise "paint"de resim cizer gibi akis diyagramlari olusturdum.

Eger bu is icin PC programi kullanirsam bana ne gibi kolayliklar saglar?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mistek

Normalde @z hocanın dediği gibi kafada kalıyorsa kağıt kaleme pek ihtiyaç olmuyor. Bana göre çok karmaşık gelen bir projede akış diyagramı kullandım kodlarken inanılmaz kolaylık sağladı. Bu iş için microsoft Visio kullanıyorum çok kullanışlı bir program.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

muhittin_kaplan

ben visio yu veritabanı tasarımı yaparken kullanıyordum. tablolar arası ilişki, wievler vb arasındaki sorgulamalar falan filan sorasında büyük kolaylık sağlıyor.