🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.os.linux.programowanie
Article #72662

Optymalizacja zużycia zasobów systemowych

#72662
From: Andrzej Niedworok
Date: Sun, 22 Sep 2013 16:18
70 lines
3496 bytes
Witajcie,

mam pewien problem z prostą aplikacją napisaną na płytkę Raspberry Pi. Aplikacja wyświetla czas i datę na wyświetlaczu alfanumerycznym LCD (2x16 znaków) podłączonym do linii GPIO Raspberry. Obsługę wyświetlacza zrealizowałem przy użyciu biblioteki WiringPi napisanej przez Gordona Drogona (http://wiringpi.com). Wszystko działa bez problemu. Problem pojawił się w momencie gdy po uruchomieniu programu włączyłem podgląd procesów (top lub htop). Okazało się że mój prymitywny program wykorzystuje 50 % CPU. Podejrzewam że problem polega tym że program bez przerwy, w pętli pobiera czas i go wyświetla na LCD. To jest moj pierwszy program na platformę Linux. Do tej pory pisałem programy na mikrokontrolery bez OS'a. Poniżej załączyłem cały kod programu. 


#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
 
#include <syslog.h>
#include <unistd.h>
 
#include <time.h>
#include <wiringPi.h>
#include <lcd.h>
 
static int lcdHandle;
 
 
int main (){
 
  int fval;
 
  struct tm *t;
  time_t tim;
 
  char buf[16];
 
 
  // Fork.
 
  fval = fork ();
  if (fval < 0){
    syslog (LOG_CRIT, "Bandwidth Fork error");
    exit (1);
  }
  else if (fval > 0){
    syslog (LOG_INFO, "Bandwidth Daemonize. Forked child %d", fval);
    exit (0);	 
  }
 
  wiringPiSetup () ;
 
  lcdHandle = lcdInit (2, 16, 4, 11, 10, 0, 1, 2, 3, 0, 0, 0, 0);
 
  while (1){
    tim = time (NULL);
    t = localtime (&tim);
 
    // Prezentacja czasu    
 
    sprintf (buf, "%02d:%02d:%02d", t -> tm_hour, t -> tm_min, t -> tm_sec);
    lcdPosition (lcdHandle, 0, 0);
    lcdPuts (lcdHandle, buf);
 
    // Prezentacja daty
 
    sprintf (buf, "%02d/%02d/%04d", t -> tm_mday, t -> tm_mon + 1, t -> tm_year + 1900) ; 
    lcdPosition (lcdHandle, 0, 1);
    lcdPuts (lcdHandle, buf);
  }
 
  return 0;
}

W programie użyłem instrukcji fork() aby uruchomić go w osobnym wątku (aby działał w tle). Czy ktoś mógłby naprowadzić mnie w jaki sposób zoptymalizować działanie programu aby wykorzystywał mniej zasobów?

Pozdrawiam

Andrzej Niedworok 
Technical Details
Message-ID: <1ec42afc-f8b6-4534-ab80-20dc54e22d11@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin2!goblin.stu.neva.ru!feeder.erje.net!us.feeder.erje.net!usenet.blueworldhosting.com!feeder01.blueworldhosting.com!border4.nntp.dca.giganews.com!border2.nntp.dca.giganews.com!nntp.giganews.com!d5no1503870qap.0!news-out.google.com!gv3ni1143qab.0!nntp.google.com!d5no1503866qap.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail

Show Full Headers
Complete Article Headers
X-Received: by 10.224.96.136 with SMTP id h8mr31903qan.8.1379866689780;        Sun, 22 Sep 2013 09:18:09 -0700 (PDT)
X-Received: by 10.49.48.38 with SMTP id i6mr720777qen.4.1379866689763; Sun, 22 Sep 2013 09:18:09 -0700 (PDT)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin2!goblin.stu.neva.ru!feeder.erje.net!us.feeder.erje.net!usenet.blueworldhosting.com!feeder01.blueworldhosting.com!border4.nntp.dca.giganews.com!border2.nntp.dca.giganews.com!nntp.giganews.com!d5no1503870qap.0!news-out.google.com!gv3ni1143qab.0!nntp.google.com!d5no1503866qap.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.os.linux.programowanie
Date: Sun, 22 Sep 2013 09:18:09 -0700 (PDT)
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=31.63.191.155; posting-account=qiLZowoAAAAT9Z-mvjLlpicERAcQcRVi
NNTP-Posting-Host: 31.63.191.155
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <1ec42afc-f8b6-4534-ab80-20dc54e22d11@googlegroups.com>
Subject: Optymalizacja zużycia zasobów systemowych
From: Andrzej Niedworok <niedworok.andrzej@gmail.com>
Injection-Date: Sun, 22 Sep 2013 16:18:09 +0000
Lines: 87
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit