Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

Neden CCS?

Başlatan mihri, 09 Mart 2008, 17:10:09

mihri

CCS bence Hi-Tech'in yanında canavar gibi derleyici. Aynı kodu her ikisinde de derledim Hi-Tech CCS den 10 kat fazla ROM 2 kat fazla RAM harcadı.

Hi-Tech ile;



CCS ile;



Sonra dedim ki acaba Hi-tech geniş çaplı kodlarda mı daha avantajlı oluyor?

Hi-Tech ile;



CCS  ile;



CCS 400 byte daha az ROM ile yine önde.

CCS'nin tek olumsuz yanı kullanıcıyı donanımdan uzaklaştırması. Bunun için derleyicinin hazır kodlarını pek kullanmadan kod yazmaya çalışın.
Birde ANSI var tabi, bence mikrodenetleyicide ANSI diye bişey yok. M.denetleyicilerde Rom bellek az, RAM bellek az bu yüzden en verimli derleyici hangisi ise onu kullanacaksın. Bu derleyici C derleyici olsun yeter.
"Eppur si muove!"

Klein

Sprintf kullanmak , derleyicinin iyi yada kötü olduğunu sınamak için kullanılabilecek iyi bir fonksiyon değil.  Sprintf in kapladığı ram ve rom alanı  bu konuda yeterli fikir vermeyebilir. Sprintf standart bir fonksiyon değil. Yani kullandığın kütüphaneye göre değişiklik gösterebilir. Bazı derleyiciler printf ailesi için onlarca farklı kütüphane ile geliyor. Rom alanınız az ise kısıtlı printf kullanarak , tasarruf ediyorsunuz. Ama örneğin floating point işlemler yapamıyorsunuz. Ya da  floating point yapabiliyorsunuz ama 64 bit yapamıyorsunuz. Bu örnekler çoğaltılabilir.  Bence hiç printf , scanf , ve kütüphanedeki hazır fonksiyonların hiçbirini kullanmadan yazılmış bir programı derleyip öyle deneyin. Ama dikkat edin program kısa olmasın. Çünkü Derleyicide seçili opsiyonlara , başlatma kodlarına göre de üretilen kod büyüklüğü bir miktar farklılık gösterirler. Örneğin derleyicinin biri varsayılan özellik olarak açılışta tüm RAM alanını sıfırlıyodur. ve bunun için kod biraz büyük oluyodur. Diğeri ise bunu yapmadığı için kod daha küçük olacaktır.  Tabi bunları sizin kullandığınız derleyiciler böyle yapıyor anlamında söylemiyorum. Sadece genel bilgi olarak söylüyorum.

Derleyicinin iyi olup olmaması hakkında , muhakkak ki ürettiği kodun büyüklüğüne bakılarak bir fikir sahibi olunabilir.
Ama bence :
Kodun büyüklüğünden daha önemli parametreler var.  Bence bunlardan en önemlisi Stack yönetimi. Bir diğeri Artık son Ram sınırlarını zorladığınızda , yerel değişlkenleri nasıl yönetiyor.  Değişken değerleri birbirinin üzerine yazılıyormu , ya da  içice geçiyormu. Bir diğeri pointer operasyonlarını ne kadar iyi yönetiyor. Eğer bir derleyici bu konularda iyi ise  sadece kod alanı yüzünden bu derleiciden vazgeçmem.
Eğer sığamıyorsak aynı işlemcinin daha yüksek belleğe sahip modeline geçmek kolay. Ama yukarıda bahsettiğim konularda yetersiz ise , ozaman belki sorunu bile anlayamadan birdaha dönülmez hatalara imza atabiliriz.
Eğer iki derleyici de bu işlerde aynı ustalığa sahip iseler bu durumda muhakkak ki  kod büyüklüğü seçimi etkileyen parametre olacaktır.

mihri

Peki bu söylediğiniz noktalarda tecrübeniz oldumu her iki derleyiciyi örneklerle karşılaştırabiirmisiniz ?
"Eppur si muove!"

Klein

PIC kullanmıyorum. Bu yüzden bu derleyicilerle böyle bir çalışmam olmadı. Farklı işlemcileri için farklı derleyiciler kullanıyorum uzun zamandır. Ama özellikle iki derleyiciyi yanyana koyup bu nasıl şu  nasıl diye bir denemem olmadı. Sadece ürettikleri kod bütyüklüğü açısından MCS51 ailesi için KEIL ve FRANKLIN derleyicilerini böyle bir teste soktum. İkisi de aynı çıkmıştı. Diğer kriterler açısından böyle bir test yapmadım. çünkü tek bir tette herşeyi göremiyorsunuz.  Çalıştıkça , zaman içerisinde hataları , eksikleri vs... görüp başka bir derleyiciye geçtiğim ve o derleyicide de başka sorunlar görüp yine başkasına geştiğim ya da eski derleyicime döndüğüm olmuştur.

mihri

Evet aslında benimde tam olarak demek istediğim bu, yani ille şu derleyici olsun, ille bu derleyici olsun demek pek doğru olmuyo ihtiyaç neyi gerektiriyosa o derleyiciyi kullanıcaksın.
"Eppur si muove!"

