Birim testi AVR montaj dili


11

Montaj kodunuzu nasıl birim test ediyorsunuz?

Bir hexapod robot projesinin bir parçası olarak bir seri servo denetleyicisi üzerinde çalışıyorum ve kod karmaşık hale geldiği noktaya var;) Her neyse, bir C ++ sunucu geliştiricisi olarak benim günlük işinde birim testleri kullanmaya alışkınım ve bu yüzden aynı tür testleri AVR montaj koduma uygulamaya çalışıyorum. Benim için uygun bir şekilde çalıştım ( buraya bakın ) ama eksik olduğum herhangi bir standart araç veya teknik varsa ilgileniyorum.

Güncellenmiş: Servo denetleyiciye tüm kaynağı ve birim testlerini merak edenler için burada .

Yanıtlar:


3

Bunu zarif olarak da tarif ederdim, ancak izinsiz girişimi affederseniz sorunu eklemek istiyorum.

Bu gibi durumlarda çalışmak için çok pahalı yazılım paketleri olduğunu biliyorum, ancak çalıştığım şirkette ihtiyacımız olanı yapmadığından emin olmadıkça maliyeti karşılayamıyoruz.

Test Odaklı Geliştirme (TDD), geliştirme için duyduğum daha iyi sistemlerden biridir ve bundan hoşlanıyorum, ancak zamanımı alan sorunlara normalde birçok kişinin aksaklık dediği karmaşık kesme ve donanım olayları neden oluyor. Yıldızların hizalandığı her 2 saatte bir sorun yaşamak küçük bir şey gibi görünüyor, ancak telefonunuz haftada bir kez donarsa, mühendislerin adını lanetlersiniz. Bizim durumumuzda, işler gerçekten kırıldığında bir yem partisine girmemiz gerekiyor, ki tahmin edebileceğiniz gibi kaçınmayı seviyorum.

Alt sistemlerin işlevselliğini kontrol etmek için çok akıllı çözümler gördüm; bu, düzgün bir şekilde uygulandığında, muhtemelen 50 saatlik bir çalışma haftasından 3 saat sonra beni kurtaracaktı, ancak aksaklık durumlarını bulmanın akıllı bir yolu olsaydı, haftalarca işten tasarruf edeceğim ağır yük altında zaman zaman alanda meydana gelen "hata" arıyor.

Bu yazı muhtemelen büyük miktarda yardımcı olmuyor, ancak her şeyi ışığa getirmenin her şeyin çözülmesini kolaylaştırdığını düşünüyorum. Aksaklık durumlarını bulmak için bir TDD yöntemi olsaydı, bunun için ödeme yapmak için 10 bin binlerce tahsis edebilirim. -Max


1
Kesinti kodu ve kesilmeyen kod arasındaki etkileşimi test etmeyi gerçekten düşünmedim. İyi bir nokta. Ana hat seri kodumu test etme yöntemime benzer şekilde, PWM nesil zamanlayıcı kesme kodumu kesintiye uğrayan bir durumun dışında test etmeyi planlıyordum. Sanırım bunların hepsini kapsadığımda bile etkileşimi hala kaçırıyorum. Testlerin içinden kesintileri tetikleyebileceğimi varsayalım (zamanlayıcı kesmesi ile kolay, ancak tüm kesme kodu test koşumundaki bir zamanlayıcı kesmesinde çalışacak şekilde ayarlanabilir). Gerçi önemsiz değil.
Len Holgate

1
Sizi yanlış anlayabilirim, ancak kesinti ve kesinti kod etkileşimlerine oldukça dikkat etmeye çalışıyorum. Atomik operasyonları kullanmamda muhtemelen daha gevşek olmalıyım, ancak optimize edicimiz olduğu seviyede hiçbir zaman zarar verdiği gösterilmedi. Bir kesintinin diğerini geciktirmesi durumunda ortaya çıkan sorunlar, öğrencilere yardım ettiğim yaygın bir sorun, kesintiye dayalı PWM nesli olacaktır. Çok hassas bir hıza ihtiyacınız varsa, örneğin çipinizde bir Karşılaştırma modülü kullanmak ve başka bir kesinti başka bir şeye zaman harcamakla meşgulse ve dünya sonu olabilecek 50 uS geciktirir.
Kortuk

