Unit menguji bahasa rakitan AVR


11

Bagaimana Anda menguji kode perakitan Anda?

Saya sedang mengerjakan serial servo controller sebagai bagian dari proyek robot hexapod dan kode telah sampai pada titik di mana ia menjadi rumit;) Lagi pula, saya terbiasa menggunakan tes unit dalam pekerjaan saya sebagai pengembang server C ++ dan jadi telah mencoba menerapkan jenis pengujian yang sama untuk kode perakitan AVR saya. Saya telah menemukan cara yang berfungsi baik untuk saya (lihat di sini ) tetapi saya tertarik jika ada alat atau teknik standar yang saya lewatkan.

Diperbarui: Bagi Anda yang tertarik, sumber lengkap untuk pengontrol servo dan unit test sekarang tersedia di sini .

Jawaban:


3

Saya juga akan menggambarkan ini sebagai elegan, tetapi ingin menambahkan masalahnya, jika Anda memaafkan gangguan saya.

Saya tahu ada paket perangkat lunak yang sangat mahal untuk bekerja melalui situasi seperti ini, tetapi di perusahaan tempat saya bekerja kami tidak mampu membayar biayanya kecuali kami yakin itu melakukan apa yang kami butuhkan.

Test Driven Development (TDD) adalah salah satu sistem yang lebih baik yang pernah saya dengar untuk pengembangan, dan saya menikmatinya, tetapi masalah yang menyita waktu saya biasanya disebabkan oleh gangguan yang kompleks dan peristiwa perangkat keras yang oleh banyak orang disebut gangguan. Sepertinya masalah kecil memiliki masalah setiap 2 jam ketika bintang-bintang sejajar, tetapi jika ponsel Anda hanya membeku seminggu sekali, Anda akan mengutuk nama insinyur. Dalam kasus kami, kami harus melakukan perjalanan ke tempat pemberian makan ketika hal-hal benar-benar pecah, yang, seperti yang dapat Anda bayangkan, saya ingin hindari.

Saya telah melihat solusi yang sangat cerdas untuk memeriksa fungsionalitas subsistem, yang, jika diterapkan dengan benar, mungkin akan menyelamatkan saya 3 jam dari 50 jam kerja seminggu, tetapi jika ada cara cerdas untuk menemukan situasi kesalahan itu akan menghemat saya minggu kerja mencari "bug" yang terjadi di lapangan sesekali di bawah beban berat.

Posting ini mungkin tidak membantu dalam jumlah besar, tetapi saya menemukan membawa segalanya ke dalam cahaya membuat segalanya lebih mudah untuk diselesaikan. Jika ada metode TDD untuk menemukan situasi kesalahan, saya bisa mendapatkan 10 ribu dari yang dialokasikan untuk membayarnya. -Max


1
Saya belum benar-benar berpikir tentang pengujian interaksi antara kode interupsi dan kode non interupsi. Ini poin yang bagus. Saya berencana menguji kode interupsi timer pembangkit PWM saya di luar situasi interupsi dengan cara yang mirip dengan cara saya menguji kode seri saluran utama saya. Saya kira bahkan setelah saya memiliki cakupan untuk semua itu saya masih kehilangan interaksi. Saya kira saya bisa memicu interupsi dari dalam tes (mudah dengan interupsi timer tetapi semua kode interupsi dapat diatur untuk berjalan pada interupsi timer dalam harness tes). Tidak sepele sekalipun.
Len Holgate

1
Saya mungkin salah paham dengan Anda, tetapi saya mencoba untuk berhati-hati terhadap interaksi kode yang tidak mengganggu dan mengganggu. Saya mungkin harus lebih lemah dalam penggunaan operasi atom, tetapi tidak pernah terbukti menyebabkan kerusakan pada tingkat saya memiliki pengoptimal kami. Masalah muncul ketika satu interupsi menunda yang lain, yang umum saya bantu dengan siswa akan mengganggu generasi PWM. Jika Anda membutuhkan kecepatan yang sangat akurat, misalnya menggunakan modul Bandingkan di chip Anda, dan gangguan lain sibuk menghabiskan waktu untuk hal lain dan menunda Anda hingga 50uS yang mungkin berakhir di dunia.
Kortuk