arslan74

Merhaba,

Bu daha öncede tartılmıştı.

Neden printf ve sprintf fonksiyonunda CCS tek bir sefer kullandığımızda diğer derleyicileri göre daha az kod üretiğine gelince.

Bir kere CCS de bu gercek bir fonksiyon değil. Derleyici o anda yazdığın koda göre bir fonksiyon üretiyor. Dolaysıyla bu fonksiyon yazdığın koda göre ve kullanım cokluğuna göre büyüklüğü değişebilir.

Ama sprintf ve printf Ansi-C uyumlu derleyicilerde gercek bir fonksiyondur. Bu fonksiyonunda bir büyüklüğü var. ortalama 2k bir bedel ödemek zorunda kaliyorsunuz. Bunu bir defa ödemez zorunda kaliyorsunuz. Tek bir fonksiyonu bir kaç değişik türlere göre çağırman olayı değiştirmez.

CCS ise iki fonksiyonun durumu biraz faklı. Zaten kendinizde verdiğiniz örnekte belli oluyor. Bu fonksiyonu bir kere çağırdığınızda ve sadece yazı yazdığınız için. const bir yazıyı const olmayan bir dizi atmak için strcpy() gibi fonksiyon çağrısına benzer bir kısa bir kod yazarak, cok daha az maliyetle işi kurtarır. Ama sprintf kullanımı artıkca ve değişik türlerde işin içine girdiğinde olay biraz farklı hal almaya başlar. Eğer sizin dediğiniz gibi olmuş olsaydı. O zaman ikinci kod içinde en az ilki kadar fark olmuş olması gerekirdi. Kendinizinde söylediği gibi bu sefer farkın azaldığınız görmüş oldunuz. Eğer üçüncü bir program yazdığınızda ve fonksiyon çarğırılarını artırdığınızda örneğin 10k uzunluğunda bir kod yazdığınızda. o zaman farklı kıyaslamanız doğru olacaktır. Ancak bu şeklide derleyicinin gercekten daha az kod üretiğini idda edebilirsiniz. Ama büyük bir ihtimal ile sizin kullandığınız derleyici belli bir kapasiten sonra Ansi-C derleyicilerin üretiği kodu gececektir.

Ayrıca iyi derleyicilerin optimizasyon ayarları vardır. Eğer pro kullanmiyorsanız bu optimizasyon devreye girmez, bu yüzden uzun bir kod yazar. Ama optimizasyonu devreye soktuğunuzda o zaman kodda gözle görülür büyük azalma olur.

Diğer arkadaşımızında dediği gibi kod uzunluğu derleyici tek bir kıyas olamaz. Ondan cok önemlisi bende derleyicisin doğru güvenilir bugsız kod üretmesi ondan katkat önemli. Az kod üretti ama doğru çalışmiyorsa hiçbir işe yaramaz. Ama kodu biraz uzun ama güvenebileceğim bir derleyici herzaman için tercih ederim.

Şu kesindir ki Hi-Tech, CCS göre cok daha az buglara sahiptir. Ben seveseve bu bedeli ödemeye hazırım, yeterki yazdığım kodu doğru düzgün derlesin.

Sıfır bugsiz hiçbir derleyici olmaz. Ama Hi-tech nelerde negibi bugları olduğu tesbit edilmiştir. Coğruda en son versiyonunda düzeltilmiş durumda dır. CCS yanlış hatırlamiyorsam 300-400$ civarındaydı. Orjinal Hi-Tech pro full paket ise 3000$ civarında olması gerekiyor. Bu farkı işletmeler boş yere verip de Hi-Tech almiyorlar. Büyük projelerde mutlaka Ansi-C derleyicilere ihtiyac var. Ama kücük ve bireysel projelerde bu ihtiyac azaliyor. Hata cok basid bir proje için fazladan bedel ödemek sorunda kaliyorsunuz. sizin verdiğiniz ilk örneğinizde olduğu gibi.


Selamlar

mcan

Ccs'nin dikkatimi çeken bir yönü çok hatasının çıkması.Bir sürü güncellemesi var ve hep olmadık hataları bulup düzenlemişler.Bir ara ccs ana sayfasında gezerken, yeni sürüm çıktığında nelerin düzeltildiğini okuduğumda bir önceki sürüm için ,genelde, "lan bu hatada yapılır mı?cık cık cık" dediğimi hatırlıyorum.

mihri

CCS RAM' silmiyo açılışta!!!
"Eppur si muove!"

semicon

CCS

çünkü ; built-in fonksiyonlar...

Erol YILMAZ

Arkadaşlar,
CCS veya bir başkası çok farklı derleyiciler.
Her derleyicinin kendine göre huyu-suyu var.
Standarda yakın olan var, Standart olmayanları var.
CCS de bu RAM boşaltma için #zero_ram var.
Şu sözü, birşeyi yapamadığım zaman hatırlamaktan büyük keyif almışımdır.  At sahibine göre kişner.