Kontrol Sistemleri ve Otomasyon
Properly Configure Hardware Gömülü Sistemler için kayıt
Table of Contents
Donanım kayıtlarını doğru şekilde yapılandırın, gömülü sistemlerin güvenilir çalışması için gereklidir. Kayıtlar, zamanlayıcılar, iletişim arayüzleri gibi kontrol donanım işlevlerinin ve I/O pins. Proper kurulumu, donanımın yanlış anlamasını ve yanlış davranışlara yol açabilecek sistem arızalarının sağlanmasını sağlar, veri yolsuzluk veya donanım hasarı.
Donanım Kayıtlarını Anlamak
Donanım kayıtları, bir zamanlayıcının adresi alanına hafızalanıyor, yani her bir kayıtta belirli hafıza adreslerine erişimleri, bir UART'ın vaftiz oranını belirlemek gibi tanımlanmış bir amaç vardır, bir zamanlayıcının ön ölçeklendirmesini veya bir GPIO pin'nin yönünü kontrol ederler.
Çoğu gömülü mikrokontroller (örneğin, ARM Cor-texM, AVR, RISC-V) hafızayı kullanan I/O (MMIO) koleksiyonlarını normal hafıza operasyonları olarak kaydettiriyor, ancak bu adreslerin arkasındaki donanım mantığı, fiziksel bir giriş veya mevcut yapılandırmayı yansıtan bir değere geri dönülebilir; Bir kayıt için yazmak, hemen bir donanım eylemi tetikleyebilir.
Kayıt Organizasyonu Kayıt Organizasyonu
Kayıtlar genellikle periferiklara karışır. Örneğin, bir UART periferisi her kayıtta bazı alanları tanımlayabilir (DR), durum (SR), kontrol (CR1, CR2) ve baud oranı (BRR). Her kayıt tipik olarak 8, 16 veya 32 bit geniştir.
Modern mikrokontroller aynı periferinin birden çok örneği de içeriyor (örneğin, USART1, USART2). Her örnek, kendi kayıt setini eşsiz bir temel adresiyle içeriyor.Temel adres genellikle mikro kontrolcülerin hafıza haritası bölümünde bulunur.
Properly Configure Registers
Kayıt yapılandırması için sistematik bir yaklaşım hataların riskini azaltır. Aşağıdaki adımlar, sürekli olarak uygulandığında, sağlam ve öngörülebilir donanım başlangıçlarına yol açar.
1. Kayıt Adreslerini Tanımlayın
Her periferik için temel adreslerini bulmak için cihazın dokümanını arayın. Birçok satıcı, başlık dosyaları (örneğin STM32) için kayıt structları ve temel adreslerini tanımlayan sürümler için temel bilgileri kullanın.
Örneğin, STM32F407'de ABDART2 üssü adresi, USARTT:1'dir. Resmi CMSIS başlığı “Dört:2) ve bir structİLFLT:3).Her zaman bu sembolik adresleri çiğ hex numaraları üzerinden tercih eder.
Kayıt Fonksiyonlarlarını Anlayın
Yapındığınız periferi için veri sayfası bölümünü okuyun. dikkat edin:
- Her bir kayıt (kontrol, durum, veri vb.) amacı.
- Her kayıt içinde biraz alan – her bir bit veya grup bit kontrol nedir?
- Kayıtların sıfır değeri (enerji sonrası devlet).
- Herhangi bir özel husus, gerekli işlemler siparişi veya yazılı olarak devletler bekler.
Bir zamanlayıcı için, önceden ölçekleyici, karşı modu, otomatik yük kaydı ve saat bölmek gerekir. Bunların her biri kayıtlarda belirli bitler tarafından kontrol edilir. ”, [[Dörd|DüzD|Düz|Dönetici|s|s|s|s|s|s|s|s|s|s|s|s|s|s|s|s|s|s|s|s)
3. Arzu Değerleri Belirleyin
Kayıtlara uygun değerler yazın, genellikle bu atomik olarak ele alan işlevleri kullanarak, biraz yazmalı bir teknik yazın.Birçok satıcı-provided donanım soyutlama katmanları (HALs) bu atomik olarak ele alan işlevleri sunar.
[FONT=FONT=)
Çok fazla bit yayılan alanlarda, değeri inşa eder ve alanı açıklayarak uygulayın:
uint32_t temp = REG → CR1;
temp &= ~TIM_CR1_CKD_Msk; // clear the clock division bits
temp |= (2 << TIM_CR1_CKD_Pos); // set division to 4
REG → CR1 = temp;
Kayıt (örneğin, 03.03.2012) ile ilgili olarak, her bir şeyi bilinen bir duruma ayarlamayı planlarken, genellikle başlangıçtaki konfigürasyon sırasında.
4.Konferasyonunu Doğrulayın
Kayıtları yazdıktan sonra, değerleri geri okuyarak doğrulayın ( kayıt okunabilir). Bir mantık analizci, oscilloskop veya donanım debugger, donanımın beklenen bir UART vaftiz oranını doğrulayabilmesi için, bir karakter ve pin üzerinde biraz zamanlamayı ölçebilir.
Bazı periferiklar, başarılı konfigürasyonu gösteren statü kayıtlarını veya özel bayrakları içeriyor. Güvenlik-kritik sistemlerde, CRC veya checksum kontrollerini hafıza yolsuzluklarını tespit etmek için kayıt konfigürasyonlarını göz önünde bulundurmayı düşünün.
Kayıt Konsülü için En İyi Uygulamalar
En iyi uygulamalar, debug için zor olan ince böceklerin olasılığını azaltır.
Her zaman Device Datasheet'e danışın
Kayıt düzeninin mikrokontrollü ailelerde aynı olduğunu asla varsaymayın, aynı satıcıdan bile.Bir veri sayfası yanlış ayarlara yol açıyor, bu da donanımın öngörülemez veya hiçbir şekilde işlev görmemesine neden olabilir. şüphe içinde, referans kılavuzu kontrol edin (sadece yüzlerce sayfayı) tam kayıt haritası için.
Bit Maskeleme Teknikleri Kullanın
Sadece değişmeye niyet ettiğiniz bazı şeyleri değiştirin.Mevcut kayıt değerini okuyun (veya kaydedilen bir gölge kaydı kullanın), ilgili bitleri açıklayın, sonra yeni bitleri ayarlar. Inline işlevleri veya makrolar okunabilir:
#define SET_BITS(reg, mask) ((reg) |= (mask))
#define CLEAR_BITS(reg, mask) ((reg) &= ~(mask))
#define MODIFY_REG(reg, clearmask, setmask) \
((reg) = ((reg) & ~(clearmask)) | (setmask))
Bu desenleri kullanarak niyet açık hale gelir ve yanlışlıkla son yazının üzerinde yazma şansı azaltır.
Sistem Startup sırasında ilk kayıt
Her zaman bilinen bir eyaletteki tüm periferikları boot serisinden başlayarak yeniden başlatılır. Sıfır varsayılan varsayılan varsayılanlara dayanarak, bir saat sıfırlayıcı veya kahverengi bir yere donanımdan ayrılabilir. sıfır değeri doğru görünse bile tam konfigürasyonu yazın - bu daterminist davranış sağlar.
Mevcut Devlet Anlayışı olmadan Kayıtları Yazmaktan Kaçın
Birden fazla yazılım katmanı veya eller kesmekle karmaşık sistemlerde, bir kayıt eşzamanlı olarak değiştirilebilir. Atom işlemleri kullanın veya yarış koşullarını önlemek için çok adımlı kayıt dizilerini kesebilir. Örneğin, bir zamanlayıcının süresini güncellarken, veri tablonun aksaklıkları önlemek için önerilen güncelleme prosedürü takip edebilir.
Qualifier'i kullanın.
Kayıt adresleri donanıma işaret etmek için, derleyicinin okuma veya yazmayı optimize etmemesi gerekir.Her zaman işaretçilere kayıt yaptırmaları gerekir.Başlangıç dosyaları genellikle bunu otomatik olarak tanımlarsanız:If you define your own, use:
#define MY_REG ((volatile uint32_t *)0x40004000)
[FONT: 14] olmadan, derleyici yeniden sipariş edebilir veya kayıt erişimlerini ortadan kaldırabilir, yeniden üretmek için son derece zor olan geçici başarısızlıklara yol açabilir.
Common Pitfalls Kaçmak için
Hatta deneyimli gömülü mühendisler bu çukurlarla karşılaşırlar. Onları anlamak daha güvenilir yapılandırma kodu yazmanıza yardımcı olur.
Incorrectly Set Bits
Bunu açıklamak veya kritik bir işlevi sağlayan biraz temizlemek anlamına geldiğinde, donanım çatışmalarına neden olabilir. Örneğin, yanlışlıkla UART'ın paritesini ayarlamayı planlarken, hiçbir pariteyi bozmayı planlayın.
Yazının devamı Eleştirel Bits Unintentionallyly
Sadece biraz değişikliğin kaydın geri kalanını sıfıra indireceği konusunda doğrudan bir görev kullanmak. Bu, geliştiricilerin kopya-paste ilkizasyon kodunda ortak bir hatadır.Her zaman veri sayfası açıkça belirtilmediğinde, bir kayıt tamamen yazılmalıdır.
Çok Hazırlanmış Contexts'te senkronizasyonu görmezden gelmek
Bir kayıt her iki kesinti servis rutinine (ISR) eriştiğinde ve ana döngü, ana döngüde okunan bir kitap okumadan sonra kesintiye uğrayabilir, ancak yazıya girmeden önce ISR aynı kaydı yazacaktır, sonraki yazı ISR'nin değişiklikleri üzerine yazacaktır.
Yeniden yapılandırmadan sonra Verify
Kayıtları okumak olmadan doğru yazılabilir varsayın, yalnızca kayıt defteri gibi donanım sorunlarını (kitap gerisi bilinmeyen veriler) veya hafıza otobüs hataları verir.Her zaman kayıt desteklese geri okuyun veya üretimde bir debugger kullanın, yapılandırma beklentileri karşılamazsa sistemi durdurur.
İzinsiz Kayıt Erişimi Timing
Bazı periferiklar, aktif hale gelmeden önce belirli kayıtları yazmadan bir gecikme gerektirir. Örneğin, UART'ın vaftiz oranını değiştirirken, mevcut karakterin bittiğine kadar bir beklemeye ihtiyaç duyabilir. Datasheets sık sık “settling time” veya “propagation gecikmesi” Bus köprüleri ve saat gating da latencieslarını sunar.
Gelişmiş Yapı Teknikleri
gömülü sistemler daha karmaşık hale gelirken, geliştiriciler temel kayıt yazılarının ötesine geçmelidir.
Donanım Özeti Katmanları Kullanımı (HALs)
Satışçı, HAL'leri (örneğin, STM32 HAL, NXP SDK) yüksek seviyeli fonksiyonlar sunarak kayıt yapılandırmasını basitleştirebilirler. Ancak, genellikle kayıt ayrıntıları gizlemek için kayıt işlemini gizlemek için, hangi hataları hızlı bir şekilde kullanmak için HAL'leri kullanın.
Bit-Banding (Cortex-M)
ARM Cortex-M3/M4 / M7 işlemciler üzerinde, biraz bantlama, belirli bir hafıza bölgesinde bireysel erişime izin verir. Bu, mikro kontrolcülerin referans el yazmalarını okumak için ihtiyacınızı ortadan kaldırır.Birkaç şeritli arayın adresleri için her bir miktar. Örneğin, GPIO çıkışında bir 5 kişi için yazı yazmak, diğerlerini etkilemeden biraz daha açık olacaktır.
Kayıt Ol
Bir kayıt okuyan sistemler yavaş veya yıkıcıdır (örneğin, kayıtta kendini açıklayan bir kayıt), kayıttan bir yazılım gölge kopyasını da tutar. Donanım kaydına yazın ve gölge kopyalarını senkronize etmek için kullanın.Yazdır-yazma işlemleri için gölge kullanın, sonra tüm gölge değerini donanım kaydına yazın.
Macros vs. Inline Functions
Kayıt yapılandırması için birçok gömülü geliştirici, makroları hız için kullanır, ancak doğrusal fonksiyonlar tür güvenlik ve silme kolaylığı sunar. Modern derleyiciler makrolar olarak işlevlerini etkin bir şekilde seçebilirler. tercihler.QUARETERCUSLARA struct. Örnek:
static inline void uart_init(USART_TypeDef *uart, const UART_Config *cfg) {
uart->BRR = cfg->baud_rate;
uart->CR1 = cfg->mode;
// ...
}
Bu yaklaşım yapılandırma mantığını merkezileştiriyor ve test edilebilir hale getiriyor.
Datasheets Etkili Bir Şekilde Okumak
Donanım dokümanı dikkatli bir şekilde incelemek için kodlama yeteneğinin miktarı yoktur. Yeni bir periferi ile yüzleşince, bu okuma sırasını takip edin:
- [FONT:0)Overview:[Dön:[Dön: periferik amacı ve anahtar özelliklerini anlayın.
- [FONT:0)Block diagram:[Dönetici, sistem otobüsü ve dış pinler arasındaki veri akışlarının nasıl aktığına bakın.
- [FONT:0)Kayıt haritası:[Dönder:[Dönder:[Dönder:0) Tüm kayıtlar, onların sıralamaları ve sıfır değerleri.
- [FONT:0)Yönetici:[Dönetici:[Dönetici:0)[[Dönetici:0)[[Dönetici:0)Her bir kayıt için, her bir alandan işlevi inceleyin, değerlere ve herhangi bir kısıtlamaya izin verin.
- [FONT:0]Functional Açıklama:[Dönetici nasıl çalışır - modlar, saat, kesmeler ve ilkleme dizileri.
- [FONT:0)Elektrikli özellikler:[[Dönem:[Dönem: 0,0) Kaynak zamanlama özellikleri, gerilim seviyeleri ve I/O pins yapılandırırsa güç verir.
Kayıtlar için hızlı bir referans kartı alın veya oluşturun. Birçok geliştirici kayıt haritasını yazdırır ve yazmak istedikleri değerleri işaret eder.
Debugging Register Build Errors
Bir sistem beklendiği gibi davranmadığında, kayıt ayarlarını doğrulama ile başlayın.
Bir Debugger kullanın
Çoğu ARM tabanlı mikrokontroller JTAG veya SWD debugging destekler. Kayıt değerleri incelemek için bir hafıza tarayıcısını kullanın. Kayıt beklenmedik bir değer gösterirse, periferik saat izinin etkinleştirileceğini kontrol edin.Birçok mikro kontrolcüler kapı periferik saatler, ve saat olmadan bir kayıt için yazabilirsiniz - ve hatta bir otobüs hatasına neden olabilir.
Oscilloskop ve Mantık Analizi
I/O-la ilişkili periferiler (UART, SPI, I2C, GPIO), bir oscilloskop veya mantık analizörü, doğru zamanlama ve protokol için kesin bir kanıt sağlar. Örneğin, bir UART iletmezse, TX pin'i yüksek kalırsa kontrol eder, gIO fonksiyonunu kontrol eder.
Check Compiler Optimizasyonları
Compiler optimizasyon seviyeleri (örneğin, [[Dörtücüler) aynı kayıtta meydana gelen hafıza bariyerlerini tekrar sipariş edebilir veya yanlışlıkla erişimleri yanlış bir şekilde kaldırılabilir.Ş.Üyelimler bile eksik değildir.
REG->CR1 = 0x01;
__DSB(); // ensure write completes before next instruction
REG->CR2 = 0x02;
Tüm uyarıları ([[DÜŞÜN) ve onları hataları olarak tedavi edin. Statik analiz araçları, istenmeyen bazı operasyonları tespit etmek için kullanın.
Dış Kaynaklar
Kayıt yapılandırma bilgilerini derinleştirmek sağlam referans malzemeleri gerektirir. Aşağıdakiler son derece önerilir:
- ARM CortexM3/M4/M7 teknik referans kılavuzları - mevcut:0)ARM Geliştirici Dokümantasyon[DDDÜT:1).
- Mikrokontrol üreticisinizin uygulama notları – e.g., STMikroelektronik AN4383 “STM32F4 USART” veya Microchip AT14421 “AVR1000: Yazma AVR Micronetler Kodu ile başlayın.
- “Embedded Systems: Gerçek Zaman Ara Cor-texM Microkontroller’e karşı çıkıyor”, Jonathan W. Valvano – pratik kayıt seviyesinde örneklerle mükemmel bir ders.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Donanım kayıtlarının proper konfigürasyonu, güvenilir gömülü sistem gelişiminin temelidir. Disiplinli bir yaklaşım gerektirir: veri tablolarını incelemek, sistematik olarak biraz-manipulation teknikleri kullanarak, davranışları doğru bir şekilde takip etmek ve ortak tuzaklara karşı koruma sağlamak, geliştiriciler donanım üzerinde kesin kontrol edin, verimli, sağlam ve kullanılabilir bir donanıma sahip olmak.Bir HAL'ın üst kısmında yazsanız, ilkelerin üst kısmındaki temelleri doğru şekilde yazın - kayıt formunu doğru şekilde yaz.