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ı?
8 çekirdekli yok mu?
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.
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
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ı.
%10 altına da düşmesin yani.
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?
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.
bende oyle tahmin etistim. fayton I2C den okurken /proc/interrupts daki ilgili numaralar artiyor mu?
Evet, artıyor hocam ne yapmam gerekiyor ?
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.
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
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...
Hocam yerinde olsam I2C ile okuyacağın slave cihaz/entegre ne ise bir MCU ile okuyup OrangePi'te UART'tan söylerdim.
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 ?
(https://i.hizliresim.com/oV9YY2.png)
(https://i.hizliresim.com/Q2W44V.png)
I2C Slave cihazın orangepi'nin maksimum hızına ulaşabiliyor mu ?
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.
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.
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.
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.