Pertimbangkan bahwa tim perangkat keras akan membutuhkan waktu 2 bulan untuk mengembangkan beberapa perangkat keras, tetapi pada saat itu saya perlu menyiapkan perangkat lunaknya.
Pertanyaan saya adalah bagaimana saya bisa menulis perangkat lunak dan mengujinya tanpa memiliki perangkat keras?
Apakah ada standar yang harus diikuti? Bagaimana Anda melakukannya?
exit()
karena mencoba untuk mmap alamat hardcoded di / dev / mem.Jawaban:
Tidak memiliki perangkat keras selama tahap awal pengembangan firmware terjadi. Strategi umum untuk menghadapi ini adalah:
Di sinilah desain modular membantu lagi. Jika Anda tidak dapat secara wajar mensimulasikan beberapa interaksi perangkat keras tingkat rendah, Anda menggunakan versi berbeda dari modul yang menyentuh perangkat keras itu tetapi yang meneruskan tindakan simulasi sendiri ke tingkat atas. Level atas tidak akan tahu ini sedang terjadi. Anda tidak akan memeriksa modul tingkat rendah dengan cara ini, tetapi sebagian besar yang lainnya.
Singkatnya, gunakan praktik desing perangkat lunak yang baik, yang tentu saja harus Anda lakukan juga.
sumber
Tanpa wawasan apa pun yang sedang Anda kembangkan, atau keluarga mikrokontroler yang akan menjadi basis perangkat keras Anda, sebagian besar keluarga mikrokontroler memiliki sistem pengembangan berbiaya rendah yang memiliki serangkaian periferal umum padanya, yang memungkinkan Anda untuk mensimulasikan setidaknya beberapa perangkat keras target Anda.
sumber
Tergantung pada bagaimana perangkat keras tergantung pada aplikasi yang akan terjadi, Anda bisa mulai mengimplementasikan proyek pada pc standar (Windows, Linux ...). Sebagian besar akses periferal harus diabstraksikan, jadi ini bukan masalah besar untuk mengimplementasikan beberapa fungsi dummy, yang akan diganti nanti. Jika tidak mungkin untuk mensimulasikan beberapa perilaku, Anda setidaknya bisa melakukan mockup sistem (API ...), sehingga implementasi aktual akan berjalan jauh lebih cepat dan lebih jelas, segera setelah perangkat keras siap.
Tentu saja ada banyak hal yang tidak dapat disimulasikan, seperti perilaku waktu nyata atau driver perangkat keras yang kompleks. Di sisi lain, ADC yang didorong oleh interupsi dapat dengan mudah disimulasikan menggunakan utas yang membaca nilai dari file atau port jaringan.
Tentu saja semua ini sangat tergantung pada berbagai faktor:
Saya, untuk satu merancang hampir setiap modul firmware pada pc terlebih dahulu.
sumber
Cobalah untuk mendapatkan simulator untuk chip Anda. Anda harus mensimulasikan semua input yang diharapkan dan beberapa yang tidak terduga juga. Modularisasi / abstrak sejauh yang Anda bisa dan tulis unit test. Jika Anda bisa, tes tersebut dapat menjadi bagian dari kode Anda yang sebenarnya dan itu berubah menjadi fitur (tes mandiri papan).
Jika Anda tidak bisa mendapatkan simulator, abstrak sebanyak yang Anda bisa melalui HAL (lapisan abstraksi perangkat keras). Semua pengemudi berada di belakangnya. Cobalah untuk mengabstraksikan semua rakitan khusus platform di belakang beberapa panggilan fungsi C dan menganggapnya sebagai driver juga. Tulis sisanya sebagai kode C / C ++ portabel dan buatlah HAL tipis untuk x86 dan jalankan di mesin Anda dengan semua case uji.
Dengan begitu, ketika Anda mendapatkan perangkat keras Anda hanya perlu men-debug HAL. Semakin tipis, semakin cepat Anda akan men-debug dan semuanya berfungsi. Ingat bahwa jika Anda menggunakan rakitan khusus platform untuk operasi yang lebih cepat, Anda INGIN SANGAT BANYAK untuk mendapatkan tes yang tepat .
sumber
a == b
perbandingan dengan pelampung, tetapi mereka masih menggunakannya tanpa berpikir dengan angka titik tetap.Pertanyaan Anda agak luas. Perangkat Keras (HW) dapat berarti pengembangan ASIC / FPGA kustom penuh, DSP yang diprogram assembler, atau "hanya" sistem tertanam yang khas yang didasarkan pada mikroprosesor off-the-shelf / mikrokontroler / SoC dll. (Tentu saja SoC mungkin juga berisi DSP Anda mungkin ingin memprogram ....). Untuk jumlah penjualan yang tinggi, menjadikannya ASIC tidak biasa.
Tetapi untuk proyek 2 bulan saya berharap ini didasarkan pada beberapa mikrokontroler:
Bagaimanapun, Anda harus menekankan tim perangkat keras untuk memberi Anda prototipe Anda dapat mulai menguji kode Anda sebelum batas waktu absolut - ini mungkin hanya terdiri dari papan pengembangan generik, seperti beberapa orang telah sebutkan, tetapi menurut saya itu adalah milik mereka pekerjaan untuk menyediakan yang tepat untuk Anda, dan berpotensi juga beberapa periferal yang diperlukan / serupa untuk pengujian.
Simulator juga mungkin sampai batas tertentu, tetapi Anda mungkin masih perlu mengkarakterisasi beberapa sensor / data dunia nyata yang mungkin Anda dapatkan. Di sini tim perangkat keras juga perlu setidaknya membantu Anda.
Selain itu, desain perangkat lunak dapat dilakukan dan semua modul tingkat tinggi dapat (dan harus) diimplementasikan dan diuji unit tanpa perangkat keras yang sebenarnya. Idealnya, Anda juga akan mendefinisikan API bersama dengan tim perangkat keras, dan mereka akan memberi Anda fungsi tingkat terendah, sehingga setiap perubahan yang mereka lakukan pada sisi perangkat keras di sana (misalnya hanya mendefinisikan ulang pin port yang mereka gunakan), tidak akan selalu menjadi penting bagi Anda.
Dalam semua kasus, komunikasi adalah kuncinya.
sumber
Ya, Anda dapat Mengembangkan kode Anda untuk papan target Anda sebelum papan mereka bisafactured.
Bagaimana?
Pertama, Anda harus tahu tujuan utama sistem itu. Jadi dari ini Anda dapat memilih controller dengan tepat dari sumber yang luas seperti digikey, mouser.
Dan Pilih simulator seperti Proteus. Ini akan mensimulasikan prosesor / pengontrol yang tepat sekarang Anda dapat memulai pengkodean. Tapi Anda tidak bisa mengharapkan akurasi seperti pada perangkat keras.
sumber