Bağımsız bekçi köpeği (IWDG) veya Pencere bekçi köpeği (WWDG)?


15

Hala bu soru için bir cevap bulmak için arıyorum:

Neden stm32 MCU'lar mükemmel bir bekçi köpeğine sahipken (yani Window bekçi köpeği (WWDG)), basit bir bekçi köpeği (Bağımsız bekçi köpeği (IWDG)) var mı?

Bu sayfayı şöyle buldum :

ST Microelectronics bir dizi Cortex-M3 cihazına sahiptir. M3, alt uç gömülü aygıtlar için son derece popüler hale geldi ve ST'nin STM32F'si bu parçaları temsil ediyor (WDT bir ST eklentisi olmasına rağmen, diğer satıcıların uygulamalarını yansıtmayabilir). STM32F'nin iki farklı koruma mekanizması vardır. Bir "Bağımsız Bekçi köpeği", kullanım kolaylığı dışında pek bir şey yapmayan güzel bir vanilya tasarımıdır. Ancak Pencere Gözcüleri daha sağlam koruma sağlar. Bir geri sayım zamanlayıcının süresi dolduğunda, zamanlayıcının yeniden yüklenmesi ile engellenebilecek bir sıfırlama oluşturulur. Orada özel bir şey yok. Ancak yeniden yükleme çok hızlı gerçekleşirse, sistem de sıfırlanır. Bu durumda, "çok hızlı" bir değer kontrol programına programlanan bir değer tarafından belirlenir.

Başka bir harika özellik: sıfırlamadan hemen önce bir kesme oluşturabilir. Kesmeyi saptamak için biraz kod yazın ve örneğin sistemi güvenli duruma getirmek veya hata ayıklama amacıyla verileri anlık görüntüye koymak için bazı işlemler yapabilirsiniz. ST, bekçi köpeğini yeniden yüklemek için ISR'yi kullanmanızı önerir - yani köpeği tekmeleyin, böylece sıfırlama gerçekleşmez. Onların tavsiyelerini alma. Program çökerse kesme işleyicileri normal şekilde çalışmaya devam edebilir. WDT'yi yeniden yüklemek için bir ISR kullanmak, bir pencere bekçi köpeğinin tüm nedenini geçersiz kılar.

ve bu :

STMicroelectronics'in yeni STM32F4 Cortex ™-M4 CPU serisinde iki bağımsız bekçi köpeği vardır. Biri kendi dahili RC osilatöründen çalışır. Bu, CPU'da her türlü şeyin çökebileceği ve WDT'nin hala tetikleneceği anlamına gelir. Kodun sık sık, ancak çok sık gıdıklamamasını gerektiren bir “pencere gözlemcisi” (WWDT) de vardır. Bu, koruma mekanizmasına rastgele yazılan çökmüş kodun WDT gıdıklamasına neden olmamasını sağlamak için çok etkili bir yoldur ve WWDT sıfırlama yapılmadan kısa bir süre önce bir kesme oluşturabilir.

tamam, referans kılavuzuna bir göz atalım :

STM32F10xxx, yüksek güvenlik seviyesi, zamanlama doğruluğu ve kullanım esnekliği kombinasyonu sunan iki adet gömülü bekçi köpeği çevre birimine sahiptir. Her iki bekçi çevre birimi (Bağımsız ve Pencere), yazılım hatası nedeniyle oluşan arızaları tespit etmeye ve gidermeye ve sayaç belirli bir zaman aşımı değerine ulaştığında sistem sıfırlamasını veya bir kesmeyi (yalnızca pencere gözcü) tetiklemeye yarar. Bağımsız bekçi köpeği (IWDG) kendi özel düşük hızlı saati (LSI) ile saatlenir ve böylece ana saat başarısız olsa bile aktif kalır. Pencere gözlemcisi (WWDG) saati APB1 saatinden önceden ayarlanmıştır ve anormal geç veya erken uygulama davranışını algılamak için programlanabilen yapılandırılabilir bir zaman penceresine sahiptir. IWDG, bekçi köpeğinin ana uygulama dışında tamamen bağımsız bir süreç olarak çalışmasını gerektiren uygulamalar için en uygunudur, ancak daha düşük zamanlama doğruluğu kısıtlamalarına sahiptir. WWDG, gözlemcinin doğru bir zamanlama penceresinde tepki vermesini gerektiren uygulamalara en uygun olanıdır.

