[英]How to reduce CPU usage from own C programms
用戶C程序在我的RPi3 +上執行200%的CPU使用率。 我注意到了,因為我想知道高溫。
我用其他自己編寫的C程序檢查了我的其他Pi。 幾乎相同:CPU使用率100%(Pi3但無加號)。 當我僅終止/停止該程序時,CPU使用率和溫度下降。
在while(1)循環中,我檢查了gpio狀態(已連接到按鈕)。 如果按下,我會根據按下按鈕的持續時間來執行操作。 用於在杯子上打印示例或刪除/更改mysql數據。
我讀了一些有關select()的信息,但我不了解上下文或用法。 但是我知道,通過睡眠來減緩循環並不是藝術的方法。
...
while(1)
{
if (digitalRead(butPin)) // Button is released if this returns 1
{
digitalWrite(ledPin, LOW); // Regular LED off
}
else
{
//evalute button press
......
}
...
一切正常,圓周率響應通常很快。 但是對於這種簡單的工作,圓周率太高了。 因此它也需要太多功率。
編輯:
這樣可以減少CPU使用率,但不會降低到較低水平。
usleep(0)
=> 200%
usleep(5)
=> 111%
usleep(100)
=> 105%
usleep(5000)
=> 100%
(在Raspberry 3+上)
您可以通過讓程序進入睡眠狀態來讓操作系統節省資源(計算其他事情)。
usleep(int timeInMicroseconds);
這將使程序休眠timeInMicroseconds。
由於您的程序考慮了Button推送,即使睡眠了幾毫秒也不會降低您的程序檢測推送的效率。
程序睡眠的次數越多,釋放的CPU就會越多,但是檢測到推送的反應就更少(如果睡眠時間過長,甚至不會檢測到它們)。 這是一種平衡; 一些反復試驗應該會給您帶來很好的價值。
#include <unistd.h>
while(1)
{
if (digitalRead(butPin)) // Button is released if this returns 1
{
digitalWrite(ledPin, LOW); // Regular LED off
}
else
{
}
usleep(5000); //Sleep for 5ms
}
另一個選擇是使用中斷: 用connectionPi打斷 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.