Arm islemcide hard fault exception durumunu yasaklamak

Mikro Step

Kıdemli Üye
Katılım
25 Eylül 2022
Mesajlar
5,898
ARM islemciyi ram alaninin disindaki bir adresi okumaya zorlayarak hard fault exception olustuyorum.
Gercekten de islemci bu durumu algilayip Hard Fault Exception handler rutinine giriyor.

Hard fault durumunu yasaklamak icin Faultmask registerine 1 yukluyorum.

Bu durumda exception olusmuyor ve ilgili handlere gidilmiyor. Fakat islemci hard fault olusturan komutu bir turlu terketmiyor ayni komutu dongude kalircasina surekli tekrar ediyor.

Halbuki bu hataya neden olan durum benim bilgim dahilinde sen devam et demek istiyorum. Fakat gorunurde bu dedigim sanirim yapilamiyor.

Ornek kodum asagida. 8'inci satira asla gecilmiyor islemci 7 nolu satirda donup duruyor.

C-like:
       MOV    R0, #1
       MSR    FAULTMASK, R0
 
       LDR    R0, =0x20002800
       MOV    R1, #0x5A
       STRB   R1, [R0]
       LDRB   R1, [R0]           ; !!! PRODUCE HARD FAULT !!!
       ....
       ....
 
Arm assemble kullanmıyorum ama, C de hard fault exceptiona düştüğünde sizin bahsettiğiniz gibi diğer çalışan her şey iptal oluyor ve exception kısmı çalışıyor.
Sanırım bu kontrol hardware seviyesinde yapıldığı için müdahale etmenize izin vermiyor. (emin değilim)
Bu exceptionu gözardı etmek istemenizin nedeni nedir?
 
Yanlış bilmiyorsam faultmask ilgili hatayı maskeliyor ama sadece maskeliyor ilerlemeyi sağlamıyor.
 
Illa adama takla attiracaklar. Ilerlemesini bilirim ama mantiksiz geldi

Fault execption olusmasini engelleyebil.
Fakat bu exceptiona neden olan komutun isleyisini bitirme.

Burda terslik var.

Mesela Timer int olustu. Int rutininden cikarken int flagi silmezsek rutinden cikar cikmaz gerisin geri gene int rutinine gireriz.
Burda da benzer bir durum var. Bir inceligi atliyorum gibime geliyor.

@frmman

Biraz fantazi. Siradan uygulama yazilimlarinin disinda kod yazmayi seviyorum.
 
Oradaki veriyi yanlış okuyup işlemcinin devam etmesimi daha kötü sonuçlara yol açar yoksa işlemcinin kitlenmesi mi ? işlemci kilitlenmesi birçok nedenle olabilir ve tasarımcı buna önlem alabilir , ama oradaki veriyi yanlış okuyup yoluna devam etmesi sonuçlarının nelere yol açacağını tasarımcı bile tahmin edemez. Eğer fault biti set oluyorsa ve buna uygun bir kod satırı eklenebiliyorsa o zaman tarasımcı bunu yapsın ulaştığı adresi önceden kotrol edip bir fonksiyonu çağırabilir diye düşünmüşlerdir. Aslında doğru karar bence.

Java , c# da bellek adreslemesi var ama asla dizinin dışına çıkma izni vermiyor , demek ki her hafızaya ulaştığında adresi kontrol ediyor bu çok yavaş olur, acaba işlemcide bunun için özel bir kontrol mekanizması mı var diye hep merak ederim ki tek tek her dizinin başlangıç ve son adresi kontrol edilmek zorunda .
 
Hizalama olayi keyfi bir sey.

Islemciye hizasiz verilere erisimde exception uret/uretme diyebiliyorsun. Power on ardindan default durum uretici firmaya kalmis.

Ne yaptigini bilen birisi bu tur konularda cirit atabilmesi lazim. Siradan yazilimlarda ihtiyac duyulacak sey degil.

Buyuk olasilikla sistem istedigime izin veriyor. Exception durumunu yasakladigim icin islemci handler rutinine gitmiyor. Fakat exception olustuguna dair bir flag set oluyor ve bu flagi benim silmem gerekiyor ya da bu flagin set edilmesini engellemem lazim. Bu da NVIC tarafi ile ilgili.

Muhtemelen sadece Faultmask'a degil NVIC tarafina da ilave yasak getirmem gerekecek.
 
Sinirli kaynaklardan edindigim bilgilere gore ARM islemcide Hard Fault exception ozelligini tamamen devre disi birakip MCU'nun siradan MCUlar gibi davranmasini saglayamiyoruz.

Fakat bundan hic emin degilim.
 
Gündüz hard faultdan çıkma ile ilgili bir kaç deneme yapmıştım. Kodda isteyerek hatalı bir adrese programın akışını yönlendirdim. Mcu hard faulta düştü ve ilgili kodlar çalıştı. Mcuyu debug moda aldım, exception içerisinde step step çalıştırırken program counter registerine, normal uygulamada geçerli bir adresi (hataya düştüğü satın bir altındaki satırın adresini) yazdım. Cpu komple kilitlendi :)

Yaptığım denemede hatanın hangi adreste olduğunu bildiğim için eğer bu yöntem işe yarasaydı ilgili adrese döner ve oradan çalışmaya devam ederdi. Fakat sonuç öyle olmadı.

Rastgele bir anda oluşan hard fault dan çıkınca program nereye hangi şartlarda dönecek bu durum belirsiz.

Aşağıdaki linkde arm hata analizi hakkında güzel bilgiler var.

 

Çevrimiçi personel

Forum istatistikleri

Konular
6,952
Mesajlar
118,760
Üyeler
2,824
Son üye
selocan32

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top