HARD FAULT VE DİĞER EXCEPTION DURUMLARI İŞLEME

Başlatan F493, 23 Temmuz 2016, 13:18:23

kantirici

Alıntı yapılan: z - 23 Temmuz 2016, 16:28:48
Exceptiion durumunda stack'da fault rutinine nereden gelindiği bilgisi bulunmaktadır.

Exceptiona neden olan durumu videodaki anlatıma göre bulup hatayı yok etmek gerekir.

https://youtu.be/kpVMID65ajc

Video için teşekkürler hocam.

memo333

#16
Alıntı yapılan: F493 - 24 Temmuz 2016, 12:45:52
Paylaşımlar çok güzel teşekkürler.  Şuan Hard Fault' a sebep olan noktayı buldum. Çözüm üretmeye çalışıyorum. Belki bu sorunu yaşayan olmuştur. STM32F429I M4 de Emwin MemoryALLock ederken HardFault'a düşüyor. Ekrana dokunduğum anda cihaz hardfault a düşüyor bazen başka bir durumda. Nedenini araştırıyorum.  Proje neredeyse bitti 1yılı aşkındır üzerinde çalışıyorum fakat son dakika böyle bir sorun çıktı, yaklaşık 25 sayfa menü oldu, tamamen dokunmatik, 4.3".
Biraz uğraştıracak sanırım.

Dökümanları inceleyeceğim teşekkürler.



bana da aynısı olmuştu stack ve heap artırırsanız sorun çözülebilir..

birde compiler nedir?

compiler IARmış. o zaman MAP dosyanda RAMi kontrol et, IAR MAP dosyasındaki RAM hesaplamasına STACK ve HEAP'i koymuyor. Eğer RAM'de sınıra yaklaştıysan bu durumda STACK RAM dışına taşmış vaziyette program oluşuyor. IAR'ın bugu..

Gömülü Linux Notları --> http://linuxedu.xyz/

F493

Selam Hocam,

   Sorun Dinamik alan tahsisatından çıkıyormuş.  Ekran için SRAM de 120Kb alan tahsis etmiştim ve ekrana bir şeyler basmak için bu alan kullanılıyor.  Normal şartlarda ekrana icon basmak istersek icon kadar dinamik alan elde ediliyor ekrana basılıyor ve bu alan geri veriliyor(Verilmek zorunda).  İşte bu dinamik alanı geri veremiyor du, birikerek 120Kb alanı aşıyor ve artık tahsis edecek yer olmayınca yazılım Hard Fault'a  gidiyor ve orada kalıyor du. Bu sorunu bir şekilde çözdüm. Ama tam anladığım söylenemez. Aslında alan tahsis etmeden önce yeterli alan var mı yok mu kontrol edilmesi gerekir fakat EmWin bunu kontrol etmiyor nedeni ST için free verilmesinden mi anlayamadım.

Esen kalın.