Gömülü Yazılım Tasarlama


11

Bir RTOS kullanarak gömülü yazılım programlamaya başlıyorum ve zaten masaüstü uygulamaları için bir geliştirici olduğum için, Gömülü yazılımı Etkinlik Diyagramları, Sıra Diyagramları, Kullanım Durumları gibi UML diyagramlarını kullanarak modellemenin nasıl bir şey olduğunu merak ettim.

Gömülü yazılım UML kullanılarak tasarlanmış mı, masaüstü uygulamalarında olduğu gibi mi? En iyi seçenek mi yoksa daha iyi bir seçenek mi? Bazı örnekler alabilir miyim?

Bunu yapan belirli bir araç var mı?


8
Gömülü uygulamalar hakkında kesinlikle özel bir şey yoktur. Özel olan kaynak kısıtlı uygulamalardır , bu tür kısıtlamalardan en yaygın olanı zamanlama kısıtlamalarıdır, örneğin zor gerçek zamanlı gereksinimlerdir. Bize başvurunuzla ilgili gereksinimler hakkında daha fazla bilgi verirseniz, size özel bir cevap vermek için bir sorun olabilir.
Wouter van Ooijen

3
@ Wouter'ın kaynak kısıtlı uygulamalar hakkındaki yorumlarına tamamen katılıyorum, ancak çağrıları engellemenin kabul edilen bir uygulama olduğu yumuşak bir programlı masaüstü geliştirme ortamı ile RTOS kullanımı ile ilişkili belirli tasarım nüansları olduğuna inanıyorum.
HikeOnPast

1
Gömülü sistemlerin aşırı mühendisliğine dikkat edin. Ayrıca bkz. "Kralın Ekmek Kızartma Makinesi" ee.ryerson.ca/~elf/hack/ktoast.html
drxzcl

2
@drxzcl - Katılmıyorum. İlk olarak, alan nitelikli yazılım tasarlarken çok fazla dikkat edebileceğinizi düşünmüyorum . İkincisi, Mühendisin Kral Ekmek Kızartma Makinesi'ne yaklaşımı, çok fazla ekmek yakılmasının sebebidir. Çoğu ekmek kızartma makinesi aslında önemsiz olmayan bir iş için çok basittir.
Rocketmagnet

1
@Cassio: Ben Wouter'la birlikteyim. Sorunu kendiniz analiz etmeniz ve ardından uygun olduğunu düşündüğünüz sistemi kullanarak önemli parçaları haritalamanız gerekir. Sorunu analiz etmeden önce bir temsili seçmeyle ilgili sorun, sorunu belirli bir şekilde görmeye takılıp kalmanızdır. UML, köklerini kurumsal yazılımda barındıran bir temsildir ve kurumsal yazılım gibi gömülü yazılımlar tasarlamak istemezsiniz.
drxzcl

Yanıtlar:


8

Adı şu anda kaçan bir şirket tarafından popüler hale getirilen UML'ye Gerçek Zamanlı uzantılar var. Birkaç yıl önce üzerinde bir kağıt yaptığımı hatırlıyorum. Bruce Powell Douglass, UML kullanarak gömülü sistemleri modelleme konusunda birkaç kitap yazdı, ancak şirketi düşündüğüm kişi değil.

Bununla birlikte, Wouter'ı yankılamak için, gömülü yazılım hakkında özel bir şey yoktur. Pentium sınıfı işlemcilerde çalışan bir sistem için her gün gömülü yazılım yazıyorum; UML oldukça uygulanabilir. Ayrıca, kontrol yazılımının birçok yönünün zaman içinde UML'ye eklendiğini unutmayın: Senkron Şemalarda yanıt süresiyle birlikte senkron veya asenkron olayları belirtmek için sözdizimi vardır, Petri net türü davranışı Etkinlik Diyagramları, Statecharts modeli davranışında daha da iyi bulunabilir Durum Diyagramları vb.

