質問: [tt2-tt1,tt3-tt2,tt4-tt3,tt5-tt4,tt6-tt5] ``` ※adxl345.getAxes()がセンサから値を取得するコマンドです。 x,y,zの3成分を取得しています。実行時間は概ね0.0001秒くらいなので、for文自体は十分に刻み0.01秒で回せると考えています。 ### 試したこと 各処理にかかっている時刻を計測しました(tt2-tt1,tt3-tt2など)。 これをグラフ化すると、以下のようになりました。 ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/16ddfeac8cb34ea19120e2eb619dcaee.png) 縦軸は処理にかかった時間です。ループ1周の時間は0.01秒となってほしいのですが、ある種周期的にそれが崩れています。 ### 補足情報(FW/ツールのバージョンなど) python 3.5.3 Raspbian GNU/Linux 9
回答: ondelaさん、 どれがうまくいくかわかりませんが、アイデアをあげてみます。 1. CPUクロックをぱ固定してみる `echo performance | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor` 2. 実行するCPUを固定してみる。(`taskset`) 3. `nice`で、優先度を上げてみる 4. 他のタスクをできるだけ実行にしない o GUIは使わない(Raspbian Liteベースにしてみる。とか、Buildrootで最小限のシステムをつくる) o バックグラウンドで、タスクをできるだけ動かさない (systemd で使わなそうなサービスを切る?) o ファイルシステムにアクセスしない(!) o ネットワークをつかわない(!?) 5. リアルタイムカーネルを使う 他の回答者のみなさまが書かれている通り、ふつうのLinuxではリアルタイム応答の保証はありません。 が、応答性を通常のカーネルよりよくしたパッチがあり、最近のRaspberyPiのカーネルソースでは、ブランチがあります。 => 参考 6. adxl345のデバイスドライバを使う。 カーネルソースの drivers/input/misc/内に adxl34x*.[ch] にドライバがあるので、参考にして、修正して、使う。 (具体的な使い方とか、わかりません。。)