Arkadaşlar bu hi-tech beni öldürecek.Bir sorunu bitmeden diğeri başlıyor.
Şu tuhaflığa bakar mısınız;
struct HD{
unsigned char x ;
unsigned char y ;
unsigned char hxy;
};
void MesajGonder(struct HD hd){
unsigned char x;
unsigned char y;
x = hwnd.x;
y = hwnd.y;
KarakterYaz(x,y,'A');
}
Arkadaşlar kodu bu şekilde çalıştırdığımda ekranda hiçbirşey göremiyorum.Ama;
void MesajGonder(struct HD hd){
unsigned char x;
unsigned char y;
x = hwnd.x;
y = hwnd.y;
PORTC = x+y;
KarakterYaz(x,y,'A');
}
dediğimde PORTC'de x ve y'nin toplamı görünüyor.Bunu;
PORTC = x;
PORTC = y;
diye ayrı ayrı yaptığımda da beklenilen değerleri gösteriyor.Ama ne yaparsam yapim KarakterYaz fonksiyonuna parametre olmuyorlar.Ama;
void MesajGonder(struct HD hd){
unsigned char x;
unsigned char y;
x = hwnd.x;
y = hwnd.y;
PORTC = x+y;
KarakterYaz(0,0,'A');
}
yaptığımda veya;
void MesajGonder(struct HD hd){
unsigned char x;
unsigned char y;
x = 10;
y = 10;
KarakterYaz(x,y,'A');
}
yaptığımda çalışıyor.
Günlerdir kod yazmaktan beynim sulandı.Bulamıyorum sorunu.Sizin gözünüze çarpan birşey var mı?
struct HD{unsigned char x,y,hxy;}hd;
a=hd.x;
b=hd.y;
c=hd.hxy;
// veya
hd.x=20;
hd.y=20;
hd.hxy=20;
Struct yapısında kodu yukarıdaki gibi yazmalısın.
Alıntı yapılan: strom - 25 Ocak 2010, 10:12:38
struct HD{
unsigned char x ;
unsigned char y ;
unsigned char hxy;
};
void MesajGonder(struct HD hd){
unsigned char x;
unsigned char y;
x = hwnd.x;
y = hwnd.y;
KarakterYaz(x,y,'A');
}
Gerçi 26 ocak'ta açılmış konu ama.........
Burada struct ile (değişken değil !...) tip tanımlaması yapılmak istenmiyor mu? Dolaysı ile başına TYPEDEF konmalı diye düşünüyorum.
Konu ile ilgili değil gerçi ama 876A'nın C portunun sadece high nible'larını sayan bir programı paylaşmak istedim.
union {
unsigned char CHAR; // Char
struct { // Nibbles x 4 bits
unsigned Lo:4; // Lo
unsigned Hi:4; // Hi
} Nb4;
} charX;
// |<---------- charX.CHAR ----------->|
// ---------------------------------------
// MSB | X X X X | X X X X | LSB
// -------- = -------------------- = -----
// | charX.Nb4.Hi | charX.Nb4.Lo |
// ---------------------------------------
void main(void)
{
charX.CHAR = 0xAC; //PORTC'nin low nible'ında 0b1100'ı göreceğiz
for(;;)
{
charX.Nb4.Hi++; //high nible'ı 1 arttır
PORTC = charX.CHAR; //değişkeni PORTC'ye at
DelayMS(250); //Değişimi görebilmek için 250milisec bekle SİZDEKİ DELAY FONKSİYONU FARKLI OLABİLİR!...
}
}
KAYNAK// EDuardo Rosso
// types for Hi-Tech C
// ***********************************************
// * Types definitions *
// ***********************************************
//
typedef union { // charX
unsigned char CHAR; // Char
struct { // Nibbles x 4 bits
unsigned Lo:4; // Lo
unsigned Hi:4; // Hi
} Nb4;
struct { // BITs
unsigned b00 :1;
unsigned b01 :1;
unsigned b02 :1;
unsigned b03 :1;
unsigned b04 :1;
unsigned b05 :1;
unsigned b06 :1;
unsigned b07 :1;
} BITs;
} charX;
//
typedef union { // intX
unsigned int INT; // Int
unsigned char CHARs[2]; // Char 2 (0x0:Lo; 0x1:Hi)
struct { // BITs
unsigned b00 :1;
unsigned b01 :1;
unsigned b02 :1;
unsigned b03 :1;
unsigned b04 :1;
unsigned b05 :1;
unsigned b06 :1;
unsigned b07 :1;
unsigned b08 :1;
unsigned b09 :1;
unsigned b0A :1;
unsigned b0B :1;
unsigned b0C :1;
unsigned b0D :1;
unsigned b0E :1;
unsigned b0F :1;
} BITs;
struct { // Nibbles x 4 bits
unsigned LL :4;
unsigned LH :4;
unsigned HL :4;
unsigned HH :4;
} Nb4;
struct { // Nibbles x 8 bits
unsigned char Lo; // CharL
unsigned char Hi; // CharH
} Nb8;
} intX;
//
typedef union { // longX
unsigned char CHARs[4]; // Char 4 (0x0:LLo; 0x1:LHi; 0x2:HLo; 0x3:HHi;)
unsigned int INTs[2]; // Int 2 (0x0:Lo; 0x1:Hi)
struct { // Nibbles x 4 bits
unsigned LLL :4;
unsigned LLH :4;
unsigned LHL :4;
unsigned LHH :4;
unsigned HLL :4;
unsigned HLH :4;
unsigned HHL :4;
unsigned HHH :4;
} Nb4;
struct { // Nibbles x 8 bits
unsigned char LL;
unsigned char LH;
unsigned char HL;
unsigned char HH;
} Nb8;
struct { // Nibbles x 16 bits
unsigned int Lo; // IntL
unsigned int Hi; // IntH
} Nb16;
struct { // BITs
unsigned b00 :1;
unsigned b01 :1;
unsigned b02 :1;
unsigned b03 :1;
unsigned b04 :1;
unsigned b05 :1;
unsigned b06 :1;
unsigned b07 :1;
unsigned b08 :1;
unsigned b09 :1;
unsigned b0A :1;
unsigned b0B :1;
unsigned b0C :1;
unsigned b0D :1;
unsigned b0E :1;
unsigned b0F :1;
unsigned b10 :1;
unsigned b11 :1;
unsigned b12 :1;
unsigned b13 :1;
unsigned b14 :1;
unsigned b15 :1;
unsigned b16 :1;
unsigned b17 :1;
unsigned b18 :1;
unsigned b19 :1;
unsigned b1A :1;
unsigned b1B :1;
unsigned b1C :1;
unsigned b1D :1;
unsigned b1E :1;
unsigned b1F :1;
} BITs;
signed long LONG;
}longX;
//
Bunları tabii ki pekçoğunuz biliyorsunuzdur; ama struct ve union'u anlayabilmek için ne kadar tırmaladığımı hatırladığımdan bilmeyenler için tekrar bu başlık altında belirteyim istedim.
Bu noktada 1 sorum olacak, denedim ama olmadı: PORTC'yi struct'ın içine sokabilsek ve de charX.Nb4.Hi'ı değiştirdiğimizde direk PORTC'nin sadece high nible'ı değişse, yani extradan değişken kullanmasak ;)
Çok mu fantazi yapıyorum acaba ???
Herkese hayırlı çalışmalar.
Timuçin