簡體   English   中英

如何減少自己C程序的CPU使用率

[英]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
      ......
   }
...

一切正常,圓周率響應通常很快。 但是對於這種簡單的工作,圓周率太高了。 因此它也需要太多功率。

編輯:

首先嘗試:將usleep()添加到while(1)的末尾

這樣可以減少CPU使用率,但不會降低到較低水平。

usleep(0) => 200%

usleep(5) => 111%

usleep(100) => 105%

usleep(5000) => 100%

(在Raspberry 3+上)

頂級RPI3 + CPU 200%

您可以通過讓程序進入睡眠狀態來讓操作系統節省資源(計算其他事情)。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM