Zephyrnet Logosu

QNX için Tıbbi Cihaz Önyükleme Ekranı Oluşturma

Tarih:

QNX Tıbbi Cihaz Önyükleme Ekranı

Dünya çapındaki tüm büyük cihazlarda (tıbbi cihazlar dahil) olmasa da çoğunda bir tür önyükleme ekranı bulunur. Bu genellikle gösterişli ama bazen basit animasyon iki amacı yerine getirir. Birincisi, sadece iyi görünmesi, ayrıca şirketlerin kişiselleştirip markalarını da buna ekleyebilmesi. Ancak ikinci nedenin daha önemli olduğu söylenebilir; kullanıcıya cihazın çalıştığını ve halen başlangıç ​​aşamasında olduğunu bildirir.
Bu blog, bir önyükleme ekranının nasıl tasarlanacağını ve oluşturulacağını açıkladığı için oldukça teknik olacak.

Blogda özellikle POSIX uyumlu İşletim Sistemi (OS) QNX için bir önyükleme ekranı tasarlamanın getirdiği tuzaklara ve zorluklara çözüm bulmaya yönelik ipuçları paylaşılıyor. QNX gömülü sistemlerde ve daha spesifik olarak güvenlik açısından kritik donanımlarda çalıştırılmak üzere tasarlanmış bir mikro çekirdek işletim sistemidir. Teknik ayrıntılara yardımcı olmak amacıyla, daha fazla açıklama amacıyla QNX belgelerine referanslar eklenmiştir.

QNX'i İşletim Sistemi Derleme Dosyasını Tanımlama

Bir önyükleme ekranı tasarlamanın ilk adımı, QNX'i, önyükleme ekranının önyükleme sırasında mümkün olan en erken zamanda görüntülenmesini sağlayacak şekilde ayarlamaktır. QNX'i kullanmak için geliştiricinin bir tanımlama yapması gerekir. İşletim sistemi derleme dosyası Bu, esasen hangi sürücülerin, uygulamaların ve diğer yabancı dosyaların işletim sistemi görüntüsüne dahil edilmesi gerektiğini açıklayacaktır. Bu işletim sistemi görüntüsü daha sonra hedef sisteme aktarılacak ve önyükleme sırasında hangi uygulamaların ve sürücülerin başlatılacağını kontrol edecektir. QNX, olarak bilinen bir grafik sistemine sahiptir. Ekran alt sistemi. Görüntüyü donanıma bağlı belirli bir ekrana dönüştürmek için kullanılacaktır. Bu, önyükleme sırası sırasında mümkün olan en kısa sürede başlatılmalıdır. Önyükleme sırası, derleme dosyasında şöyle görünecek bir komut dosyası etiketi olarak tanımlanır:

[+script] .script={}

parantezlerin içindeki tanımlanmış çizgiler bir kabuk betiği gibi davranır. Ekran alt sisteminin başlatılması gereken yer burasıdır.

Ekran alt sistemini başlatma komutu şöyle görünecektir:

ekran -c {yapılandırma_dosyasının_yolu}.

Daha fazla bilgi bulunabilir okuyun. Screen alt sistemi başlatıldığında, açılış ekranı ikili programı daha sonra başlatılabilir.

Ekran Sistemiyle Çalışmak

Bir sonraki adım, önyükleme ekranının kendisini geliştirmektir. QNX'in, önyükleme sırasının bir parçası olarak bir görüntüyü veya animasyonu göstermenin yerel bir yolu yoktur. Bunun cihaz bazında geliştirilmesi gerekecektir. Screen API C dilinde yazıldığı için açılış ekranının da C dilinde yazılması gerekir. Ek olarak, C'nin kullanılması, açılış ekranının çok daha hızlı başlatılmasını sağlayacak ve böylece kullanıcıya cihazın çalışması hakkında bilgi verme süresini azaltacaktır. Önyükleme ekranının, Screen API ile iletişim kurmak için bazı standart kodları ayarlaması gerekir. Ayrıntılar bulunabilir okuyun ancak bunları listelemek için, önyükleme ekranının bir bağlam nesnesi, bir oluşturma hedefi nesnesi (bu durumda gerekli oluşturma hedefi bir pencere hedefidir) ve son olarak bir ekran arabellek nesnesi oluşturması gerekecektir. Teknik olarak C nesne yönelimli olmadığından dilde nesne kavramı yoktur. Ancak açıklama kolaylığı açısından, kullanılan yapı türlerini tanımlamak için nesneler terimi kullanılacaktır.

