CCS C - Printf ile out of ROM sorunu

Başlatan pathetic, 16 Şubat 2012, 10:31:25

pathetic

Selam arkadaşlar
16f628A için yazdığım bir programda hafıza sorunu ile karşılaştım.
#separate fonksiyonlar oluşturarak biraz rahatlattım ancak programın son kısmında hafıza yine yetersiz kaldı.
Bütün kodları tek tek düzenledim fonksiyonları oluşturdum tek tek hafızadaki değişikliğe baktım ve en son olarak şurada tıkandım.

ROM=93%  RAM=25%-33%
Bu durumdayım ve iki adet int16 değişkenimi lcd de göstermem gerekiyor.
lcd_gotoxy(1,1);
printf(LCD_putc," %04lu" ,sayi1); 

yazdığım anda ROM%99 oluyor ve
lcd_gotoxy(1,2);
printf(LCD_putc," %04lu" ,sayi2); 

ikinci sayıyı ekleyemiyorum. Bu işi yapacak daha az hafıza kullanan bir komut var mı?

omereliusuk

#1
https://www.picproje.org/index.php/topic,36544.msg263827.html#msg263827
komple okursan bir çözüm bulabilirsin. özellikle en alttan 2. sırada olanı...

pwm.c

#2
bence kodlarla uğraşıp durma PIC i değiştir. 16F88 yada 16F648 kullan.
16F648 modeli 16F628 in daha büyük hafızalı olanı. bunun dışında  herşeyi aynı fiyatı daha ucuz.
16f648 bulamassan 16F88 var. fiyatları 628 ile birbirine yakın. ayrıca 16f88 in fazladan ADC özelliğide var.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

pathetic

Eeprom'a yazma ve okuma kodları ile biraz daha uğraştım %98 ile programı tamamladım ama yeni birşey ekleyecek olsam daha bulacak bir çözümüm yok. Ancak şu printf'ler için yeni bir fonksiyon bulmazsam.
Şimdilik problem geçici bir şekilde çözüldü.

tekosis

yazdığınız prgramda sayi1 ve sayi2 için mecburen iki farklı komut kullanacaksınız ama sayı değişkenlerini yapı olarak tanımlarsanız misal  sayi[1] ve sayi[2] gibi bu bir ve iki değerlerini de n isimli bir kayıtçıda tutun bu sayede

printf(LCD_putc," %04lu" ,sayi[n]); komutu ile tek bir komutta birden fazla kayıtçının içeriğini yollayabilirsiniz. ayrıca bu mantıkla lcd_gotoxy(1,1); komutunda da lcd_gotoxy(j,k); gibi değişkenler kullanarak programınızı kısaltabilisiniz.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.