SORU
1 Mayıs 2009, Cuma


Herhangi bir nedenle gömülü geliştirme için C yerine C var mı acaba?

Soru

Donanım C ve benim C89 iki Derleyiciler var

Polimorfizmi (durumda fonksiyonun parametre değişkeni önlemek için) olmadan sınıflarıyla ama C kullanmayı düşünüyorum. Kullanmak istiyorum ana nedenlerinden C:

  • “” Makro tanımları yerine. satır içi işlevleri kullanmayı tercih ederim
  • Clutter kod ad önekleri olarak kullanmak istiyorum.
  • C bit türü daha güvenli esas şablonlar ve ayrıntılı döküm yüzünden görüyorum.
  • Gerçekten aşırı yüklenmiş fonksiyonlar ve kurucular (otomatik döküm için kullanılır) gibi.

Çok sınırlı donanım (RAM 4 KB) geliştirirken herhangi bir nedenle C89 sopa ile görüyor musun?

Sonuç

Cevaplarınız için teşekkür ederim, çok yardımcı oldular!

Konuyu enine boyuna düşündüm ve C ağırlıklı çünkü sadık olacağım:

  1. Daha kolay C gerçek kod tahmin etmek çok zordur ve bu sadece ram 4kb varsa gerçekten önemlidir.
  2. Benim takım C geliştiricileri ağırlıklı olarak oluşur, ileri C özellikleri sık kullanılan olmayacak.
  3. C derleyici satır içi işlevleri (C89) için bir yol buldum.

Çok iyi cevaplar verdiğiniz gibi bir cevap kabul edilemez. Ne yazık ki beni en çok düşündüren bir cevap seçeceğim o yüzden bir wiki oluşturmak ve bunu kabul edemem.

CEVAP
1 Mayıs 2009, Cuma


Bir içinçokRAM 4KB gibi kaynak kısıtlı hedef, kolayca saf ANSI C bir uygulama haline geri taşıdık olamaz çaba işlemeden önce bazı örnekleri ile suları test ediyorum.

Gömülü C çalışma grubu dilinin standart bir alt kümesi ve standart kütüphane standart bir alt teklif yaptı. C Kullanıcı Günlüğü öldüğünde bu çabanın parça, ne yazık ki kaybettim. Wikipedia, bir madde var gibi ve committee hala var olduğunu görünüyor.

Gömülü bir ortamda, gerçekten bellek ayırma konusunda dikkatli olmak zorunda. Bu bakımı uygulamak için, 0* *küresel ve kullanılan bir şey değil biliyorsun ki o bile bağlantılı olabilir mi böyle bir şey için arkadaş tanımlamanız gerekebilir. Diğer taraftan new yerleştirme dikkatli, kararlı, iş parçacığı için güvenli ve gecikme garantili ayırma şeması ile birlikte kullanıldığında arkadaşın olması muhtemeldir.

İnlined işlevleri ilk başta gerçek işlevleri olmalıydılar yeterince büyük olmadıkları sürece çok fazla sorun neden olmaz. Tabii ki bu onların aynı sorun vardı yerine makrolar.

Şablonları da, kendi örnekleme amok çalıştığı sürece bir sorun neden olmaz. Herhangi bir şablon için kullanmak, üretilen kodunuz yeterli ipucu olabilir () kullanmak istediğiniz tek örneklemesi oldu emin olmak için Denetim.

Ortaya çıkabilecek bir diğer sorun, hata ile uyumluluk. Aksi takdirde kullanılabilir donanımsal bir hata ayıklayıcı orijinal kaynak kodu ile etkileşim için çok sınırlı bir destek olması için alışılmadık bir durum değil. Eğer etkili bir şekilde montaj hata ayıklama gerekiyorsa, o zaman C ilginç adı bozma görevi için ekstra karışıklık ekleyebilirsiniz.

RTTI, dinamik atmalarını, çoklu kalıtım, ağır polimorfizmi ve özel durumlar kullanımları için çalışma zamanı maliyet miktar. Bu özelliklerden bir kaçı ise kullanılan tüm program boyunca bu maliyet düzeyinde, diğerleri sadece onlara gereken dersleri ağırlık artışı. Farkı biliyor, ve gelişmiş özellikleri akıllıca fayda analizi/en azından üstünkörü bir maliyeti tam bilgi ile seçin.

Küçük gömülü bir ortamda ya da doğrudan gerçek zamanlı bir çekirdek bağlama ya da doğrudan donanım üzerinde çalışan olacak. Her iki şekilde de, çalışma zamanı başlatma kodunuzu C işleyen emin olmak için ihtiyacınız olacak, belirli bir başlangıç işleri doğru. Bu olabilir gibi basit olduğundan emin olmak için kullanma hakkına linker seçenekleri, ama madem ortak için doğrudan kontrolü üzerinde kaynak için güç sıfırlama giriş noktası, ihtiyacın olan bir denetim ettiğini ve bunun da belli oluyor her şey. Üzerinde çalıştığım ColdFire bir platformda, örneğin, dev araçlar bir CRT0 ile birlikte.C olduğunu S modülü mevcut başlatıcılar ama yorum. Eğer kutuda kullanmış olsaydı, hiç çalışacak olan genel nesneler tarafından hayretler olurdum.

Ayrıca, içinde gömülü bir ortam olduğunu sık sık başlatmak için gerekli donanım aygıtları önce onlar kullanılabilir, ve eğer hiçbir işletim sistemi ve boot loader, o zaman size bir kod yok. Genel nesneler için kurucular çalıştırmak olduğunu hatırlamak gerekiröncemain() Yerel CRT0 değiştirmek gerekir sözde.Donanım başlatma halletmek için (veya eşdeğer)önceküresel denilen kendilerini kurucular. Belli ki, main() üst tarafa geç.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 10 Daughters, 2 Sons

    10 Daughters

    10 Mart 2009
  • Apple&Tech Reviews & Giveaways

    Apple&Tech R

    12 Temmuz 2008
  • karneson

    karneson

    23 Temmuz 2006