Float array limitleri

Başlatan kubilaytuna, 17 Eylül 2012, 09:02:50

kubilaytuna

#include <htc.h>
void main(void)
{
	float samp [87];
}


Arkadaşlar merhaba, yukarıdaki kodda hata olarak " could not find space (261 bytes) for variable _samp " hatası veriyor. Pic18f4620 kullanıyorum ve ram i 3968 byte olmasına rağmen bu hatayı veriyor. Benim bildiğim kadarı ile float değişkenler 4 byte yer kaplıyor burada da 87*4 = 348 byte oluyor. 87 değerini 85 yapınca hata vermiyor. Hitech 9.80 compiler kullanıyorum.

yamak

Değişkeni global tanımla yani main fonksiyonunun dışında.

kubilaytuna

Çok sağolasın :). Değişkeni dışarı atınca oldu. Anlıyamadığım, niçin main fonksiyonu içinde böyle bir sınırlama var. Galiba ram bankları ile alakalı.

yamak

çünkü fonksiyon içinde tanımlarsan değişken stack te tutulur. Stack de bu kadarlık bi değişken çin yeterli değilmiş

fgokcegoz

Stack alt programlara veya kesme alt programlarına dallanırken bulunulan adresi saklandığı ram bölgeleridir. main fonksiyonu içinde tanımlanan değişkenlerin stack ta tutulması gibi bir durum yoktur. Değişken tanımlamalarının derleyiciye bağlı veya mikroişlemcinin hafıza yapısındaki bank lar nedeniyle kısıtlamaları mevcut olabiliyor. Bu nedenle istediğiniz boyutta dizi değişkeni tanımlamanız mümkün olmamaktadır. Yoksa stack te değişken saklanması gibi bir durum söz konusu değildir.
"Vicdanın ziyası, ulûm-u diniyedir. Aklın nuru, fünun-u medeniyedir. İkisinin imtizacıyla hakikat tecelli eder." (Bediüzzaman Said Nursi)

yamak

Alıntı yapılan: fgokcegoz - 17 Eylül 2012, 14:49:17
Stack alt programlara veya kesme alt programlarına dallanırken bulunulan adresi saklandığı ram bölgeleridir. main fonksiyonu içinde tanımlanan değişkenlerin stack ta tutulması gibi bir durum yoktur. Değişken tanımlamalarının derleyiciye bağlı veya mikroişlemcinin hafıza yapısındaki bank lar nedeniyle kısıtlamaları mevcut olabiliyor. Bu nedenle istediğiniz boyutta dizi değişkeni tanımlamanız mümkün olmamaktadır. Yoksa stack te değişken saklanması gibi bir durum söz konusu değildir.
Bak şu allttaki yazıları bi oku:
http://www.enderunix.org/docs/devbook/x764.html
http://cboard.cprogramming.com/c-programming/41046-where-does-compiler-store-local-variables.html
http://wiki.answers.com/Q/Where_are_global_local_static_extern_variables_stored
Bi de aşağıdaki linkte Kaan Arslan'ın A dan z ye c kılavuzu adlı kitabı var. Kitabın 124. sayfasında 80x86 Sembolik Makina Dili Programcısına Not: yazan kısmı bi oku
A'dan Z'ye C Klavuzu - Kaan Aslan