FreeRTOS-Plus-TCP de ağ ayarları değiştikten sonra uygulamak

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
21,872
FreeRTOS un ağ eklentisi olan FreeRTOS-Plus-TCP yi kullanıyorum. Ağ ayarlarını değiştiriyorum ama değişiklikler devreye girmiyor. kütüphaneyi shutdown etmek için de bir API sağlamamışlar. Yani FreeRTOS_IPInit var, ama buna karşılık gelen FreeRTOS_IPShutdown gibi birşey yok. Bu durumda ağ ayarlarındaki değişikliği nasıl uygulatabilirim? İşlemciyi resetleyebilir tabi, eğer çözüm bulamazsam da öyle yapacağım herhalde, ama başka bu sorunla karşılaşmış olan var mı?
 
Su sayfaya baktiniz mi? CPU resetlenmeden pek mumkun degil gibi demisler.

 
Evet ben IP adresi değiştiriyorum hiç tınlamıyor. Kaynak kodunu fırsat bulunca inceleyip belki kendim bir shutdown fonksiyonu hazırlayabilirim.
 
Evet ben IP adresi değiştiriyorum hiç tınlamıyor. Kaynak kodunu fırsat bulunca inceleyip belki kendim bir shutdown fonksiyonu hazırlayabilirim.
Ben aşşağı yukarı 1aydır yüklenen yazılım değiştirilmeden yazılımın konfigüre edilmesi ile ilgili çalışıyorum.

Örneğin: 1 saniye beklemem var ve master cpu bana o beklemeyi 100ms yap dedi.
Ben önce bekleme değerimi değiştirip eeproma yazıp okuyup herşey istediğimiz gibiyse line point atıyorum(cpunun kaldığı yer) cpuyu resetleyip arıtk o şekilde çalışmasını sağlıyorum line point kaldığım yerdeki bool değişkenini set ediyorum uyanırken line point check yapıp kalınan yer varsa oradan devam ediyor yoksa 0'dan başlıyor.

