Giriş: Gerçek Zamanlı İşletim Sistemlerinin Rolü

Gömülü sistemler giderek öngörülebilir bir uygulama, düşük gecikmeli ve birden fazla olayın eş zamanlı olarak işlenmesini talep ediyor. Gerçek zamanlı işletim sistemi (RTOS) geliştiricilerin bu gereklilikleri sıfırdan planlamaya zorlamaları için çerçeveyi sağlar.Mevcut seçenekler arasında, FreeRTOS, donanım maliyetleri düşük tutmak için hafif, açık kaynaklı uygulamalar olarak öne çıkıyor.

Bu makale, FreeRTOS'a orijinal kılavuzda genişliyor, mimarlık, yapılandırma, görev yönetimine daha derin bir şekilde dalıyor ve gelişmiş yeteneklere sahip olacaksınız.Sonunda, FreeRTOS'tan üretim-grad gömülü yazılım geliştirme için nasıl yararlanılacağı konusunda ayrıntılı bir anlayışa sahip olacaksınız.

FreeRTOS nedir?

FreeRTOS, özellikle gömülü sistemler için tasarlanmış bir pazar lideri gerçek zamanlı işletim sistemi çekirdeğidir. Richard Barry tarafından yaratıldı ve şimdi Amazon Web Services (AWS) FreeRTOS şemsiyesi altında muhafaza edildi, devam eden desteği ve ölçeklendirmeyi sağlamak için (IoT) ekosistemleri.

FreeRTOS'u çok yaygın olarak kabul edilen anahtar özellikler şunlardır:

  • [FONT:0) MIT lisansı altında açık kaynak: Lisans ücretleri, tam kaynak kodu kullanılabilirliği ve ticari ürünlerde izin verilen kullanım.
  • [FONT:0)Portability: [Dönetici: [Dönetici: 0,3] Resmi limanlar, MCU mimarileri için (ARM Cortex-M, RISC-V, AVR, PIC, vs.) ve araç zincirleri (GCC, IAR, Keil, LLVM).
  • [FONT:0)Minimal ayak izi:[Dönetici:[Dönetici 4 KB ROM ve 1 KB RAM’in 4 KB'si kadar az çalışabilir, maliyete duyarlı cihazlar için uygun hale getirir.
  • [FONT:0)Deterministic behavior: Scheduling üst, öngörülebilir zaman sağlamak için görev sayısının sürekli ve bağımsızdır.
  • [FONT:0]Active topluluğu ve ticari destek: Extensive documents, forumlar ve FreeRTOS ekibi ve ortaklarından profesyonel hizmetler.

FreeRTOS genellikle ilk RTOS mühendisleri karşılaşmaktadır ve konseptleri doğrudan daha karmaşık sistemlere sahiptir ve bu da mükemmel bir öğrenme platformu haline getirir.

Core Concepts veelekt Objects

Pratik adımlara girmeden önce, temel bina blokları FreeRTOS sağlar.

Görevler Görevler

Görevler, CPU zamanını öncelik temelli bir önsöz programına göre paylaşan bağımsız yürütme alanlarıdır.Her görev kendi yığınları ve bağlamına sahiptir. FreeRTOS, sınırsız sayıda görevi destekler (yalnızca mevcut hafızaya göre sınırlı).

Queues

Queues, görevlerin ve kesintiler arasında geçilmesi için mesajları sağlar. Geçici iletişim için birincil mekanizmadır. FreeRTOS kuyrukları FIFO veya LIFO (sonrası ile birlikte:0)) ve sabit boyutlu veri öğeleri tutabilir. Queue işlemleri doğru API varyantları ile kullanıldığında verimli ve kesintiye uğratılır.

Semaphores ve Mutexes

FreeRTOS ikili semaforlar sunuyor, semaforları saymak ve mutexes. İkili semaforlar sinyal veya senkronizasyon görevleri için kullanılan basit bayraklar olarak hareket eder (örneğin, kesintinin gerçekleştiğine dair bildirim).

Yazılım Zamanlayıcıları

Çekirdek, bir süre boyunca bir çağrı işlevi yerine getiren yazılım zamanlayıcıları sağlar. Zamanlayıcılar bir kez ateş veya otomatik yük olabilir. Özel bir zamanlayıcı hizmet görevinde koşarlar, bu yüzden eller kısa ve bloklamamalıdır.

Event Grupları

Olay grupları birden fazla bit (events) bir araya gelme görevinden vazgeçebilmelerine izin verir. Bir eylemin birkaç aminkk koşuluna bağlı olduğu senaryoları basitleştirir, bu nedenle sensör okumaları ve bir kullanıcı düğmesi basın.

FreeRTOS ile başlayın

FreeRTOS'u kabul etmek, hedef donanımınızı değerlendirmeyi ve uygulamanızın kısıtlamalarıyla eşleştirmeyi gerektirir.

Uyumlu bir Microkontrolü seçmek

FreeRTOS portları neredeyse her popüler MCU ailesi için mevcuttur. Seçilmiş cihazınızın görevlerinizi artı için yeterli RAM ve flaş olduğunu onaylayın. Örneğin, 16 KB Cortex-M0+ ile 16 KB RAM rahatça birkaç görev yapabilirken, bir Cortex-M4 256 KB RAM destekle birçok. Resmi FreeRTOS port sayfasını veya silikon satıcınızın SDK'sını önlenmiş örnekler için kontrol edin.

İndirin ve bütünleştirin

En son FreeRTOS kaynağı kodu, SystemFLT:0)FreeRTOS resmi web sitesi) veya GitHub aracılığıyla. dağıtım, STM32CubeIDE, IARLINE Workbench ve VS Kod Platform ile ilgili olarak, doğrudan entegrasyon teklif eder.