OTOH, birçok kişi Gömülü yazılımı Yapılandırılmış Tasarım ve Veri Akışı kavramlarını kullanarak modellemeyi tercih eder. Her şey tasarladığınız sistem türü ve neyin en iyi çalıştığı ile ilgilidir.


Teşekkürler @lyndon. Ancak gömülü yazılımı her gün nasıl modellersiniz? Etkinlik Diyagramlarının, Durum Makinelerinin ve Sıra Diyagramlarının hile yapacağını düşünüyor musunuz? Aslında ne tasarlayacağım kavramını arıyorum, o zaman gömülü sistemler için bir tane varsa, Tasarım Belgesine eklenecek şemalar nelerdir.
Cassio

Gördüğüm en sık yapılar, günlük kullanım için Durum diyagramları / durum çizelgeleri ve Sıra diyagramlarıdır. Dürüst olmak gerekirse, Sınıf diyagramlarından daha fazla yararlanabileceğimizi düşünüyorum, ama insanların sadece büyük “tanrı nesneleri” yaratma eğilimi olduğunu düşünüyorum. Oh: düşündüğüm şirket Artisan Software. Bu bağlantı bilgilendirici olabilir: werner.yellowcouch.org/Papers/rtuml/index.html#toc7
lyndon

5

Bir RTOS'a dönerken, genellikle her birinin son teslim tarihlerini zamanında karşılayabilmesi veya kaynakları güvenli bir şekilde paylaşabilmesi için en uygun şekilde planlanması gereken birçok eşzamanlı görevi olan bir uygulama ile uğraşıyoruz. Seçtiğiniz RTOS çerçevesi bir görev zamanlayıcı uygular ve işiniz (genellikle) bu bireysel görevleri belirli bir özellik kümesiyle (nokta, öncelik vb.) Yazmak ve daha sonra zamanlayıcıya teslim etmektir. Dolayısıyla dokümantasyon için benim atacağım yaklaşım her bir görevi dikkatle belgelemek olacaktır.

Çoğu gömülü yazılım ve bildiğim kadarıyla RTOS'ların çoğu nesne yönelimli bir dilde yazılmamıştır ve bu nedenle örneğin bu sınıf diyagramlarına yönelik birçok şeyden yararlanamayabilir.

Ancak RTOS görevlerinizi belgelediğinizde, görevi iyi tanımlayan herhangi bir diyagram büyük yarar sağlayacaktır. Her görev için bir dizi diyagramının örneğin çok yardımcı olabileceğini hayal ediyorum. Bunun yanı sıra, periyodu / sıklığı, önceliği, kullanabileceği paylaşılan kaynaklar, ön yeterlilik gereksinimleri gibi zor gereksinimlerini de belirtebilirsiniz. Ayrıca RTOS'u ve belki de bir durumu nasıl yapılandırdığınızı belgelemek de önemli olabilir. programlama algoritması.

İstediğiniz gibi bu tavsiyeden herhangi birini alın, üniversite günlerimden beri RTOS'larla uğraşmadım ve işi gerçekten "belgelemedim".


Teşekkürler @JonL. Peki, güzel bir Tasarım Belgesine sahip olmak için sadece uygulamamla ilgili görevleri tasarlamam gerekir mi? Ayrıca, bir programlama algoritmasına çok aşina değilim, asla onunla uğraşmak zorunda kalmadım. RTEMS kullanıyorum.
Cassio

@Cassio, sana bir şey yapmanı söylemiyorum, bu sana bağlı. Sadece gerekli olanı yapmaya çalışın. RTOS'unuza aşina değilseniz, önce ilk olarak kullanmaya başlamanız ve onu nasıl kullanmanız gerektiğine başlamak için iyi bir yer olacağını düşünüyorum. Ardından, etrafındaki görevlerinizi tasarlamaya başlayabilirsiniz.
Jon L

