2015-03-15 21 views
5

Soru, bir satırdaki bir problemi tanımlamak zor olduğu için bulanık görünüyor. Bir PID regülatörü çalıştırmak için Debian on Raspberry Pi'yi kullanıyorum, bu da her bir PID çıkışı hesaplandığında dt (döngü yürütmeleri arasında zaman farkı) elde edildi. Temel olarak dt bu şekilde hesaplanır.Linux, bir eylem için ne kadar zaman alır?

oldtime_ = time_; 
    clock_gettime(CLOCK_MONOTONIC, &time_); 
    Timer.dt = ((static_cast<int64_t>(time_.tv_sec) * 1000000000 + static_cast<int64_t>(time_.tv_nsec)) - (static_cast<int64_t>(oldtime_.tv_sec) * 1000000000 + static_cast<int64_t>(oldtime_.tv_nsec)))/1000000000.0; 

PID ikinci 400 kez etrafında güncellenir ve gayet güzel gidiyor, ama bazen Linux bir eylem yapmak için çok fazla zaman almaya karar verir. Sonuç, çok sayıda dt'dir, diyelim ki, 1/400 = 0,0025 değil, gerekli olandan 320 kat daha fazla bir 0.8'dir. Sonuç, yanlış PID hesaplamasıdır. Bu böyle görünüyor. enter image description here

Ben gerçek zamanlı sisteme biraz daha yakın raspbian taşıma cevabını isteriz. yardımcı olduk

DÜZENLEME

sayesinde anaken78 ve herkes. RR_FIFO programının kullanılması mükemmel bir şekilde çalıştı ve işlem hızı her zaman 380-400hz oldu. enter image description here

+0

, ben TSC çarpık önlemek için (varsa) doğrudan TSC kullanın ve (sistem çok çekirdekli ise) tek bir çekirdek için sürecinizi pin öneriyoruz. – erenon

+0

Şimdiye kadar neler denediniz? Bu gereksinim tamamen yeni bir benzersiz değil ve zaten aramak için anahtar kelimeleri bilmek gibi görünüyor. Ayrıca, zamanlayıcı kesin değil mi yoksa programlayıcı mantığınızla uğraşır mı? –

+0

Sistem tek başına özdeştir. Sorun programlayıcıyı karıştırıyor, bu yüzden TSC'yi doğrudan kullanıp kullanmamaya yardımcı olacağından emin değilim, ancak TSC'yi çalıştırmanın doğrudan programlayıcıya daha yüksek bir öncelik vermesi durumunda bir deneme yapacağım. Dediğim gibi, soru google için benim için bulanık görünüyor. Denediğim tek anahtar kelime "gerçek zamanlı", ama henüz RTlinux veya gerçek zamanlı çekirdekler kullanmadım. Debian etrafında dans etmek sonuç vermezse bunu yapacağım. – user3081123

cevap

2
I Ahududu pi 2. orijinal Ahududu pi ile problem orijinal Ahududu pi kullanılarak değildir ve varsayarak

etkili olduğunu RT hesaplama her türlü (yol anlamına gelen tek çekirdekli ARM11 cpu kullanmasıdır Yapıyorsunuz) donanım kesintileri nedeniyle hata yapmak zorunda kalıyorsunuz. Örneğin, Wifi üzerinden gelen paketler sisteminizi kesebilir ve bu da bir soruna neden olabilir. Eğer hiçbir ağ bağlantısı olan ince olup olmadığını, deneyebilirsiniz

olası bir şey, sizin süreç önceliğini artırmak ve wifi ve eth arayüzleri kapatmaya etmektir. Bunlar, süreç yürütme sürecinizi kesintiye uğratabilecek asenkron kesintilerin ana kaynaklarıdır. Ateşlemeye devam eden başka kesintiler de olacaktır,/proc/interrupt'lara ve/proc/softirq'e bakarak, kesilen ateşler hakkında bir fikir edinebilirsiniz, ama ahududu pi gibi bir platformda, onlar da (zamanlayıcı) veya onlar Çok kısa süren (örneğin USB kesintileri), işleminizde birkaç ms sırasına kadar gecikmelere neden olmamalıdır. Eğer bir yüksek hassasiyet, ucuz zamanlayıcı gerekiyorsa

İlgili konular