Pencere gözlemcisi, genellikle harici girişim veya öngörülemeyen mantıksal koşullar tarafından üretilen ve uygulama programının normal sırasını terk etmesine neden olan bir yazılım hatasının ortaya çıkmasını tespit etmek için kullanılır. Watchdog devresi, program T6 biti temizlenmeden önce alt sayacın içeriğini yenilemediği sürece, programlanmış bir sürenin bitiminde bir MCU sıfırlaması oluşturur. Aşağı doğru sayıcı pencere kayıt değerine ulaşmadan önce (kontrol kaydında) 7 bit aşağı sayıcı değeri yenilenirse bir MCU sıfırlaması da oluşturulur. Bu, sayacın sınırlı bir pencerede yenilenmesi gerektiği anlamına gelir.

Gördüğünüz gibi, hiçbiri neden iki bekçi var demedi. Eğer her iki bekçi arasındaki farklar nelerdir diye sorarsam, yukarıda görebileceğiniz tüm özellikleri sayarsınız ve ikisini karşılaştırmak istiyorsanız, açıkçası Pencere bekçisi (WWDG) kazanan olacaktır! o zaman neden iki bekçi var?

IWDG'yi ne zaman ve WWDG'yi kullanmam gerektiğini bilmek istiyorum.

ve bize ikinci adı neden bu isimle çağırıyorlar -> "Pencere gözlemcisi" diye bir sebep var mı?

Yanıtlar:


23

Normal bekçi zamanlayıcılarının zaman aşımına uğramadan önce bir süre sıfırlanması gerekir. 100ms WDT'niz varsa her 99.9ms'de veya 10us'da bir sıfırlayabilirsiniz ve asla zaman aşımına uğramayacaktır.

Pencere izleme zamanlayıcılarının, içinde sıfırlanması gereken bir zaman penceresi vardır. Çok erken veya çok geç sıfırlarsanız (önceki sıfırlamadan itibaren) işlemcinin sıfırlanmasına neden olur.

Amaç açık değilse, WDT'yi sıfırlayan kodun amaçlanan kodda amaçlanan kod olmasını sağlamaya yardımcı olmaktır. Yüksek frekanslı WDT sıfırlamaları oluşturan bir tür öngörülemeyen durum, sistemin sıfırlanmasını engellemez.

WDT'nin sistem saatinden çalıştırılması biraz sorun olabilir - saat başarısız olursa ve bağımsız bir saat izleme devresi yoksa, kötü şeyler olabilir. WDT için bağımsız saat, herhangi bir nedenden ötürü 1/10 hızda çalışmaya başlarsa, WDT'nin sıfırlanacağı anlamına gelir (ancak WDT penceresi olmaz).

Mümkünse her ikisini de kullanın .

Sayfada belirtildiği gibi, WDT'yi bir ISR ile sıfırlamak genellikle kötü juju'dur (ancak ISR zamanlayıcıyı sıfırlamadan önce bellenimin sıfırlanmasının çalıştığını doğrularsa kabul edilebilir).


Gerçekten sistem saatinin başarısız olması mümkün mü? eğer olursa, o zaman anlayabiliriz. dolayısıyla, WDT kullanışlı değil, değil mi? o zaman neden bir endişe olacak?
Roh

1
Bağımsız WDT saati MCU'yu sıfırlama durumuna zorlarsa (ve bu durum güvenli ise) felaket önlenebilir. Kısa devre yapmış bir MCU kristali, ilk günlerde ciddi bir kazaya neden oldu (BART, IIRC).
Spehro Pefhany

