ccs c de hata

Başlatan atillaa, 28 Eylül 2012, 15:13:24

atillaa

arkdaşlar şu kodu pcw de bi derlermisiniz , benim programda mı bi hata var yoksa algoritamada bi hatamı anlamadım
/*
rs232 ile seri iletişim kurmak
*/

#include <16f877.h>

#fuses xt,nowrt,nowdt,noput,nodebug,noprotect,nolvp,nocpd,nobrownout

#use delay(clock=4M)

#define use_portb_lcd TRUE
#include <lcd.c>

#use rs232 (baud=9600 , xmit=pin_c6 , rcv=pin_c7 , parity=N, stop=1 )

char klavye[20];

#int_rda

void serihaberlesme_kesmesi()
{
disable_interrupts(int_rda);
output_high(pin_c5);
gets(klavye);
printf("\n\rYazdiginiz Metin > %s\n",klavye);
printf(lcd_putc,"\f%s",klavye);
output_low(pin_c5);
printf("\n\rKlavyeden bir metin giriniz ve enter tusuna basiniz");
}


void main()
{
output_low(pin_c5);
lcd_init();
printf("\r**************** Merhaba ****************");

printf("\n\r Klavyeden bir metin giriniz ve enter tusuna basiniz");

enable_interrupts(global);
while(1)
{
enable_interrupts(int_rda);
}

}

mustisal

Merhabalar, Ccs ile derlendi. Hata yok ama uyarı veriyor.

>>> Warning 203 "sil.c" Line 42(1,1): Condition always TRUE
>>> Warning 216 "sil.c" Line 49(0,1): Interrupts disabled during call to prevent re-entrancy:  (@delay_ms1)
>>> Warning 216 "sil.c" Line 49(0,1): Interrupts disabled during call to prevent re-entrancy:  (lcd_send_nibble)
>>> Warning 216 "sil.c" Line 49(0,1): Interrupts disabled during call to prevent re-entrancy:  (lcd_send_byte)
>>> Warning 216 "sil.c" Line 49(0,1): Interrupts disabled during call to prevent re-entrancy:  (@PSTRINGC7_9600_62_63)
      Memory usage:   ROM=9%      RAM=9% - 14%
      0 Errors,  5 Warnings.
Build Successful.

atillaa

aynı uyarıyı bende alıyorum ama nedenini bir türlü anlayamadım

frederic

Kesme içerisin de lcd ile ilgili işlem yapmışsınız,bu aynı zamanda kesme içerisinde delay fonksiyonunda kullanıldığı anlamına geliyor.

Ve ccs c bu durumda kodu derliyor ama,böyle yaptığınız için kesmelerinizi iptal edip sizi uyarıyor.

atillaa

Alıntı yapılan: frederic - 04 Ekim 2012, 19:42:04
Kesme içerisin de lcd ile ilgili işlem yapmışsınız,bu aynı zamanda kesme içerisinde delay fonksiyonunda kullanıldığı anlamına geliyor.

Ve ccs c bu durumda kodu derliyor ama,böyle yaptığınız için kesmelerinizi iptal edip sizi uyarıyor.
benim anlamadığım daha önceki programlarımda da delay komutu kullandım kesmede ama bunda hata verdi ?

tekosis

kesme içerisinde çok fazla komut kullanmamak lazım. bir de printf komutu biraz uzun bir komut ve kesme içerisinde sıkıntı olabiliyor. siz kesme aldığınızda verilerinizle ana program dönüp o verilerle başka bir alt programda ekrana yazı yazdırabilirsiniz.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

hknbyrz

kesme içerisinde delay_ms kullanmak çok yanlış olur. Kesmenin amacı program akışını bozmadan hızlı bir şekilde dahili veya harici sinyalleri kontrol etmektir. O yüzden gecikme vermemek gerekir. Hatanın sebebi bu. Sorunsuz bir program istiyorsanız kesmenin içerisine hem az kod hemde asm ile hızlı geri dönüş yaptırmak lazım.