Değişkenleri istediğim banka atamıyorum.

Başlatan mihri, 27 Nisan 2010, 22:58:51

mihri

char data;


Şeklinde kod yazıp derlediğimde 1. banka otomatik olarak atılıyor değişken ama.

bank2 char data;


Yazdığım zaman adresine bakıyorum değişken hala 1. bankta. Kullandığım derleyici PIC-C 9.70.

Ayrıca kod boyutu arttıkça Hi-tech değişkenlerin adreslerini karıştırıyor galiba. Mesela a+b=5 olması gerekirken bu işleme hiçbir şekilde müdahale etmeyecek fonksiyonlar yazıp derlediğimde a+b=7 sonucunu buluyor. Benzer problemle karşılaşan oldu mu?
"Eppur si muove!"

XX_CİHAN_XX

Hocam hi tech in bazı versiyonlarında aynı hatalar olmasada bir iki farklı hata yakalamıştım. Uzun süre kullanıpta hata bulunamayan versiyonları arkadaşlarımız buraya yazar.
Bank2 ye değişken açma konusunda bende aynı sorunu yaşamıştım sorunumu @ direktifi ile çözmüştüm.
volatile       unsigned char	TRISIO		@ 0x85;
volatile       unsigned char	register		@ 0xA0;

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.

mihri

Teşekkürler XX_CİHAN_XX. Önerdiğin şekilde değişken adreslerini atamayı biliyorum. Asıl sorun şu programda 40-50 tane değişken var. int tipi char tipi değişkenler. Aşağıdaki gibi bir değişkenim var;
unsigned int data1

Bu değişkenin derleyici tarafından atanan ram adresi 1. bankta.
void hesapla()

Adlı fonksiyonun içinde bu değişken matematiksel işlemlere tabi tutuluyor. İlk başlarda sorun yoktu ama programa başka fonksiyonlar ekledikçe programın boyutu büyüdükçe hesapla() fonksiyonun daki işlemler yanlış sonuç vermeye başladı. Programa eklenen diğer fonksiyonlar hesapla() fonksiyonunu kullanmıyor aralarında hiçbir bağlantı yok. Derleyici hata vermiyor ama hesapla() fonksiyonu yanlış sonuçlar buluyor. "@" işareti ile data1 değişkenin adresini 0. banka atıyorum hesapla() fonksiyonu doğru sonuçlar vermeye başlıyor. Bunun sebebi bence derleyici kod boyutu büyüdükçe ram organizasyonunu düzgün yapamıyor ya da bankların seçiminde hatalar yapıyor. O yüzden değişkenlerin hepsi aynı bankta olsun istiyorum. int tipi değişkenlerim de olduğu için tek tek "@" işareti ile adres atamak zor oloacak. Kaldıki derleyicinin yukarıda anlattığım problemi yine yapmayacağı kesin değil. Çünkü derleyici kendisi de bir takım değişkenler oluşturuyo. En azından kendi değişkenlerimi son banktan başlayarak yerleştirmek istiyorum.
"Eppur si muove!"

XX_CİHAN_XX

Hocam bu hata optimizasyondan kaynaklanıyor olabilir.
Emin olmak için hesapla() fonksiyonunda kullanılan tüm değişkenleri özelliklede varsa kesmede ve ana programda ortak kullanılan tüm değişkenleri volatile kullanarak tanımlamayı denediniz mi?
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.

mihri

hesapla() fonksiyonun içinde kullanılan hiçbir değişken kesme alt programında kullanılmıyor. Kesme alt programında kullanılan tüm değişkenler ise volatile tipinde zaten.
"Eppur si muove!"