Line point neden var, sanayide hangi şartlarda çalışacağı belirsiz bu yüzden herhangi bir sebeple resetlenirse kaldığı yerden devam etmeli(0'dan başlatılmak isterse onun ayrı bir input kombinasyonu var o oluşturulunca line point cancel yapıyor) bu sayede cpu bilerek veya ortam yüzünden resetlenirse en fazla 1ms'lik gecikme olsun ve kaldığı yerden hiç birşey yok gibi devam etsin.

anlatımda kolay olsa da kalınan yer noktalamak buradan devam ettirmek çok kafa patlattıran şeyler.
eğer isteyen olursa bir benzerini yazıp paylaşırım.
 
@Ahmet uğraştığın konu çok güzel. Kafama takılan bir nokta var. Mesela benim 10 tane değişkenim var. Bunlar başta 0 olarak kabul edildi ve program koşarken değişik değerler aldı. Örneğin pwm değeri yada sensör üzerinden elde edemeyeceğim bir değer. İşlemci resetlenirken kaldığı yer bir yere kaydedildi, işlemci resetlendi ama benim değişken değerlerim de sıfırlandı. YAni kaldığım yerden devam etmemiş oldum. Buna karşı bir çözüm var mı? Merak ettiğim için soruyorum.
 
@Ahmet uğraştığın konu çok güzel. Kafama takılan bir nokta var. Mesela benim 10 tane değişkenim var. Bunlar başta 0 olarak kabul edildi ve program koşarken değişik değerler aldı. Örneğin pwm değeri yada sensör üzerinden elde edemeyeceğim bir değer. İşlemci resetlenirken kaldığı yer bir yere kaydedildi, işlemci resetlendi ama benim değişken değerlerim de sıfırlandı. YAni kaldığım yerden devam etmemiş oldum. Buna karşı bir çözüm var mı? Merak ettiğim için soruyorum.
Benim aklıma bayrak geldi. cpu resetinden önce gerekli değişkenler ile birlikte bir bayrak atarsın ve eeproma yazdırırsın. Yeniden başlamada ilk bu bayrağı kontrol edersin. Bu bayrak değeri "1" ise gerekli değişkenleri sıfırdan başlatmak yerine eepromdaki kayıtları ile başlatırsın.
 
Kendi kendini değiştiren kod bence çok tehlikeli bir uygulama. Zaten birçok test edilmesi gereken senaryo varken, buna çok büyük ilave senaryo eklemiş oluyor. Kodun sabit olması ve verinin değişmesi ihtiyacı neden karşılamıyor anlamadım ...
 
@Ahmet uğraştığın konu çok güzel. Kafama takılan bir nokta var. Mesela benim 10 tane değişkenim var. Bunlar başta 0 olarak kabul edildi ve program koşarken değişik değerler aldı. Örneğin pwm değeri yada sensör üzerinden elde edemeyeceğim bir değer. İşlemci resetlenirken kaldığı yer bir yere kaydedildi, işlemci resetlendi ama benim değişken değerlerim de sıfırlandı. YAni kaldığım yerden devam etmemiş oldum. Buna karşı bir çözüm var mı? Merak ettiğim için soruyorum.
1- EEPROM'a yazdırmak,
2- MCU (ESP32, ESP8266 gibi) destekliyorsa Flash üzerinde depolama sağlayabilen SPIFFS, FatFFS, LittleFFS gibi kütüphaneler var.
3- Pilli ve hafızası yeterli bir RTC kullanıyorsanız RTC hafızasına yazdırmak.
 
Kendi kendini değiştiren kod bence çok tehlikeli bir uygulama. Zaten birçok test edilmesi gereken senaryo varken, buna çok büyük ilave senaryo eklemiş oluyor. Kodun sabit olması ve verinin değişmesi ihtiyacı neden karşılamıyor anlamadım ...
Anladığım kadarıyla, Ahmetin söylediği uygulamada aslında kod kendini değiştirmiyor. Kod ilerledikçe belli milestone noktalardan geçerken kalıcı bir yere kayıt atıyor. Olur da besleme vb. kaynaklı bir resetlenme yaşanırsa, o milestonedan öncesini pas geçerek çalışmaya başlıyor.

Daha cok kontrol uygulamalarında ihtiyaç olur diye düşünüyorum. Örnein bir kol hareket ederken birkaç ms içinde tekrar konrol ele alınsın diye. Çok özel bir senaryo. Farklı yöntemler de uygulanabilir.

Ancak burada anlık resetlenmeler çözülmüş oluyor. Süreç biraz uzun sürse yine problem olacak.
 
Kod ilerledikçe belli milestone noktalardan geçerken kalıcı bir yere kayıt atıyor.

Bu da bence güvenilir bir çözüm olmaz, çünkü işlemci resetlendikten sonra ne kadar resetli kaldı belli değil. Belki bir saat çalışmadı MCU. Bu arada da sistemde büyük değişiklikler olmuş olabilir. Bence bu işi sağlam yapmanın tek yolu, kodun mekanik sistemden mevcut durum bilgisini okuyabilmesi. Mesela hidrolik silindirin pozisyon bilgisi, XYZ eksenlerin mevcut durumu vs vs. Böylece mevcut durum eksiksiz tespit edilmiş olur ve ona göre de en doğru adımın ne olduğu bellidir.
 
Tek mcu full sistem kontrol olsa @taydin abi haklı, bu kaldığı yerden devam etmeyi zaten master mcu kontrol ediyor master mcu resetlwnir veya yeniden başlatılırsa Slaveleri ona müşterek yeniden başlıyor ama Slave istemsiz resetlenirse kaldığı yerden devam ediyor.

@fide abi senin dediğini yapan bir cpp komutu var doğru hatırlıyorsam container'di o değişkeni izliyor verdiğin üst alt sınırı dışındaysa üstw veya alta sınırlıyor eve gidince daha detaylı yazacağım
 
Aslında yeri ve konusu değil ama birlikte çalıştığım bir elektronik mühendisi abim var daha önce dünyada ismi en çok anılan otomobil üreticisine gömülü yazılımcı olarak çakılmış . Taşıt elektroniği ilgimi görünce bana çalıştığı dönemden kalan birkaç şema ve kod parçaları verdi.
Benim aklımda kurduğum yazılım düzeni ile alakası yok o kadar basit yazılmış ki YouTube videolarından programlama öğrenirken 3. 4. videoyu izlerken ortaya çıkarılmış gibi.

üstünde dac barındıran bir mcuya ait sofware da 3 4 tane if ile yazıp bitirmişler can hattından gelen veriyi inceleyip işine yarayanı alıp bus'ı boşaltıp bekliyor. toplamda 100 satır ancak sürmüş.

işin içine girdikçe beklediğim gibi olmuyor hiçbirşey :))
 
