STM32 CM3 islemcilerde herhangi bir adrese tuzak kurmak

Başlatan z, 26 Kasım 2018, 02:35:49

z

Özellikle sorum STM32F103C8 üzerine. Bu işlemcide MPU unitesi yok. Ancak çevre birimleri dışında çekirdeğin pek çok registeri var. Belki aradığım özellik birisinin gözüne çarpmıştır umuduyla sormak istiyorum.

Herhangi bir adrese tuzak kurmak istiyorum. Eğer yazılım bu adrese erişip okuma ya da yazma yaparsa interrupt üretsin.

Varmı bir yolu?

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Tagli

Buna denk gelmedim hiç ama belki unaligned access yaptırıp exception üretmesi sağlanabilir. CM3 çekirdeği normalde unaligned access yapabiliyor (CM0'ın aksine) ama bunu kapatmaya yarayan bir register vardı. Yani "biliyorum normalde yapabiliyorsun, ama ben yine de unaligned access olduğunda exception'a düşmeni istiyorum" diyebiliyorsun.

ARM ve STM32 konusunda bir acemi olarak bu durumla ilk kez Modbus register'ları tanımlayıp bunlara isim vermeye çalışırken karşılaşmıştım (Bkz: Bu konudaki 2. veya 3. madde). uint16_t olarak tanımlanmış bir bölgenin ortasında hizasız bir uint32 olduğunu varsayıp erişmeye çalıştığımda kod patlıyordu. Tabi ki işlemci CM0 çekirdekli bir STM32F0 idi.

Örnek:
uint16_t array[4];
uint32_t *ptr = (uint32_t*)(array + 1);
Bundan sonra *ptr erişimleri kodu patlatıp exception'a düşürüyordu. Gerçi şimdi düşünüyorum da belki her zaman olmayabilir. array'i 0 değil de 2 gibi bir adrese oturacak şekilde yerleştirirse kod patlamayabilir. Bu şans eseri mi böyle oldu yoksa derleyicinin değişkenleri 4'ün katı adreslere yerleştirme gibi bir huyu mu var bilmiyorum.
Gökçe Tağlıoğlu

OptimusPrime

Debugger registerlarini kullanilirsen bi umut var gibi.  ::)
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||