OrangePi Kullanıyorum Ama I2C de çok büyük işlemci yükü harcıyor.

Başlatan clonex, 13 Haziran 2018, 17:34:50

clonex

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ı?

Allegro


kimlenbu

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.

kasif

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

clonex

Alıntı yapılan: kasif - 13 Haziran 2018, 19: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ı.

mehmet

nothing


OptimusPrime

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?

clonex

Alıntı yapılan: OptimusPrime - 13 Haziran 2018, 20: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.

OptimusPrime

bende oyle tahmin etistim. fayton I2C den okurken /proc/interrupts daki ilgili numaralar artiyor mu?

clonex


OptimusPrime

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.

mufitsozen

Alıntı yapılan: clonex - 18 Haziran 2018, 11: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
Dünyanın en büyük sorunu, cahiller özgüven içindeyken akıllı insanların kuşkuyla dolu olmasıdır.

clonex

Alıntı yapılan: mufitsozen - 18 Haziran 2018, 19: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...

ibocakir

Hocam yerinde olsam I2C ile okuyacağın slave cihaz/entegre ne ise bir MCU ile okuyup OrangePi'te UART'tan söylerdim.