ccs out of rom hatası

Başlatan zamzam23, 10 Ağustos 2010, 10:02:26

zamzam23

ccs de pic16f876 derlerken out of rom hatası alıyorum internette arastırdım bıraz #separate kullan main fonksiyonu parcala demısler. lcd_gotoxy ve printf(lcd_putc komutlarını ayrı fonksıynda yaptırdım ancak yıne aynı hatayı alıyorum main foksıyon da daha da parcalanmıyor. bu problemı nasıl asabılırım?

radres

Programın çok mu fazla yer kaplıyor? Yoksa programın fazla yer kaplamıyor ama yine de bu uyarıyı mı veriyor?

zamzam23

program cok yer kaplamıyor. amasaolun cvp ıcın sorunu cozdum. main fonksiyonu daha da parçalanabiliyormuş.parcaladım sorun bitti. şimdi daha iyi anlıyorum neden goto ları sevmıyor programcılar diye.ana fonksiyonumda tek bir goto bıle kalmadı.tek bir sonsuz dongü o kadar.bu sorunu yasayan arkadaslar ıcın tek cozum:main fonksiyonunu parçalayın ayrı birer fonksiyon yapın ve her fonksiyuonun basında #separate kullanın.örn:
-----------------------
#separate
void sifrene(void)
{
//içerik buraya
}

//çağırırkende
sifrene();
--------------------------
hepsi bu kadar.

radres

#separate eki fonksiyona tam olarak nasıl bir özellik katıyor?

zamzam23

fonksiyon her çağrıldığında yazmaçlar Stack alanına yedeklenip fonksiyonun bulunduğu adrese dallanılır ve fonksiyondan dönerken dönüş adresleri Stack'ten geri çekilerek program kaldığı yerden devam eder.fonksiyonun her çağrıldıgı yerde bunun bır kopyası olusturulmaz.olusturlsa daha hızlı calısırama separate kullanılırsa daha az kod üretilirken daha fazla Stack kullanılmış olur.daha yavas calsıır ama olsun

radres

Alıntı yapılan: zamzam23 - 10 Ağustos 2010, 12:51:45
fonksiyon her çağrıldığında yazmaçlar Stack alanına yedeklenip fonksiyonun bulunduğu adrese dallanılır ve fonksiyondan dönerken dönüş adresleri Stack'ten geri çekilerek program kaldığı yerden devam eder.fonksiyonun her çağrıldıgı yerde bunun bır kopyası olusturulmaz.olusturlsa daha hızlı calısırama separate kullanılırsa daha az kod üretilirken daha fazla Stack kullanılmış olur.daha yavas calsıır ama olsun

Teşekkürler.

mistek

Alıntı yapılan: zamzam23 - 10 Ağustos 2010, 12:08:43
program cok yer kaplamıyor. amasağolun cvp ıcın sorunu cozdum. main fonksiyonu daha da parçalanabiliyormuş.parcaladım sorun bitti. şimdi daha iyi anlıyorum neden goto ları sevmıyor programcılar diye.ana fonksiyonumda tek bir goto bıle kalmadı.tek bir sonsuz dongü o kadar.bu sorunu yasayan arkadaslar ıcın tek cozum:main fonksiyonunu parçalayın ayrı birer fonksiyon yapın ve her fonksiyuonun basında #separate kullanın.örn:
-----------------------
#separate
void sifrene(void)
{
//içerik buraya
}

//çağırırkende
sifrene();
--------------------------
hepsi bu kadar.

Burada örnek vermişsiniz ancak ben tam olarak anlayamadım biraz daha ayrıntılı anlatırmısınız.

Benim void main() fonksiyonumun altında bir sürü durum var bunları nasıl parçalı fonksiyona böleceğim gelişi güzel mi?8-10 satırda bir mi?
ROM kullanımı %54
RAM kullanımı %20
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R