1
Dalam beberapa kasus Anda dapat memiliki prioritas, atau Anda bahkan dapat memiliki menonaktifkan interupsi itu sendiri dan mengaktifkan kembali interupsi global secara internal, tergantung pada platform, tetapi jalur termudah untuk pengembangan saya sendiri adalah membatasi waktu dalam mengganggu hal-hal yang benar-benar diperlukan dan memiliki kode normal melakukan sisa pekerjaan.
Kortuk

1
Desain saya saat ini dijelaskan di blog saya, sebagaimana desain baru yang diusulkan. Saat ini saya memiliki 64 saluran PWM yang dihasilkan oleh interupsi timer dan tidak ada interupsi lainnya; serial dilakukan dengan polling. Ini berarti PWM sangat solid tetapi serial mungkin memiliki masalah. Desain baru saya akan menggunakan interupsi untuk UART serta timer untuk pembangkit PWM dan reenabling hati-hati dan memblokir interupsi untuk memastikan kesalahan PWM gratis dan glitch pengolahan UART bebas ...
Len Holgate

2
Saya menggunakan PWM sebagai contoh, sistem saya memiliki masalah ini pada memiliki 3 antarmuka SPI dengan 1 dari koneksi SPI memiliki 3 chip yang kami gunakan di dalamnya. Ada 4 interupsi port berbeda yang menginformasikan perubahan status chip eksternal dan beberapa hal lain yang terjadi. Masalahnya menjadi lebih buruk semakin banyak antarmuka yang Anda miliki.
Kortuk

2

Menarik. Setelah Natal saya berencana melihat melakukan Assembler dengan Pics, ketika saya punya sedikit waktu lagi saya akan melihat sistem Anda.

Salah satu cara yang saya bisa lihat adalah dengan skrip semacam kerangka kerja dalam bahasa yang berbeda untuk membuat dan merobohkan objek tiruan dll, tetapi bagaimana Anda akan antarmuka ini ke chip / simulasi akan menjadi masalah.

Jika itu menjadi terlalu berat, maka itu akan lebih besar daripada manfaat dari pengujian unit dan juga membuat Anda kurang tertarik untuk menggunakannya.


Mengerjakannya di dalam simulator adalah rintangan awal saya sampai saya menemukan cara memecah kode menjadi file yang terpisah dan cukup "mengejek" beberapa label yang akan saya lompati dalam kode sebenarnya. Saya akan memposting semuanya setelah saya selesai. Perkuatan unit test ke kode membutuhkan waktu tetapi itu sangat berharga.
Len Holgate

Sekarang saya sudah memiliki kesempatan yang tepat untuk melihat metodologi Anda, saya pikir itu cukup elegan. Mungkin saya akan melihat avrs setelah Natal, karena tampaknya ada lebih banyak hal berbasis komunitas untuk mereka daripada untuk Pics. Ide apa pun yang mungkin merupakan IDE Linux yang layak untuk pemrograman AVR Assembler.
Amos

1
Ada rantai alat GNU yang dapat Anda gunakan sebagai pengganti AVR Studio (yang merupakan perangkat gratis Atmel). Mungkin bisa menjalankannya di Linux, tetapi saya tidak perlu melakukannya.
Len Holgate

Baru saja menemukan tautan ini ke artikel Linux Journal tentang pengembangan untuk AVR di Linux: linuxjournal.com/article/7289
Len Holgate

Perhatian utama saya dengan artikel itu adalah bahwa artikel ini berasal dari tahun 2005 dan mungkin sudah ketinggalan zaman.
Amos
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.