Aşağıda, henüz tanımlanan nesnelere ilişkin bazı spesifik parametrelere ilişkin açıklamalar ve işaretçiler yer almaktadır. Önyükleme ekranı için ekran bağlamı nesnesini oluştururken SCREEN_APPLICATION_CONTEXT türü yetersiz. Bunun yerine, önyükleme ekranının SCREEN_WINDOW_MANAGER_CONTEXT'e ihtiyacı var. Bunun nedeni daha sonra tam olarak açıklanacaktır, ancak esas olarak önyükleme ekranının ne zaman sonlandırılması gerektiğini bilmekle ilgilidir. Daha fazla bilgi: okuyun.

Daha sonra, oluşturma hedefinin (bu durumda pencere) kullanım özelliğini tanımlarken, önyükleme ekranı oluşturma arabelleğine yazmayı amaçladığından ancak buradan okuma yapması gerekmediğinden, bu en azından SCREEN_USAGE_WRITE olarak ayarlanmalıdır. Varsayılan, yazma ve okuma bayraklarının birleşimidir. Daha fazla bilgi: okuyun.

Son olarak, oluşturma hedefi tarafından kullanılacak ideal arabellek sayısı, kullanılan önyükleme ekranının türüne bağlı olarak bir veya iki olarak ayarlanabilir. Cihazın tek bir görüntü oluşturacak statik bir önyükleme ekranı olacaksa, tek gereken 1 arabellektir. Ancak bir animasyon gösterecekse iki tane önerilir. İkisini bir pencerenin oluşturma hedefiyle birlikte kullanmak, önyükleme ekranının çift arabelleğe alınmasına olanak tanır. Yani animasyonun bir karesi bir arabelleğe yüklenirken, Screen alt sistemi diğer arabelleği gösteriyor olabilir. Daha sonra arabelleğin yüklenmesi tamamlandığında, Ekran alt sistemi etkin arabelleği yenisiyle değiştirecektir.

Görüntü Kitaplığıyla Çalışmak

Artık, önyükleme ekranı görüntüsünün veya animasyonunun belirli karelerini ayrıştırmak ve yüklemek için ikinci bir QNX kitaplığının kullanılması gerekiyor. Ekran alt sistemi bunu işlemez. Bunun yerine, Görüntü kitaplığı kullanıldı. Önyükleme ekranı için kullanılacak görüntü dosyasının türüne bağlı olarak farklı codec Paylaşımlı Nesne (.so) dosyalarına ihtiyaç duyulacaktır. Bunlar işletim sistemi görüntü oluşturma dosyasına dahil edilecektir ve mevcut olanların listesi aşağıdadır. okuyun. Bir animasyonun karesini ekli bir ekrana dönüştürmek için bir dizi adımın yapılması gerekir.

Bu adımlar tanımlanmış okuyun birkaç uyarıyla. Önemli bir uyarı, kullanılan donanıma bağlı olarak bir animasyonun tüm kare setinin belleğe sığmama olasılığıdır. Durum böyleyse, çerçevelerin anında yüklenmesi ve yüklendikçe oluşturulması gerekir. İkinci uyarı, hem img_load_file() hem de img_load()'un (her ikisi de yukarıdaki bağlantıda referans alınmıştır) yalnızca ilk kareyi yükleyeceğidir. Durağan bir görüntü için bu yeterlidir, ancak bir animasyon için bu yeterli değildir. Bu işlevleri her karede okumak için bir döngüde kullanmak da işe yaramayacaktır çünkü alınacak kare numarasını belirtmenin bir yolu yoktur. Her zaman ilk kareyi döndürür.

Bunun yerine, her iki uyarıyı da ele almak için kod, çerçeveyi yükleyip kodunu çözecek ve ardından kod çözme geri çağrısında animasyon çerçevesini Ekran alt sistemi arabelleğine yazacaktır. img_decode_frame() işlevi, geri çağırmaların tanımlanmasına izin verir ve bu, özellikleframe_f() geri aramasında bulunur (bkz. okuyun) görüntüyü ara belleğe yükleyecek kodun konulması gerekir.

Verileri yükleme adımları aşağıdaki gibidir: Veri parametresi olarak iletilen işleme hedefini (bu durumda ekran) çıkarın (bunun, uintptr_t'den screen_window_t'ye tür dönüşümü olması gerekir). Daha sonra arabelleğin SCREEN_PROPERTY_POINTER ve SCREEN_PROPERTY_STRIDE (bkz. okuyun) sırasıyla görüntünün verilerine ve adıma ayarlanmalıdır (geri çağırmanın img_t parametresi). Son adım, yeni yüklenen görüntüyü ekrana dönüştürmek için screen_post_window() işlevini (oluşturma hedefinin bir pencere olması nedeniyle) kullanmaktır.

