Saya harus menghitung waktu perbedaan antara tinggi -> rendah dan rendah -> tepi sinyal tinggi pada pin GPIO. Saya telah menulis program sederhana yang melakukan ini. Setelah menjalankannya selama beberapa waktu saya cukup senang dengan hasilnya (variasi 0,01). Tetapi dari waktu ke waktu ada kesalahan seperti 0,5 s. Saya berpikir bahwa ini mungkin karena beberapa proses sistem lain yang berjalan pada saat itu. Jadi pertanyaan saya adalah:
Dapatkah saya memesan satu inti prosesor hanya untuk program saya dan membiarkan 3 core lainnya untuk sistem?
Saya menggunakan Raspbian Jessie Lite, jadi saya pikir 3 core akan cukup untuk menjalankannya.
operating-systems
process
Model NonStandard
sumber
sumber
Jawaban:
Mendedikasikan sebuah inti mungkin berlebihan.
Saya sarankan Anda mencoba perpustakaan pigpio saya . Secara default sudah saatnya tingkat GPIO berubah menjadi dalam 10μs.
Sebagai tes cepat saya sarankan Anda melihat contoh Python ini , yang akan mencetak setiap transisi tingkat GPIO dan waktu dalam mikrodetik sejak transisi terakhir pada GPIO itu.
pigpio tidak diinstal secara default di Jessie Lite. Baik instal yang terbaru dari situs tertaut atau instal versi yang lebih lama di repositori.
sudo apt-get install pigpio python-pigpio python3-pigpio
sumber
Anda dapat mengunci program Anda ke satu inti menggunakan
schedutils
seperti yang dijelaskan dalam artikel Cyberciti ini :Namun, proses lain masih dapat dijadwalkan pada inti yang sama. Jadi hal kedua yang harus dilakukan adalah memastikan perintah Anda berjalan dengan prioritas tertinggi menggunakan perintah yang bagus (ini akan memberi tahu kernel Linux bahwa proses lain harus dilakukan terlebih dahulu jika perlu). Mulai program Anda dengan cara ini:
Ada beberapa kemungkinan alasan lain untuk masalah waktu Anda. Ini tidak mudah untuk dilakukan:
Ada beberapa cara untuk membuat proses Anda realtime , yang artinya akan berjalan dengan jaminan waktu tertentu. Masalah dengan ini adalah bahwa segala sesuatu yang lain mungkin lebih lambat, dan itu adalah topik yang kompleks. Jika Anda ingin turun ke lubang kelinci ini, saya sarankan Anda mulai membaca tentang proses waktu nyata di Linux .
sumber
Karena Anda memiliki persyaratan waktu, Raspberry Pi bukan lagi platform yang tepat untuk ini. Ini bukan platform waktu nyata dan waktu dapat dibuang oleh banyak sumber gangguan yang berbeda.
Sebagai gantinya Anda harus menggunakan mikrokontroler untuk mengukur waktu ini, lebih disukai menggunakan interupsi, dan meneruskan informasi tersebut ke Pi nanti.
sumber
Sesuai kebutuhan Anda, saya tidak berpikir Anda perlu menggunakan prosesor inti tunggal. Yang Anda butuhkan adalah memastikan program Anda berjalan setiap saat. Untuk mencapai itu, Anda dapat mengatur prioritas program Anda sangat tinggi, sehingga tidak terganggu oleh proses lain.
Sejauh yang saya tahu OS (General Purpose OS), yang kami gunakan tidak dirancang untuk digunakan dalam sistem waktu nyata, jadi jika Anda ingin menjalankan proses Anda secara real time sehingga tidak ada proses lain yang mengganggu itu, Anda harus pergi untuk Real Time OS (RTOS). Mungkin mereka akan datang dengan seleksi inti. :)
sumber