Picproje Elektronik Sitesi

BİLGİSAYAR => Tek Kartta Bilgisayar (SBC) => Konuyu başlatan: clonex - 13 Haziran 2018, 14:34:50

Başlık: OrangePi Kullanıyorum Ama I2C de çok büyük işlemci yükü harcıyor.
Gönderen: clonex - 13 Haziran 2018, 14:34:50
Merhabalar,

OrangePi ile birden fazla I2C cihazı kontrol ediyorum hepsiyle. Sırasıyla tek tek hepsinden okuma yapıyorum. Bu raya kadar hiçbir problem yok. Ama gel gör 4 çekirdek işlemcili kart direk 100% yük biniyor.

Nodejs ile yazdım. Ama kendi içerisinden I2C den okumayı python ile yapıyorum. python okumayı devre dışı bırakmama rağmen nodejs sistem üzerinde yük kullanmıyor. Ne zaman python i2c okuma yaparsa işlemci tavan yapıyor. Buda kartın ısınmasını sağlıyor. Bir data okumak bu kadar güçlü işlemci için zor olmamalı diye düşünüyorum.

nodejs kullanmamın sebebi kiosk yapmam. Grafik istatiklerini yansıtıyorum. 2000 ms de bir 16 işlem(I2c okuma) sırasıyla yaptırıyorum.

Bu neyden kaynaklanabilir, bilgisi olan var mı?
Başlık: Ynt: OrangePi Kullanıyorum Ama I2C de çok büyük işlemci yükü harcıyor.
Gönderen: Erol YILMAZ - 13 Haziran 2018, 15:30:34
8 çekirdekli yok mu?
Başlık: Ynt: OrangePi Kullanıyorum Ama I2C de çok büyük işlemci yükü harcıyor.
Gönderen: kimlenbu - 13 Haziran 2018, 16:06:15
python'da "while true:" gibi bir super loop kullandıysan bunu değiştir, threading kullan. Bu tarz bir yapı kurduysan %100 kullanım görmen normal.
Başlık: Ynt: OrangePi Kullanıyorum Ama I2C de çok büyük işlemci yükü harcıyor.
Gönderen: kasif - 13 Haziran 2018, 16:16:21
evet loop larda işlemciye çok yuk binebiliyor.

4 tane çıkış okuyacaktım(sürekli), işlemci %100 çalışmaya başladı, aralara "sleep(1)" ile bekleme koydum, işlemci yükü %10 un altına indi.

kart: banana pi, python versiyon 2.7
Başlık: Ynt: OrangePi Kullanıyorum Ama I2C de çok büyük işlemci yükü harcıyor.
Gönderen: clonex - 13 Haziran 2018, 17:01:10
Alıntı yapılan: kasif - 13 Haziran 2018, 16:16:21evet loop larda işlemciye çok yuk binebiliyor.

4 tane çıkış okuyacaktım(sürekli), işlemci %100 çalışmaya başladı, aralara "sleep(1)" ile bekleme koydum, işlemci yükü %10 un altına indi.

kart: banana pi, python versiyon 2.7

Aralara sleep koydum aslında ama. 0.5 koydum. Yine aynı.
Başlık: Ynt: OrangePi Kullanıyorum Ama I2C de çok büyük işlemci yükü harcıyor.
Gönderen: mehmet - 13 Haziran 2018, 17:41:10
%10 altına da düşmesin yani.
Başlık: Ynt: OrangePi Kullanıyorum Ama I2C de çok büyük işlemci yükü harcıyor.
Gönderen: clonex - 13 Haziran 2018, 17:54:21
Alıntı yapılan: mehmet - 13 Haziran 2018, 17:41:10%10 altına da düşmesin yani.

Anlamadım ?
Başlık: Ynt: OrangePi Kullanıyorum Ama I2C de çok büyük işlemci yükü harcıyor.
Gönderen: OptimusPrime - 13 Haziran 2018, 17:56:34
fayton kodunu tek basina calistirisanda ayni sekilde islemci kullanimi artiyormu?
surekli okuma yapiyorum derken aralarda bir yerlerde bekleme vs var mi?

cat /proc/interrupts a baktiginda I2C kesmesini birden fazla cekirdek isleyebiliyor mu?

