Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => C/C++ => Konuyu başlatan: Emre_Tuncay_ - 19 Ocak 2021, 23:36:44

Başlık: Struct ile çevrebirim registerlarına erişmek.
Gönderen: Emre_Tuncay_ - 19 Ocak 2021, 23:36:44
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.

(https://i.ibb.co/wMHBwD4/Ekran-Al-nt-s.png) (https://ibb.co/wMHBwD4)

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.)

(https://i.ibb.co/xMzgTJ9/Ekran-Al-nt-s.png) (https://ibb.co/xMzgTJ9)

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.

Başlık: Ynt: Struct ile çevrebirim registerlarına erişmek.
Gönderen: Tagli - 20 Ocak 2021, 00:13:13
İsimsiz bit field tanımlaması yapılabiliyor ama bir sınırı var mı, yani en fazla kaç bit ifade edilebiliyor bilmiyorum.
Başlık: Ynt: Struct ile çevrebirim registerlarına erişmek.
Gönderen: Emre_Tuncay_ - 20 Ocak 2021, 00:15:15
Literatürde ne diye geçiyor bu isimsiz bitfield tanımlaması. Direk bu şekildemi araştırayım.
Başlık: Ynt: Struct ile çevrebirim registerlarına erişmek.
Gönderen: Tagli - 20 Ocak 2021, 00:26:38
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?
Başlık: Ynt: Struct ile çevrebirim registerlarına erişmek.
Gönderen: Emre_Tuncay_ - 20 Ocak 2021, 00:48:53
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.