Mutlak değişkenlerin işaretçilerle birlikte kullanımı

Başlatan XX_CİHAN_XX, 13 Eylül 2009, 21:53:44

XX_CİHAN_XX

C üstatları bir konuda yardımınıza ihtiyacım var
Manual de Absolute Variables olarak geçen,
volatile unsigned char Portvar @ 0x06;

Şeklinde tanımlınan değişkenleri işaretçilerle birlikte kullanmaya kalktığımda bazı problemlerle karşılaşıyorum.
Bunlardan birtanesi şudur:
static volatile unsigned char reg @ 0x120   //0x120 de reg adında bir değişken olsun
unsigned char *p     // ve bir işaretçimiz olsun
p = ®    //regin adresini p ye taşıyalım

Bu işlemler sonucunda p de 0x120 olaması istenir ancak malumunuz p işaretçisi char tipinde olmak zorundadır. Çünkü regte char tipinde bir değişkendir. Fakat 0x120 char tipinde bir adres değeri değildir.
Dolayısıyla yukarıdaki işlemlerin sonucunda p işaretçisi 0x20 adresini gösteriyor. (En azından MPLAB simulasyonunda öyle gözüküyor)
Tanımlamalarımızı normalde;
volatile unsigned char reg @ 0x120;

Bu şekilde değil,
unsigned char reg;

Bu şekilde yaptığımız için bu tarz sorunlar olmaz ama benim diğer banklara tanımladığım bölgelere işaretçilerle erişmeye ihtiyacım var.
Bu durumu nasıl aşabilirim ?
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

controller

Adres işleci (&) kullanmayı deneyebilirsin.

p = ®
Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.

XX_CİHAN_XX

Özür dilerim zaten & işlecini kullanıyordum kopyala yapıştır yapmadan yazdığım  için dalgınlıkla atlamışım.
& işlecini normalde kullanıyorum yani.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

XX_CİHAN_XX

Olay anlaşıldı.
Simulasyonda char tipi işaretçi olduğu için 0x20 gösteriyormuş.
Üretilen asm yi inceleyince sorun olmadığını gördüm.
Yani 0x120 ye ulaşılıyor aslında ama char tipi olduğu için biz 0x20 gibi görüyor(muş)uz.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

picusta

p degiskeni char* tipinde yani sizeof(char*) uzunlugunda, sizeof(char) uzunlugunda değil.

XX_CİHAN_XX

Hocam haklısınız simulasyonda uzunluk olarak aslında 16 bit gözüküyor ama atamalarda 8 bit görüyorum bende anlamadım bir gariplik var ama  :roll:
Ancak üretilen asm doğru o nedenlede fazla kurcalamadım  :)
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.