ESP 32 SD kart swap olarak nasıl kullanılır?

EchoByte

Hectopat
Katılım
7 Ağustos 2022
Mesajlar
241
Çözümler
3
Yer
İstanbul
Daha fazla  
Sistem Özellikleri
intel i5 12500H
RTX 3050 Ti
8 GB 3200 Mhz DDR4 RAM
500 GB M.2 SSD
Cinsiyet
Erkek
Merhaba iyi sosyaller. Başlıkta gördüğünüz gibi ESP 32'ye bağladığım SD kartı swap alanı olarak kullanmak istiyorum. Ancak ESP 32'de günümüz bilgisayarlarındaki gibi bir Memory Managment Unit (MMU) olmadığı için bu işlemi yapacak bir fonksiyon yok. Aklıma sanal bir MMU kodu yazmak geldi, ama baya bir araştırma yapmam gerekecek. Bende bu yüzden belleği pagelere bölmeye karar verdim. Bu yöntemde en son kullanılan page SD card a yüklenir. Bir ara katman ise bu değişkenler talep edildiğinde bu değişkenin bulunduğu page'i RAM'e tekrardan yazar. Ama RAM'e manuel yazmayı çözemedim. Zaten çözsem beni ara katman zorlayacak. Çünkü her değişken okumasında bu değişkenin bellekte mı yoksa swap partta mı olduğunu kontrol edecek bir ara katmana ihtiyacım var. Esp32 zaten iki çekirdekli birinde bu pageleme sistemini birinde ana işlemimi çalıştırabilirim diye düşündüm ama ara katmanı nasıl yazacağımı çözemedim...

Soru x-y problemine dönmesin diye minik bir özet :

Sorun: ESP 32'de SD card ı swap alanı olarak kullanma özelliğinin olmaması

Çözümler:

1. ESP 32 için sanal bir MMU yazılır ise sorun çözülebilir.
2. RAM'i parçalara böleriz. Kullanılmayan parçayı sdcarda yükleyip gerektiğinde çekeriz. -> Bunu gerçekleştirmek için değişken erişme isteklerini sürekli gözden geçirmemiz gerek.

3. Bu yöntemi nasıl yapacağımız hakkında bir fikrim yok. Sadece aklıma geldi. SD cardı raw formatında biçimlendirerek RAM gibi adreslesek, ve bu adresleri de RAM'in devamı olarak işlesek? Bu yapı araştırmalarıma göre ESP 32 nin işlemci mimarisine aykırı. Ancak yine de paylaşmak istedim.


Bu sorun için başka çözüm yolları varsa yazabilirsiniz. Ayrıca yazdığım çözüm yolları hakkında yazılımsal destekte bulunabilirseniz çok sevinirim.

Teşekkür ederim.
 
Son düzenleme:
Sorunuzu netlestirdikten sonra cevap vermek istiyorum o yuzden anladigim kadariyla ne yapmak istediginizi anlatacagim, eger yanildigim yerler varsa duzeltin lutfen. Anladigim kadariyla ESP32 uzerindeki RAM boyutu size yetersiz kaliyor bu yuzden RAM uzerinde hemen kullanilmayacak bilgileri SD kart uzerinde saklayip gerekli oldugu zaman cekmek istiyorsunuz, oyle mi? Bu sekilde RAM kullaniminda olabildigince yuksek verim almaya calisiyorsunuz sanirim.

Eger ki oyle ise guzel dusunmussunuz fakat bundan istediginiz sonucu alabilmeniz pek de mumkun degil bence. Zira bu sanal MMU olarak davranacak kod yazilim-tabanli (software-based Ingilizcesi, Turkcesini tam bilmiyorum kusura bakmayin) bir kod olacagi icin performans artisi yerine dususunu gormeniz cok daha muhtemel. Sanalm bir MMU yazmak yerine mesela kodunuzun calisma sirasini daha duzene sokarak optimize etmeyi deneyebilirsiniz. Kodunuz event-driven duzeninde olsa dahi nihai kod duzenini biraz sequential'a benzeterek hibrit bir sekilde de yazmaniz mumkun. O zamanda da kodun okunabilirligi baya dusecek ama zaman zaman kodun calistirilmasinda hizi arttirip optimizasyonu iyilestirebilir. Daha uzman oldugum Python uzerinden ornek vermem gerekirse mesela Tkinter kutuphanesi ile bir arayuz kodlarken basta event-driven duzeni ile yazip daha sonra satirlarin yurdurulme sirasina gore sequential benzeri hibrit bir yapiya sokmak kodun daha optimize bir sekilde esnek olmasini saglar. Ayni sey Arduino icin de gecerlidir, en azindan ben aliskanliktan oyle yapiyorum .
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…