Askeri cihazlardaki sistem de buna benzer. Burda amaç fonksiyonel olması değil. Her şart ve koşulda doğru olarak çalışması.
110-120 km süratle giderken ECU'nun bug yüzünden takıldığını ve aniden motorun stop ettiğini düşün. Bunun için risk almıyorlar. Tam KISS mantığı.
 
Modüler telefon santralleri için özel kart geliştiren bir firmada çalışıyordum. Kartın hardware tasarımı tamamlandı, firmware'ini de ben tamamladım, tüm testleri yaptık bir sorun görünmüyor. Adamlar ESD tabancası ile test etmişler ve kartın test sonrasında sapıttığını söylediler. Yani şimdi, daha önce çok firmware yazdım, ama hiç ESD açısından test etmemiştim :katil2: Zaten aklıma gelse de ESD tabancası yok, nasıl test edeceksin?

Neyse ESD tabancası edindik ve kart statik elektriği yiyince ne oluyor analiz etmeye başladık. Kartta senkron seri port var ve 125 μs de bir kesme yiyor. Anladık ki statik elektrik seri port çevre birimini sapıttırıyor ve ondan sonra artık yanlış veriler çıkmaya başlıyor porttan. Bazan de veri akışı tamamen kesiliyor. Sorunu şöyle çözdüm: Kesme kaynağı olarak seri port çevre birimini değil de harici bir hardware kristal osilatör kullandık. Ne kadar ESD yese de sinyal üretmeyi kesmiyor. Sonra da firmware'de her 125 μs kesmesinde ilk iş olarak seri portun komple yeniden yapılandırıyorum ve ondan sonra veriyi gönderiyorum.

Neticede statik elektriği yiyince o an gene sapıtıyor, cızırtı duyuluyor ilgili görüşme kanalında, ama statik elektrik kalktığı anda çalışmaya devam ediyor. Birçok uygulama için yeterince iyi yazdığını düşünsen de, telefon santralleri için çok daha sıkı testlerden geçmesi gerekiyor sistemin, çünkü bu sistemler 7/24 çalışması gerekiyor.
 
@Ahmet uğraştığın konu çok güzel. Kafama takılan bir nokta var. Mesela benim 10 tane değişkenim var. Bunlar başta 0 olarak kabul edildi ve program koşarken değişik değerler aldı. Örneğin pwm değeri yada sensör üzerinden elde edemeyeceğim bir değer. İşlemci resetlenirken kaldığı yer bir yere kaydedildi, işlemci resetlendi ama benim değişken değerlerim de sıfırlandı. YAni kaldığım yerden devam etmemiş oldum. Buna karşı bir çözüm var mı? Merak ettiğim için soruyorum.
Şuan daha dolu cevap verebilirim.
Biz çalışırken line point diyoruz @ozkarah abi milestone diye isimlendirmiş doğrusu hangisi bilmiyorum.

Biz kullandığımız her değişkene alt üst limit yazmak zorundayız malesef software kalite kontrolcülerimiz var hiç sevmiyorum onları software 0 hata çalışssa dahi kalite standartlarına uymalıymış vs.