Evet, hala RTOS özelliklerini tanıyorum. Ve önerilen yaklaşım için teşekkürler! Yapacağım! Daha önce söylediğim gibi, gömülü yazılımda yeniyim, neyin gerekli olduğundan gerçekten emin değilim. Gömülü Yazılım Mimarisi veya Tasarım Belgesine sahip olmak güzel olurdu. Bunlardan birine sahip misiniz?
Cassio

“RTOS'ların çoğu nesne yönelimli bir dilde yazılmamıştır”. Ancak, gerçek zamanlı modelleme ve uygulama konusunda bir kurs için C ++ 'da basit (önleyici olmayan) bir RTOS kullanıyoruz.
Wouter van Ooijen

5

Modelleme tamamen

  • uygulamanızda hangi yönün zor ve karmaşık olduğunu bilmek,

  • bu yönüne uygun bir modelleme aracı / dil / soyutlama / konvansiyon / gösterim bulma

  • bu yönü tasarlamak

Bu nedenle, hiçbir modelleme aracı / yaklaşımı / vb. Tüm durumlar için uygun değildir. Bir uydu, muhtemelen birden fazla işlemciye sahip gerçek zamanlı bir çoklu görev sistemi olacaktır. Görev yapısı diyagramları, cinsel yolla bulaşan hastalıklar ve dizi diyagramları muhtemelen yararlıdır (sadece birkaçını belirtmek için). Eğer proje C'de yapılırsa, bir sınıf diyagramı daha az kullanışlı olur (eğer çok faydalı olduğu ortaya çıkarsa, C seçimi muhtemelen yanlıştır). UseCases'i çok sevmiyorum ve an-sich'in hiçbir uydusu yok. Kullanım durumları, sisteminizle ilgili gereksinimleri teknik olmayan bir kullanıcıyla tartışmak istediğiniz bir durumda en uygun olanlardır. Bir uydu projesinde bulunduğunuz durum buysa, bir şeyler ters gitti.


Teşekkürler @Wouter. Benim için yeni bir konsept sundunuz: Görev Yapısı Diyagramları, güzel! Öyleyse, C cinsindendir. UseCases değilse, tüm gereksinimleri içeren bir belge için neye sahip olabilirsiniz?
Cassio

IMO, yalnızca test durumlarınızı dayandırmak için tanımlanabilir, az ya da çok tek kullanımlık gereksinimlerin bir listesine ihtiyacınız vardır. Benim için UseCases sadece böyle bir listeye ulaşmak için bir yöntemdir. Bazı durumlarda iyi bir yöntem.
Wouter van Ooijen

1

Mekana uygun bir şey tasarlamadım. Ancak bir Savunma Bakanlığı (DoD) havacılık taşeronu için çalıştım ve tasarımlarımın çoğu uçuşa uyguntu. Tasarımlarınızla ilgili çok fazla belge gerektirirler ve tam olarak görmek istediklerini ayrıntılandıran Veri Öğesi Açıklamaları (DID) sağlarlar.

"Başlıklardaki Kelime" alanına "yazılım" yazar ve Gönder'i tıklarsanız, gerekli olabilecek belgelerin tüm DID'lerini görmek için DoD ASSIST Hızlı Arama'yı kullanabilirsiniz. (Bir DoD sitesinin sertifika güvenlik uyarısı verdiğini komik buluyorum, ancak sizi temin ederim, güvenli).

Özellikle bir Tasarım Belgesi hakkında sorduğunuz için, burada Yazılım Tasarım Açıklaması (SDD) DID. Tasarımın her bir parçasını tanımlamak için kelimelerin kullanımını vurgularlar. Ancak, UML, Durum Diyagramları, akış şemaları, sözde kod vb.

Diğerlerinin belirttiği gibi hangi modelleme yöntemini seçtiğiniz, tasarımınıza bağlıdır. Ancak havacılık yazılımı için bir DID görmenin, projeniz alanla ilgili olduğu için Tasarım Belgenizi yazmanıza yardımcı olabileceğini düşündüm.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.