Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: z - 26 Kasım 2018, 02:35:49

Başlık: STM32 CM3 islemcilerde herhangi bir adrese tuzak kurmak
Gönderen: z - 26 Kasım 2018, 02:35:49
Ö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?

Başlık: Ynt: STM32 CM3 islemcilerde herhangi bir adrese tuzak kurmak
Gönderen: Tagli - 26 Kasım 2018, 09:29:38
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 (https://www.picproje.org/index.php/topic,74228.0.html) 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.
Başlık: Ynt: STM32 CM3 islemcilerde herhangi bir adrese tuzak kurmak
Gönderen: OptimusPrime - 28 Kasım 2018, 21:53:03
Debugger registerlarini kullanilirsen bi umut var gibi.  ::)