QNX Etkinlik Sistemiyle Çalışmak

Son olarak, açılış ekranı aslında bir animasyonu tekrar tekrar görüntüleyebilen sonsuz bir döngü olduğundan, açılış ekranının ne zaman sonlandırılacağını bilmesi gerekir. Bağlam türünün SCREEN_WINDOW_MANAGER_CONTEXT olarak ayarlanmasının önemli olduğu yer burasıdır. QNX'in bir özelliği var Etkinlik sistemi yeni pencereler oluşturulduğunda, yok edildiğinde, odaklanıldığında vb. olayların oluşturulduğu yer. Olayların tam listesi okuyun. SCREEN_WINDOW_MANAGER_CONTEXT'in kullanılması, önyükleme ekranının, diğer uygulamalar tarafından oluşturulan pencere oluşturma ve pencere odaklama olaylarını dinlemesine olanak tanır.

Önyükleme ekranı için iki önemli olay SCREEN_EVENT_CREATE ve SCREEN_EVENT_PROPERTY olaylarıdır. SCREEN_EVENT_CREATE olayı, ana uygulamanın (cihazın ana kullanıcı arayüzünü gösteren) pencereyi ne zaman oluşturduğunu ve dolayısıyla önyükleme ekranının kapatma sırasını ne zaman başlatması gerektiğini dinlemek için kullanılır. Bu olay hakkında daha fazla özellik, screen_get_event_property_X() işlev kümesi kullanılarak sorgulanabilir. X sorgulanan özelliğin türünü belirtmek için kullanılır. Ana uygulama SCREEN_PROPERTY_GROUP'u tanımlıyorsa, belirli bir uygulamanın olayı tetikleyip tetiklemediğini öğrenmek için sorgulanabilir.

SCREEN_EVENT_PROPERTY olayı, farklı bir pencere odaklandığında ayarlanan SCREEN_PROPERTY_FOCUS özelliği ile birlikte kullanılabilir (daha fazla bilgi edinin) okuyun). X saniye uzunluğunda bir animasyon (burada X, cihazın önyükleme işleminin uzunluğudur) kullanmak yerine olay sistemini kullanmak, ana uygulama henüz başlatılmamışsa animasyonun döngüye alınabileceği anlamına gelir. Bu, zamanlamalar büyük olasılıkla farklı olacağından, farklı donanımlar arasında çok daha iyi taşınabilirliğe olanak tanır.

Zamanlama konusuna gelince, olaylar sürekli olarak dinlenemeyeceği için (eğer öyle olsaydı, ana iş parçacığının kilitlenmesi ve animasyonun sonraki kareleri göstermemesine neden olurdu), farklı bir taktiğin uygulanması gerekir. Önyükleme ekranı sabit bir çerçeve ise bu bir sorun olmayacaktır. Ancak animasyonun uzunluğuna bağlı olarak bu olayların yaklaşık olarak her çeyrek karede bir dinlenmesi gerekebilir. Yani, animasyon karelerinin dörtte biri yüklendiğinde, sonraki çeyrek yüklenmeye başlamadan önce olası olayları kontrol edin.

Sonuç

Sonuç olarak bu blog, önyükleme ekranlarının neden önemli olduğunu açıklıyor, QNX için bir tıbbi cihaz önyükleme ekranının nasıl kurulacağına ilişkin ayrıntılar sağlıyor ve yararlı olabilecek uyarılar ve tasarım önerileri sunuyor. Ancak her cihazın açılış ekranının farklı gereksinimleri vardır. Sonuç olarak bu blog, adım adım ilerleyen bir süreç yerine öneriler sunuyor. Ancak bu öneriler ve ayrıntılar, geliştiricilerin kendi özel ihtiyaçlarını karşılayan bir tıbbi cihaz QNX önyükleme ekranı oluşturmasına olanak sağlamalıdır.

Dendy Addison bir Yazılım Mühendisi Müşterilerin güvenli, verimli ve etkili tıbbi cihaz yazılımı geliştirmelerine yardımcı olan Starfish Medical'da. Geliştirdiği yazılımlarla insanların hayatında fark yaratma tutkusuna sahiptir. Dendy, donanım yazılımından kullanıcı arayüzüne kadar tıbbi cihazların tüm yönleriyle çalışmaktan hoşlanıyor.

 

Bunu Paylaş…

spot_img

En Son İstihbarat

spot_img