Untuk yang pertama saya ingin menyebutkan bahwa saya pemula dalam pemrograman sistem real-time. Itu sebabnya saya tidak yakin apakah pertanyaan saya benar. Maaf untuk itu Tapi saya butuh bantuan
Pertanyaan singkatnya: Bagaimana menerapkan perangkat lunak waktu nyata yang keras untuk memastikannya memenuhi tenggat waktu yang sulit? Apakah perlu menggunakan beberapa fitur QNX? Atau hanya cukup untuk menulisnya untuk linux, port ke QNX dan itu akan secara real-time secara default?
Pertanyaan lengkap: Kami telah mengimplementasikan beberapa perangkat lunak multi-platform lintas platform yang kompleks dengan komunikasi antar-proses untuk Linux, Windows, Android dan QNX. Bahasa pemrogramannya adalah C ++, kami menggunakan Boost dan planty libs lainnya. Perangkat lunak kami melakukan pekerjaan dengan baik dan cepat tetapi masih berupa prototipe. Untuk keperluan produksi, kita perlu melakukannya dalam waktu nyata. Beberapa fitur kita harus dalam waktu nyata dan sangat kuat karena sangat penting dan keselamatan orang yang menggunakan perangkat lunak kita mungkin bergantung padanya. Mereka bekerja sangat cepat - hingga ratusan milidetik. Tetapi saya tidak yakin bahwa sistem kami benar-benar real-time karena fakta ini (apakah saya benar?).
Jadi ada pertanyaan utama: bagaimana cara memodifikasi perangkat lunak kita menjadi waktu nyata? Saya sudah banyak mencari di Google tetapi saya masih tidak tahu bagaimana melakukannya.
Beberapa informasi tambahan tentang platform kami: Linux dan Windows yang saat ini kami gunakan hanya untuk tujuan pengujian. Android - kami masih belum memutuskan apakah kami membutuhkannya. QNX - adalah OS target kami untuk produksi. Saya kira jawaban untuk pertanyaan saya berikutnya adalah "TIDAK" :) Tetapi apakah mungkin untuk menggunakan perangkat lunak real-time lintas platform (untuk OS real-time (RTOS) serta untuk keperluan umum OS (GPOS))?
Mungkin kita perlu melakukan upaya untuk mengimplementasikan semua fitur waktu-nyata hanya untuk QNX? Tetapi saya masih tidak mengerti bagaimana melakukannya. Bisakah seseorang menjelaskan pertanyaan ini?
Jawaban:
Puasa tidak berarti waktu-nyata dan waktu-nyata tidak berarti puasa.
Real-time berarti bahwa tanggal ketika hasil dikirimkan sama pentingnya dengan nilainya. Dengan kata lain, jika hasilnya memiliki nilai yang benar tetapi disampaikan terlalu dini atau terlalu terlambat, maka keseluruhan hasilnya salah.
Misalnya, pikirkan pemutar video. Jika bingkai video tidak ditampilkan pada kecepatan yang tepat, pengguna tidak akan puas. Lebih buruk lagi jika gambar dan suara tidak sinkron.
Contoh ini menunjukkan bahwa beberapa aplikasi waktu nyata dapat diimplementasikan pada OS tujuan umum saat ini.
Tetapi ada perbedaan antara waktu nyata keras dan waktu nyata lunak sehubungan dengan konsekuensi dari tenggat waktu yang terlewatkan: dalam sistem waktu nyata yang lunak, ini hanya gangguan atau layanan yang rusak (pikirkan gambar yang dibekukan selama beberapa detik dalam contoh pemutar video), sedangkan itu adalah (berpotensi bencana) kegagalan dalam sistem waktu nyata, seperti di pembangkit listrik tenaga nuklir.
sumber
Seperti yang sudah dikatakan @mouviciel , real-time dan cepat adalah dua properti independen, walaupun banyak tenggat waktu real-time menyiratkan bahwa diperlukan respons yang relatif cepat.
Saat menulis perangkat lunak waktu nyata, properti paling penting di sebelah respons yang benar adalah bahwa Anda dapat memprediksi secara akurat seberapa cepat respons akan diberikan. Untuk fitur waktu nyata yang keras, Anda bahkan harus dapat memastikan bahwa tenggat waktu akan dipenuhi dalam semua kondisi yang mungkin terjadi, kecuali terjadi kegagalan daya total.
Sumber khas ketidakpastian dapat ditemukan di
Saya tidak mengatakan bahwa Anda harus menghindari area tersebut (karena kemungkinan besar Anda tidak bisa), tetapi Anda harus menyadari bagaimana mereka dapat mempengaruhi kemudahan yang Anda dapat memprediksi bahwa Anda akan memenuhi tenggat waktu real-time untuk fitur yang relevan.
sumber
Saya kira penjelasan dua kalimat dari realtime adalah bahwa sistem realtime dirancang untuk memahami dan mengendalikan yang terburuk waktu respon dari input berubah untuk output berubah.
Itu membutuhkan analisis yang mencakup keseluruhan sistem. Katakanlah Anda memiliki sistem sepele yang terdiri dari keyboard USB dan servo rem. Responsif apa yang dapat Anda capai dengan sistem ini? Anda mungkin harus mempertimbangkan:
Dalam lingkungan semacam ini biasanya juga ada pertimbangan khusus untuk keandalan, seperti standar MISRA C.
sumber
avoiding use of garbage collection
- Ini seharusnyaavoiding use of non-deterministic memory management
. Pengumpulan sampah dapat dilakukan secara real-time dan manajemen memori manual belum tentu deterministik (lihatmalloc
implementasi khas untuk C).