Struct ile çevrebirim registerlarına erişmek.

Başlatan Emre_Tuncay_, 19 Ocak 2021, 23:36:44

Emre_Tuncay_

Merhaba

Zynq'deki bir çevre birimi için kendi c++ driver'ımı geliştiriyorum. Çevre biriminin register'larının bir kısmı aşağıdaki gibi. Register'lar 32 bit.



Bir struct tanımlayıp bu struct ile tanımlı bir pointer'a başlanğıç adresini atayıp registerlara erişebiliyorum. Aşağıdaki gibi. (Register bitlerini şimdilik x ve y olarak yazdım.)



Ama çevre biriminin register tablosunda bir sürü reserved hafıza var. Bunların struct'ım içerisinde görünmesini istemiyorum. Ama onları eklemezsem register offset değerleri uyuşmayacak.

Bu tarz bir tasarım probleminde nasıl çözüme ulaşırdınız. Struct elemanlarına adres offseti verebilmek için nasıl bir çözüm geliştirirdiniz.


Tagli

İsimsiz bit field tanımlaması yapılabiliyor ama bir sınırı var mı, yani en fazla kaç bit ifade edilebiliyor bilmiyorum.
Gökçe Tağlıoğlu

Emre_Tuncay_

Literatürde ne diye geçiyor bu isimsiz bitfield tanımlaması. Direk bu şekildemi araştırayım.

Tagli

Anonymous bit field veya Unnamed bit field olarak geçiyor.

reserved isimli değişkenlerin kötü gözüktüğü konusundaki fikrine katılıyorum ancak örneğin ST'nin kendi STM32 header'larında da bu şekilde kullanmışlar. Belki bit field kullanımında bir sınırlama vardır, ya da konumları tutturmak zor oluyordur.

Bu arada, kullandığın işlemcinin kendi üreticisinin sunduğu header'ları yok mu?
Gökçe Tağlıoğlu

Emre_Tuncay_

#4
Xilinx kendi api'sini vermiş ama ben boş zamanlarda kendim driver yazmak istedim. Kendi tasarımlarıma göre özelleştirmek için. (Belki hazırını kullanmak çok daha iyi olacak ama böyle daha fazla zevk alıyorum diyeyim.)
Hazır api'de register'dan veri okumak için peripheral adresi ile register offset değerlerini işleme tabi tutmuş.

Cevabınız için teşekkürler.