1
Bazı durumlarda önceliğe sahip olabilirsiniz veya hatta bir kesmenin kendisini devre dışı bırakabilir ve global kesmeleri dahili olarak yeniden etkinleştirebilirsiniz, platforma bağlı, ancak kendi gelişimim için en kolay yol, kesinti gerektiren şeylere zaman ayırmaktır ve normal kod işin geri kalanı.
Kortuk

1
Mevcut tasarımım, önerilen yeni bir tasarım gibi blogumda açıklandı. Şu anda bir zamanlayıcı kesmesi ile oluşturulan 64 kanal PWM var ve başka kesintiler yok; seri yoklama ile yapılır. Bu, PWM'nin kaya gibi sağlam olduğu, ancak dizinin sorunları olabileceği anlamına gelir. Yeni tasarımım, UART için kesilmelerin yanı sıra PWM üretimi için zamanlayıcı ve aksaklık içermeyen PWM ve aksaklık içermeyen UART işlemeyi sağlamak için kesintilerin dikkatli bir şekilde yeniden etkinleştirilmesi ve engellenmesi ...
Len Holgate

2
Örnek olarak PWM kullanıyordum, bu problemi yaşadığım sistemde, üzerinde kullandığımız 3 çip bulunan SPI bağlantılarından 1 tanesi ile 3 SPI arayüzü var. Dış yongaların durumundaki değişimi ve devam eden birkaç şeyi bildiren 4 farklı bağlantı noktası kesintisi vardır. Daha fazla arayüze sahip olduğunuzda sorun daha da kötüleşir.
Kortuk

2

İlginç. Noel'den sonra Pics ile biraz Assembler yapmayı planlıyordum, biraz daha zamanım olduğunda sisteminize iyi bakacağım.

Gördüğüm bir yol, sahte nesneler vb oluşturmak ve yıkmak için farklı bir dilde bir tür çerçeve komut dosyası olacaktır, ancak bunu nasıl çip / simülasyon ile arayüz olurdu bir sorun olacaktır.

Yine de çok zahmetli hale gelirse, bu birim testin avantajlarından daha ağır basacak ve sizi daha az kullanmaya istekli olacaktır.


Ben simülatör içinde çalışmak için benim ilk engel oldu nasıl ayrı dosyaları içine kodu parçalamak ve sadece gerçek kod atlamak olurdu bazı etiketleri "alay" kadar çalıştı. İşim bittiğinde her şeyi göndereceğim. Ünite testlerinin koda uyarlanması biraz zaman alıyor ancak buna değdi.
Len Holgate

Şimdi metodolojinize bakmak için uygun bir şansım olduğuna göre, bence oldukça zarif. Belki de Noel'den sonra avrs'a bir göz atacağım, çünkü Pics'ten daha çok topluluk tabanlı şeyler var gibi görünüyor. AVR Assembler programlama için iyi bir Linux IDE hakkında herhangi bir fikir.
Amos

1
AVR Studio (Atmel'in ücretsiz araç takımı) yerine kullanabileceğiniz bir GNU takım zinciri var. Muhtemelen bunu Linux'ta çalıştırmak mümkündür, ama buna ihtiyacım yoktu.
Len Holgate

Linux altında AVR için geliştirme hakkındaki bir Linux Journal makalesine şu bağlantıyı buldum: linuxjournal.com/article/7289
Len Holgate

Bu makaleyle ilgili asıl endişem, 2005'ten beri olması ve güncelliğini yitirmiş olması.
Amos
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.