1
@Roh: Aslında bu saat işlemcide uyku moduna girdikten sonra sistem saatinin geri gelmediğini gördüm (bir M0 olan bir STM32 F0). Belirli zamanlarda belirli şeyleri yaptığınızda PLL saatinin başlatılamayabileceği ve her şeyin 1/6 hızda çalıştığı ortaya çıkıyor.
Nathon

@Nathon Teşekkürler. ilginç. tamamen M0 serisinden nefret ediyorum. Her STM serisinin bir problemi var gibi geliyor.
Roh

7

Soruya yapıştırdığınız metin, ihtiyacınız olan cevapları verir.

  1. IWDG'yi basit bir bekçi köpeğine ihtiyacınız olduğunda veya tamamen bağımsız bir bekçi köpeğine ihtiyacınız olduğunda kullanırsınız - IWDG'nin kendi saati vardır, WWDG saatini otobüs saatlerinden birinden alır - başarısız olursa veya yazılımınız kapanırsa bekçi ölür.
  2. WWDG'yi yalnızca belirli bir zaman aralığında (pencere) sıfırlanabilen bir bekçi köpeğine ihtiyacınız olduğunda kullanırsınız. Yazılımınız WWDG'yi çok geç sıfırlarsa, WWDG işlemcinin sıfırlanmasını tetikleyecektir. Yazılımınız WWDG'yi ERKEN sıfırlarsa, işlemcinin sıfırlanmasına da neden olur.

Basit bir nedenden ötürü "pencere gözlemcisi" olarak adlandırılır, bu nedenle yalnızca belirli bir zaman aralığında (fırsat penceresi) sıfırlanan bir bekçi köpeği işlemcinizin işlemciyi sıfırlamasını engeller.

Her ikisi de benzer işler yapar, ancak farklı işler yaparlar. İhtiyacınız olan şey, karşılamanız gereken gereksinimlere bağlıdır.


lütfen Spehro Pefhany hakkındaki yorumumu okuyun.
Roh

1
WWDG'nin kullandığı zamanlayıcı programlanabilir - hızını yazılımınız aracılığıyla değiştirebilirsiniz. Yazılımınız kontrolden çıkarsa ve APB1 oranını değiştirirse, zaman penceresi yanlış olur ve bekçi işlemcinizi sürekli olarak sıfırlar - bekçi vurucunuz asla (veya sadece tesadüfle) bekçi köpeğini doğru zamanda tekmelemez. Programınız ayrıca APB1 saatini veya WWDG zamanlayıcısını tamamen devre dışı bırakabilir, bu durumda işlemcinizi asla sıfırlamaz.
JRE

5

Bunun yerine veya bağımsız bekçi köpeğine ek olarak pencere bekçi köpeğini kullanmanın başka bir nedeni vardır. WWDG'nin bağlayabileceğiniz bir kesinti vardır. Bu, kodun bir döngüye veya füg haline gelmesi durumunda, WWDG ISR'de bir kesme noktası ayarlayabileceğiniz ve köpek havladığında bellenimin ne yaptığını öğrenmek için geriye doğru çalışabileceğiniz anlamına gelir.

Bunu IWDG ile yapamazsınız. Adından da anlaşılacağı gibi, bu işlemciden bağımsız. Bir kesintiyi yükseltmek yerine, sadece neden havladığını gösteren birçok ipucu vermeyen / deasserts / RESET'i ileri sürüyor. Normal çalışma parametreleriniz dahilinde bir WWDG, artı çok daha uzun bir sürede bir IWDG, belki de maksimum 2 * WWDG ayarlamanız önerilir. İkisini de tekmeleyen bir kick-köpek işlevi oluşturun. Bu şekilde, IWDG yalnızca WWDG de kilitlendiğinde son bir yedek olarak havlar.


1

Benim almam:

Farklı başarısız durumları aradıkları için her ikisini aynı anda kullanın:

Bağımsız Watchdog (IWDG) zamanlayıcı ihtiyaçları ondan önce sürekli kez sıfırlanması. Pratikte, sıfırlama kodunu geçerli bir program durumunuzun olduğu her yere veya büyük bir gecikme olmadan sık sık yürütülmesi gereken bir ana döngünüz varsa ana döngüye bir kez ekleyebilirsiniz. Bu şekilde, zamanlayıcıyı sıfırlama çağrınız (buna bazen "sevişme", "gıdıklama veya sadece" izleme köpeği "" sıfırlama ") zamanında gelmezse, kodunuz da A) yanlışlıkla sıkışmış demektir Öngörülemediğiniz bir yerde --- bir tür öngörülemeyen sonsuz döngü tipi durum veya B) kasıtlı olarak ,assert()Bazı önemli koşullar doğru olmadığında kodun gitmesini istediğiniz katıştırılmış sonsuz döngü içeren işlev çağrısı . Yani, iddia koşulunuz yanlış olduğuna göre, kodunuz kasıtlı olarak sonsuz bir döngüde sıkışır ve bekçi köpeği geçerli bir duruma geri almak için mikrodenetleyiciyi sıfırlar. Ayrıca, "bağımsız bekçi köpeği (IWDG) kendi özel düşük hızlı saati (LSI) ile saatlendirildiğini ve bu nedenle ana saat başarısız olsa bile etkin kaldığını" unutmayın (bkz .

Ancak bana öyle geliyor ki, Window Watchdog (WWDG) zamanlayıcı , yukarıda açıklanan durumları (kodunuzun istemeden veya kasıtlı olarak [bir iddia yoluyla] "bir yere" takılıp kaldığı ") değil, daha spesifik olarak A) Kodunuz olması gereken bir şeyi yürütmez . Başka bir deyişle, ana döngüsünün veya diğer kod alt bölümlerinin çok hızlı yürütülmesine (veya tamamen atlanmasına) neden olan bir hata vardır, bu nedenle bekçi penceresini çok erken, penceresinin dışında sıfırlarsınız ve mcu sıfırlanır. Veya, B)tespit edebileceği diğer koşul başarısız bir zamanlayıcı kurulumudur. Belki de sabit bir aralıkta sıfırlıyorsunuz, ancak bu aralığı oluşturmak için kullanılan zamanlayıcınız yapılandırmasını yanlışlıkla olmaması gereken bir yerde değiştirir veya ilk etapta yanlış yapılandırırsanız, zaman aralığı kapanır, sabit zaman aralığı sıfırlaması WWDG'yi penceresinin dışında sıfırlar (çok erken veya çok geç) ve mcu sizi bilgilendirmek ve / veya durumu düzeltmek için sıfırlanır.

Bu benim almam. Düşünceler veya geri bildirim bekliyoruz.


0

"pencereli" bekçi köpeği sadece daha kötü programlama uygulamaları için nasıl koruduğu normal bir bekçi köpeğidir. Diğerlerinin söylediği gibi, genellikle "feed'inizin" sağlanması gereken yerlerde ayarlanabilir bir "zaman diliminiz" vardır.

Kodunuz otomatik olarak sürekli bir döngüye girebiliyorsa hiçbiri kurşun geçirmez değildir. Örneğin. Zamanlayıcı ile ilgili IRQ'lara dayalı olarak "beslemeyi" planlıyorsanız, kodunuz posta iş parçacığında bazı do / out'larda takılıp kalırken kesmeler WWDT'nizi doğru sırada besleyebildiğinden, bu son derece kötü bir uygulama olabilir.

Aslında, MIQ (Microchip) gibi normal yürütme kodu altında IRQ önceliğinizi düşürebilirseniz WWDT'yi beslemek için kesmeleri kullanabilirsiniz .

Kodunuz yaşam desteği, kritik vb. İse, hepsini bırakın ve harici WDT kullanın (Soru-Cevap tabanlı tercih edilir).

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.