fayton a I2C den oku dediginde gercekten I2C donanimini kullaniyor mu yoksa yazilimsal hokkabazliklar mi yapiyor?
Başlık: Ynt: OrangePi Kullanıyorum Ama I2C de çok büyük işlemci yükü harcıyor.
Gönderen: clonex - 13 Haziran 2018, 18:30:02
Alıntı yapılan: OptimusPrime - 13 Haziran 2018, 17:56:34fayton kodunu tek basina calistirisanda ayni sekilde islemci kullanimi artiyormu?
surekli okuma yapiyorum derken aralarda bir yerlerde bekleme vs var mi?

cat /proc/interrupts a baktiginda I2C kesmesini birden fazla cekirdek isleyebiliyor mu?

fayton a I2C den oku dediginde gercekten I2C donanimini kullaniyor mu yoksa yazilimsal hokkabazliklar mi yapiyor?

baktım tek çekirdek işliyor.
Başlık: Ynt: OrangePi Kullanıyorum Ama I2C de çok büyük işlemci yükü harcıyor.
Gönderen: OptimusPrime - 13 Haziran 2018, 18:51:31
bende oyle tahmin etistim. fayton I2C den okurken /proc/interrupts daki ilgili numaralar artiyor mu?
Başlık: Ynt: OrangePi Kullanıyorum Ama I2C de çok büyük işlemci yükü harcıyor.
Gönderen: clonex - 18 Haziran 2018, 08:34:00
Evet, artıyor hocam ne yapmam gerekiyor ?
Başlık: Ynt: OrangePi Kullanıyorum Ama I2C de çok büyük işlemci yükü harcıyor.
Gönderen: OptimusPrime - 18 Haziran 2018, 16:29:34
Artmiyor deseyin isler degisecekti ama artmasi faytonun donanimsal I2C yi kullandigini gosteriyor. Bu durumda  kodunu optimize etmen gerekiyor. Yinede bu kodu ayri bir yerde calistirip yine islemciye yuk getirip getirmedigini test et derim. Gerekli yerlere sleep eklemende islemci yukunu azaltacaktir.

Veya kernel izin verirse I2C kesmelerini baska cekirdek veya cekirdeklere ata.
Başlık: Ynt: OrangePi Kullanıyorum Ama I2C de çok büyük işlemci yükü harcıyor.
Gönderen: mufitsozen - 18 Haziran 2018, 16:52:33
Alıntı yapılan: clonex - 18 Haziran 2018, 08:34:00Evet, artıyor hocam ne yapmam gerekiyor ?

I2C interrupt'ina bir python callback fonksiyonu ekleyerek basla. Daha sonra Callback fonksiyonunda isledigin bilgiyi bir Queue ile ana python programina(thread'e) aktar mesela
Başlık: Ynt: OrangePi Kullanıyorum Ama I2C de çok büyük işlemci yükü harcıyor.
Gönderen: clonex - 18 Haziran 2018, 16:58:56
Alıntı yapılan: mufitsozen - 18 Haziran 2018, 16:52:33I2C interrupt'ina bir python callback fonksiyonu ekleyerek basla. Daha sonra Callback fonksiyonunda isledigin bilgiyi bir Queue ile ana python programina(thread'e) aktar mesela

internette ne diye aratabilirim onu ? Konusu olarak...
Başlık: Ynt: OrangePi Kullanıyorum Ama I2C de çok büyük işlemci yükü harcıyor.
Gönderen: ibocakir - 18 Haziran 2018, 20:19:13
Hocam yerinde olsam I2C ile okuyacağın slave cihaz/entegre ne ise bir MCU ile okuyup OrangePi'te UART'tan söylerdim.
Başlık: Ynt: OrangePi Kullanıyorum Ama I2C de çok büyük işlemci yükü harcıyor.
Gönderen: clonex - 19 Haziran 2018, 08:43:39
Alıntı yapılan: ibocakir - 18 Haziran 2018, 20:19:13Hocam yerinde olsam I2C ile okuyacağın slave cihaz/entegre ne ise bir MCU ile okuyup OrangePi'te UART'tan söylerdim.

Aynı mantık değil mi ? I2C' nin normalde daha hızlı olması gerekmiyor mu ?
Başlık: Ynt: OrangePi Kullanıyorum Ama I2C de çok büyük işlemci yükü harcıyor.
Gönderen: clonex - 19 Haziran 2018, 14:53:36