Diyelim bir 0-10V girişimiz var sanayide çok yaygın bu 0-10V giriş.
Biz bunu gerilim bölücüden bölünen şekliyle okuduk adc'yi gerilim bölücü hesabına göre çarptık gerilimi artık biliyoruz bizim aralığımız ney 0-10V bu aralığı atadık 10un üstüne çıkamaz diyip max10 değeride verebiliriz 10dan büyük değer aldıysak 10V'dan fazla gerilim uygulanıyor diye de yorum yapabiliriz.

Biz harici flash, epprom veya dahili eeprom'dan okurken crc checksum yapıyoruz en yaygın veri doğrulama methodu bu eğer doğrulamadan geçtiyse sorun yoktur.

eskiden yani işletmenin bir 6-7 yıl öncesindeki software'lara bakınca da eeprom diyelim 128kb ama kendilerinme 64 olarak tanımlıyorlar 64+64 olarak kullanıyorlar 2 kısımada 1e1 aynı veriler yazılıyor ve okunuyor bana saçma geldi ama uzun yıllar böyle kullanmışlar.
 
FreeRTOS-Plus-TCP yi bir statik kaynak kodu analizi yapan yazılımla inceledim. Yeniden başlatma için gerçekten hiçbir şey yapmamışlar. Ama bir fonksiyon koymuşlar, FreeRTOS_NetworkDown() diye. Fonksiyonun yaptığı, ana döngüye bir mesaj göndermek ve ana döngüde bu mesajı alınca IP ve DHCP bölümlerini tekrar başlatıyor. Ağ aygıt sürücüsüne de "yeniden başla" diyor.

Bir de fiziksel linkin koptuğunu algılayıp yeniden başlatma gerekiyor. Ama bunun için FreeRTOS-Plus-TCP nin kendisinde bir destek yok, bunu ağ aygıt sürücüsüne bırakmışlar. Ağ aygıt sürücüsü de Renesas'ın yazdığı kod. Sürücü ağın durumunu takip ediyor, ama durum değişince hiçbirşey yapmıyor ...

Öyle görülüyor ki ağ aygıt sürücüsünde bu sorunu çözmek gerekecek. FreeRTOS-Plus-TCP "yeniden başlat" isteği gönderince gereken yapılacak, link durumu değişince de FreeRTOS_NetworkDown() çağrılarak FreeRTOS-Plus-TCP nun gerekeni yapması sağlanacak.
 
Abi konudan bağımsız kafamda bağdaştırdım seneryo hakkında bir sorum var.

Ethernet üzerinden ses sinyali aktarılabiliyor mu?
Bana çok mümkün gelmedi bu yüzden soruyorum.
 
Ses sinyalini ADC ile dijitale çevirdikten sonra rahatlıkla ethernet ağı üzerinde taşıyabilirsin. Bunun için birçok protokol de var hali hazırda (mesela RTP).
 
modbus tarih olmaya başladıkça çalıştığım işletme kendini güncellemeyi fazlasıyla hedefliyor şuan en güzel performansı sunan tx-rx entegresini arıyoruz hedefimizde 3 protokol var.
ethernet, can-bus, profinet.
profinet ve ethernet birbirini tamamlıyor diyebiliriz.

fakat ethernet için kafam karışıyor 2 tip çalışması gerekiyor cihazın altına kendi slaveleri gelirse modem olacak ama çalışan sisteme takıldığında o modemin alıcısı olacak.

bu durumu protokol karşılıyor mu bizim özel bir şekilde mi yazmamız gerekiyor bilmiyorum.
ethernet tabanlı protokolleri hiç sevmiyorum.
 

Çevrimiçi üyeler

Forum istatistikleri

Konular
5,880
Mesajlar
100,277
Üyeler
2,491
Son üye
djkop

Son kaynaklar

Son profil mesajları

gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Back
Top