Bütün tuzaklar daima tanımlanmalı mıdır?


18

Tanımlanmamış bir tuzak nedeniyle denetleyicinin sıfırlandığı dsPIC 30F4013 ile iki durum gördüm. Bu tuzakların neden ilk başta yetiştirildikleri hala bir gizem, ama bu benim acil sorum değil. Tuzaklar asla olmamalı olsa bile, her zaman tüm tuzakları tanımlamak için iyi bir programlama uygulaması olacağını düşünmeye başladım , bu yüzden rastgele sıfırlama yerine en azından açık bir hata mesajı alıyorum. Bu farkında olmadığım standart bir uygulama mı? Bu uygulamanın dikkate almam gereken dezavantajları var mı?


4
Sorunuza bir cevap değil, ama kısa bir süre önce dsPIC ve PIC24 sistemlerinde bu tür belirtiler yaşadım. Benim durumumda tuzaklar, işaret bitlerini 16 bit değerlere atıfta bulunduğum kod parçalarından kaynaklandı ve dairesel bir comms arabelleğine işaret ettikleri için bu işaretçilerin kendileri tek (çift değil) değerlere sahipti - ve daha önce hiç 16 bit değerinin tek veya çift bir sınırda başlayıp başlamayacağını bilmenin yolu. XC16 derleyici sizi buradaki donanımın askıya almasından korumaz. 2 8-bit işaretçi de-refs zorlayan bu işlevler için bir sarıcı makro yazma sona erdi.
brhans

Yanıtlar:


13

Gayri resmi kuralım:

  1. Bir kesme etkinse, onu işleyen bir kodunuz olmalıdır.
  2. Bir kesinti için kod yazmazsanız, devre dışı bırakın.
  3. Devre dışı bırakamazsanız, kodunu yazın.

Bu kural olmasa bile, veri sayfası sorunuza açıkça cevap verir:

Kullanıcı bir tuzak hatası durumunda düzeltici eylemde bulunmazsa, bu vektörler yalnızca RESET komutunu içeren bir varsayılan işleyicinin adresiyle yüklenmelidir. Öte yandan, geçersiz adres içeren vektörlerden biri çağrılırsa, bir adres hatası tuzağı oluşturulur.

( Kaynak , bölüm 8.3, ilk not)

Bunu göz önüne alındığında olamaz tuzakları maske, o zaman gerekir bunları işlemek. Tuzakla belirli bir şekilde uğraşmak istemiyorsanız, uygun yöntem bir RESETtalimat yürütmektir .


Evet. Tüm tuzaklar için hedefleri olan standart bir modülüm var.
Olin Lathrop

16

Evet, bu iyi bir fikir - tek dezavantajı biraz ekstra kod boyutu ve tuzak ile ne yapacağınıza karar vermelisiniz (seri portta bir mesaj yayınla? "BAŞARISIZ" ışığı aç? Sessizce yeniden başlat? Vb. )


4
İşlemciyi genellikle sonsuz bir NOP / GOTO döngüsünde çalıştırıyorum. Bu şekilde yığın tuzaktan bozulmadı ve hata ayıklama sırasında onu çözme ve ne olduğunu bulma şansım var. Sık sık tuzak alamıyorum, ancak zamanın% 80'i garip bir adres tuzağı, çünkü genellikle çöp işaretçi olarak yüklendi. Bazen yığın işaretçisi bozulur ve tek adres tuzakları üretir. Yığın artık orada olmadığı için bunların hata ayıklaması daha zordur. Neyse ki, bu çok nadir.
Olin Lathrop
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.