(https://i.hizliresim.com/oV9YY2.png)

(https://i.hizliresim.com/Q2W44V.png)
Başlık: Ynt: OrangePi Kullanıyorum Ama I2C de çok büyük işlemci yükü harcıyor.
Gönderen: ibocakir - 19 Haziran 2018, 16:23:03
I2C Slave cihazın orangepi'nin maksimum hızına ulaşabiliyor mu ?
Başlık: Ynt: OrangePi Kullanıyorum Ama I2C de çok büyük işlemci yükü harcıyor.
Gönderen: clonex - 20 Haziran 2018, 08:45:41
Alıntı yapılan: ibocakir - 19 Haziran 2018, 16:23:03I2C Slave cihazın orangepi'nin maksimum hızına ulaşabiliyor mu ?

Ne demek istediğinizi anlayamadım hocam.
Başlık: Ynt: OrangePi Kullanıyorum Ama I2C de çok büyük işlemci yükü harcıyor.
Gönderen: SERRO EFE - 20 Haziran 2018, 22:21:16
OrangePi nin i2c clock hızı bağlı olan donanımın hızını aşıyor olabilir. Bu ikisi birbirine uyumlu olması gerekli.
Örneğin OrangePi 4Mhz hızla i2c haberleşmesi yapmaya çalışıyodur ama bağlı olan entegre 1.7Mhz maksimum hızıdır.
Başlık: Ynt: OrangePi Kullanıyorum Ama I2C de çok büyük işlemci yükü harcıyor.
Gönderen: clonex - 21 Haziran 2018, 01:53:28
Alıntı yapılan: mufitsozen - 18 Haziran 2018, 16:52:33I2C interrupt'ina bir python callback fonksiyonu ekleyerek basla. Daha sonra Callback fonksiyonunda isledigin bilgiyi bir Queue ile ana python programina(thread'e) aktar mesela

Hocam Allah senden razı olsun. Hiç threading ile yapmak aklıma gelmemişti. O şekilde yaptım inanın işlemci yükü sıfıra indi direk. %10 civarında chrome kullanıyor. Çok teşekkürler.

Hocam, bu neyden kaynaklanıyorda böyle oldu? Sırasıyla bashtan işlem yaptırmışım, yada hepsini thread üzerinden yaptırmışım mantık aynı gibi gözüküyor ama bu neyden farklılık söz konusu?

Bu eksikliği giderebilmek için hangi konulara bakmam gerekiyor?

Yardımcı olursanız çok sevinirim.
Başlık: Ynt: OrangePi Kullanıyorum Ama I2C de çok büyük işlemci yükü harcıyor.
Gönderen: mufitsozen - 21 Haziran 2018, 11:47:59
Alıntı yapılan: clonex - 21 Haziran 2018, 01:53:28Hocam Allah senden razı olsun. Hiç threading ile yapmak aklıma gelmemişti. O şekilde yaptım inanın işlemci yükü sıfıra indi direk. %10 civarında chrome kullanıyor. Çok teşekkürler.
Allah senden de razi olsun.

Verdigim basit ipucu/anahtar kelime(keyword)lerden cozumu bulmussun. Buda Allahin sana verdigi akil, fikir ve calisma/ogrenme azmini kullanmaya calistigini gosteriyor.

Modern MCUlari dogru programlarsan zaten %10-15den daha fazla yukleyebilmek icin COOOOK ama COOOOOK  ciddi bir program yazman lazim. picproje'deki tipte iki usart, i2c, spi, canbus adc,dac gpio kontrol eden bir program yazsaniz, duzgun bir sekilde yazilirsa %10-15den fazla yuk binmez.

Amma 72Mhz bir MCU alip, delay kullanip led yakip sonduren bir programla %98 yuk yapabilirsin  :)


Alıntı yapılan: clonex - 21 Haziran 2018, 01:53:28Hocam, bu neyden kaynaklanıyorda böyle oldu? Sırasıyla bashtan işlem yaptırmışım, yada hepsini thread üzerinden yaptırmışım mantık aynı gibi gözüküyor ama bu neyden farklılık söz konusu?
Bu temel bilgisayar proglama kavram ve teknikleri kullanilmadigindan oluyor.


Alıntı yapılan: clonex - 21 Haziran 2018, 01:53:28Bu eksikliği giderebilmek için hangi konulara bakmam gerekiyor?

Yardımcı olursanız çok sevinirim.

Tabiiki yardimci olmaya calisirim ama sizin bilginiz, tecrubeniz vb ile ilgili birsey bilmedigim icin onerilerimi nasil kurayim/yapilandirayim bilemedim.