Yapın: TheFLETHT:4

Tüm çekirdek davranışı, bu ayarları doğru hale getirmek hem performans hem de istikrar için kritiktir. Anahtar konfigürasyon makroları içerir:

  • [FONT:0])[[Dönetici: 1)) Ön planlama için 1'e ayarlayın (gerçek zamanlı uygulamalar içintip).
  • [FONT:0]) [FONT: [Dönem: 0,3; [Dönemli saat frekansı) CPU'nun gerçek saati frekansı (doğru zamanlama için kullanılan)
  • [FONT:0])[[Dönetici:[Dönetici: 0) Sistem frekansı zamanlayıcı kesintiye uğrar. Ortak değerler 100 Hz (10 ms tick) veya 1000 Hz (1 ms tick) Yüksek fiyatlar karar verir, ancak yüksek hızlar yükselir.
  • [FONT:0]) [Dönetici bellek tahsisi için mevcut olan toplam RAM miktarı (ENFLT:10 tarafından kullanılır).
  • [FONT:0] [Dönetici:[Dönetici: 0)) “Köpeklik görevi için ve belirtilmeyen yeni görevler için varsayılan olarak, bu, ihmal edilen fonksiyon aramaları ve kesme bağlamları için yeterince büyük olduğundan emin olun.
  • [FONT:0]: İnsan hazırlanabilir görev isimlerinin maksimum uzunluğu (yardımcı)
  • [FONT:0][Dönemli:[Dönder: 1'e 16-bit işaret sayacı için ayarlanmış veya yüksek akış hız sistemleri için azami değeri sınırlandırılmıştır.

Ek olarak, bir heap yönetim şemasını US $ ile seçin ve [[Dönetici:) ve KAYNAKLAR (ilk-fitli) veya - 1 ila heap 5) farklı ticaret-offları parçalanma, tahsis hızı ve determinizm. Çoğu uygulama kullanım kolaylığı sağlar.

Görev Yaratma ve Yaşam döngüsü Yönetimi

Görevler oluşturmak basit, ancak yığınlama, öncelikler ve devlet geçişleri derin bir şekilde sistem güvenilirliğini etkiler.

[03.38]

Bir görev asla geri dönmemiş bir işlevi tanımlamakla oluşturulur (aİLFLT:19).

TaskHandle_t xHandle;
xTaskCreate(
 vTaskFunction, // Task function pointer
 "MyTask", // Name for debugging
 configMINIMAL_STACK_SIZE, // Stack size in words
 NULL, // Parameters passed to task
 2, // Priority (higher number = higher priority)
 &xHandle // Optional task handle
);

İşlevFLT:22, gerekli periferikları başlatmak ve sonra sonsuz döngüye girmek, işini yapmak, uyumak veya olayları beklemek gerekir.

Görev Önceleri ve Takvimi

FreeRTOS, 0 (düşük)'ten 5'e kadar öncelikleri destekler (en yüksek) Görev, kritik olanlara aynı öncelik vermeden kaçının; aksi takdirde, zamanlayıcı görevleri yüksek öncelikli olarak, iki görevi aynı önceliği paylaşırsa, zaman içinde (parça) bir süre ile aynı önceliği paylaşırlar.

Görev Devletler

Bu eyaletlerden her görev var:

  • [FONT:0)Running:[Dönetici:[Dönetici: 1 ) Görev şu anda (yalnızca CPU çekirdeği için tek bir görev) yürütülmektedir.
  • [FONT:0)Okuy:[Dönetici:[Dönetici:0) Görevi çalıştırılabilir ama daha yüksek bir öncelik veya eşit sermaye görevi şu anda yürütülmektedir.
  • [FONT:0]Blocked:[Dönetici:[Dönetici: 0 ) Görev bir etkinlik için bekliyor (zaman, kuyruk mesajı, semaphore, vs.). CPU zamanı yok.
  • [FONT:0)Suspended:[Dönetici:[Dönetici:0) Görev, genellikle programcının hazır listesinden kaldırıldı, tipik olarak İLDİT:24 ile.

Bloklama, verimli CPU kullanımı için birincil mekanizmadır: kirletici yerine, bir görev sadece bir koşul için bekler, daha düşük öncelikli görevlerin çalıştırılmasına izin verir.

Siz ve Overrun Koruma

FreeRTOS böceklerin en yaygın kaynaklarından biri aşırı akış sağlar. Çekirdek, serbest çöp alanı açmadan önce gerekli olan miktarı artırmak için yapılandırır.In etkinleştirildiği zaman, her zaman gelişme sırasında cömert yığın boyutları tespit edebilir ve kullanım için [[FONTD / 7|SQUARES COLOR COLOR CONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=INT=FONT=FONT=INT=FONT=FONT=INT=FONT=INT=INT=INT=FONT=FONT=FONT=FONT=FONT=FO

Statik tahsis (örneğin,), yığınlamadan kaçınan ve belirli hafıza bölgelerinde yerleştirmeye izin veren yığına izin vererek daha fazla kontrol sunar (örneğin, gerçek zamanlı görevler için sıkı bir şekilde çift hafıza).

senkronizasyon ve Inter-Task İletişim

Görevler nadiren izolasyonda çalışır; verileri koordine etmek ve değiştirmek gerekir. FreeRTOS, her biri belirli desenlere uygundur.

Data Passing için Queues

Bir görevden veri göndermek için kuyruklar kullanın (veya kesmek) başka bir şeye. kuyruklar belirli bir boyut öğelerinin sabit bir sayıda eşya dükkanı. Örneğin, bir sensör okuma görevi, oturum görevi için örnek gönderebilir. API basit:

  • [Üye: 29) Bir görevden bir eşya gönder (tam olarak blok).
  • [Üye: 30) - eşyayı alın (barış varsa).
  • ISR-güvenli versiyonlar: [[Dönetici: [[FONTT:31] ve [[FONTD:32).

Her zaman geri dönüş değerlerini kontrol edin; bir kuyruk dolu olabilir veya çağrı zamanlanabilir. ISRs, aurFLT:33) veya ) karşılığında bir bağlamın gerekli olup olmadığını gösterir.

Basit İşaretler Olarak İkili Semaphores

İkili semaforlar bir olayın gerçekleştiği bir görevi belirtmek için idealdir. Örneğin, bir GPIO kesintisi bir semaphore ve bir bekleme görevi “kahramanda” olabilir ve bu da olayı kesintiye uğratabilir.

Öncekilik Inheritance ile Mutexes

Birden fazla görev paylaşılan bir kaynağa eriştiğinde (örneğin, bir UART veya veri yapısı), ikili bir semafore yerine bir mutex kullanın. Mutexes, herhangi bir bekleme görevinin önceliğini geçici olarak yükselten bir önceliktir.

Kaynak Yönetimi için Semaphores

Örneğin, beş DMA kanalının bir havuz, 5 A görev “kabul” olarak ilk kez 5 A görevle bir kanal ve “gives” tekrar tekrar tekrar elde etmek için bir semaforle yönetilebilir.

Multi-Condition Synchronization için Olay Grupları

Bir görev birkaç bağımsız olay meydana gelene kadar beklemek zorundaysa, etkinlik grupları birden fazla semafordan daha verimlidir. Bits görevler veya ISRs tarafından belirlenir ve bekleme görevi, biraz maskeyi ve herhangi bir API'nin set olup olmadığını belirtebilir.

Interrupt İşleme: Dehid İşleme

FreeRTOS'daki en önemli desenlerden biri, ISR'leri son derece kısa tutmaktır. Bir kesinti içinde karmaşık işleme yapmak yerine, aşağıdaki yaklaşımı kullanın:

  1. ISR içinde, bir görevin minimum verilerini ve sinyalini toplayın ( semaphore, kuyruk veya görev bildirimini).
  2. Görevi engelleyin, ağır kaldırmayı gerçekleştirmek için normal bir öncelikte çalışan.
  3. FreeRTOS API çağrılarının “FromISR” versiyonlarını kullanın ([DÜT:39), [[Üye Olmayanlar ([Üye Olmayanlar) ve parametreyi kontrol edin.If the unblocked task has a higher priority than the kesinti görevi, a context switch is requested.

Bu demlenmiş kesme işlemi (ayrıca “yüze yarısı” eller olarak da adlandırılır) sistemin geç kalmışlığı öngörülebilirken yanıtlandığını garanti eder. FreeRTOS ayrıca kesintilerin nestingini de destekler, ancak kesme öncelikli seviyelerinin doğru yapılandırılmasını sağlar - çünkü ARM Cortex-M için, çekirdek, en yüksek kullanıcı erişilebilir önceliği seviyenin kene zamanlayıcı ve herhangi bir API’yi arama ISR'leri için kullanılmasını gerektirir.

Üretim için en iyi uygulamalar ÜcretsizRTOS Uygulamaları

Temel kullanım ötesinde, birkaç uygulama kırılgan bir sistemden ayrı ayrı bir şekilde ayrılır.

Memory Management

Kurulum modelinizi eşleşen heap uygulamasını seçin.ETHFLT:0)heap 4) genellikle iyi bir varsayılandir, çünkü uygulamanız tamamen bitişik ücretsiz bloklar oluşturur ve silinirse, görevlerinizi veya kuyruklarınızı sık sık sık sık azaltır.

Heap kullanımı için [[DörtÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞ

Öncelik Stratejik

Her görevin son ve eleştirelliğine dayanan öncelikler olarak: Tipik bir program:

  • [FONT=0)En yüksek öncelik:[Dönetici:[Dönetici:0) Zaman-kritik kontrol döngüleri (örneğin, motor PID, ses işleme).
  • [FONT:0)Ortak önceliği:[Dönetici:[Dönetici:0)[Dönetici:[Dönetici:[Dönetici:[Dönetici:0)
  • [[Düzenlik:0) Düşük öncelikli:[Dönetici:[Dönetici:[Dönetici:)[Dönetici:[Dönetici:[Dönetici:[Dönetici:)

Tüm firmanın sonlarına ihtiyacı olan aynı önceliği olan birden fazla görev almaktan kaçının, çünkü zaman-slicing haksızlığı ortaya çıkarabilir. Daha yüksek öncelikli görevlerin ne zaman bekleneceği konusunda daha düşük öncelikli görevlerin yürütülmesine izin vermek için engel kullanın.

Power Optimizasyon: Tickless Idle

Birçok gömülü cihaz bataryaya güçlenir. FreeRTOS, sistemi boş zaman zaman zaman zaman içinde bir akışlı boş bir boşluğa girebilir ve MCU, derin bir uyku durumuna girebilir.Bu, 1'e kadar yapılandırılır ve makrosİLETİŞTİRMEYENK'ye kadar kesintiye uğratılır.

Debugging ve Profiling

FreeRTOS, görev yürütme yüzdelerini sağlayan bir iş yerinde (enableEND:48) bir koşu-zamanlı istatistik özelliği içerir.Bu, CPU hogs ve tezgahları ek olarak, [[ŞUFONT işlevleri) ve [[FONTCÜSÜMÜSÜSÜŞÜNCÜŞÜNCÜŞÜNÜŞÜNCÜŞÜNCÜŞÜNCÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNCÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜN

Daha derin analiz için, ESFLT:0)FreeRTOS+Trace[[Dönetici IoT Device Testlerinin bir parçası) Bu araç kayıtları çekirdek olayları (kontext anahtarları, kuyruk işlemleri, ISR girişleri) ve onları zaman zaman zaman zaman zaman zaman zaman zamanlaması sorunları ve inversiyonlar için paha biçilmez gösterir.

Gelişmiş Özellikler Gelişmiş Özellikler

Görev Bildirimleri

Görev bildirimleri, basit bir sinyalleme için hafif bir alternatif sağlar. Her görevin 32-bit bildirim değeri ve bekleme süresine dair bildirim değeri vardır.Bir bildirim gönderin (İLDİDÜŞÜNÜŞÜNÜŞÜN) veya [[DÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞ

Stream Buffers ve Mesaj Buffers

FreeRTOS V10.0.0'da yayınlanan yayın tamponları, ağ yığınları veya komut ⁇ s gibi değişken uzunlukta verilerin aktarılmasına izin verir.Bir mesaj tampon, mesaj sınırları da koruyan bir akış otobüsüdir.

CoRoutines (Legacy)

FreeRTOS ayrıca tek bir çöp yığını paylaşan çöpçülükleri içerir. Nadiren modern uygulamalarda kullanılırlar çünkü bu tür görevlerin tam özelliklerini karmaşıklaştırır ve eksik değildir. ciddi RAM-constrained olmadıkça standart görevleri kullanmak önerilir (e.g., 8-bit MCU).

Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç

FreeRTOS, verimli gömülü uygulamalar için sağlam, iyi niyetli bir temel sağlar.Reformasyon öncesi multitasking, zengin senkronizasyon ilkelleri ve görev bildirimleri gibi gelişmiş özellikler, basit sensör düğümleri için IoT kompleksi parametrelerine uygun hale getirir ve hafıza yönetimi ve atama araçları için en iyi uygulamaları izleyerek, akıcılık ölçüm araçlarına uygun olarak, en iyi şekilde gelişmiş gerçek zamanlı sistemler gibi özellikler geliştirebilirsiniz.

Daha fazla öğrenme için, [[Üye Olmayanlar:0)Üye Olmayanlar Referans Kılavuzu[DÜye Olmayanlar İçindeki Mikrokontrolörler Özel entegrasyon kılavuzları, herhangi bir gömülü geliştiricinin aracıchain gibi, ölçeklenebilir, kullanılabilir olmayan bir bilgisayar yazılımı oluşturmak için size yardımcı olur.