Arkadaşlar merhaba , aşağıdaki kodları anlayamadım yardımlarınızı bekliyorum.
- Usart_Oku başında ünlem fonksiyonu değilliyormu ? Mantığını çözemedim.
- Usart_Oku fonk. bana uarttan okunan veri döndürmesi gerekiyor bu satırın anlamı nedir.Usart_Oku(&veri,PortNum));
Açıkçası aşağıdakileri küllüm anlamadım.
main.c
uint8_t veri;
while(1){
while(!Usart_Oku(&veri,PortNum));
lcd_gotoxy(2,1);
lcd_yaz(" ");
lcd_gotoxy(2,1);
veri_yolla(veri);
while(Usart_Oku(&veri,PortNum))
veri_yolla(veri);
}
uart.c
uint8_t Usart_Oku(uint8_t *veri,uint8_t PortNum)
{
uint32_t say;
if( PortNum == 0 ) {
while(UART0Count==UART0CountOku){
say++;
if(say==5000)return( FALSE );
}
*veri=UART0Buffer[UART0CountOku];
if(UART0CountOku == BUFSIZE)UART0CountOku=0;
UART0CountOku++;
return (TRUE);
}
else if( PortNum == 1 ){
while(UART1Count==UART1CountOku){
say++;
if(say==5000)return( FALSE );
}
*veri=UART1Buffer[UART1CountOku];
if(UART1CountOku == BUFSIZE)UART1CountOku=0;
UART1CountOku++;
return (TRUE);
}
else if( PortNum == 3 ){
while(UART3Count==UART3CountOku){
say++;
if(say==5000)return( FALSE );
}
*veri=UART3Buffer[UART3CountOku];
if(UART3CountOku == BUFSIZE)UART3CountOku=0;
UART3CountOku++;
return (TRUE);
}
return ( FALSE );
}
}
Usart_Oku(&veri,PortNum));
burda fonksiyon sana true or false deger donduruyo yani deger okunduysa true okunmadiysa false deger donduruyor.
unlemin anlami ise gelen veri true false hangisi oldugunu kontrol ediyor.yani unlem varsa false geldiyse demek unlem yoksa true geldiyse demek.
Hocam yanıt için sağol , normalde program uarttan veriyi okuyup lcdye yazması gereken bir programdır diye fikir yürütüyorum.while(!Usart_Oku(&veri,PortNum));
Doğrumudur doğruysa mantığı nedir.
verdigin satırda parantez ici dogru olana kadar bekle diyo yani uarttan veri okuyana kadar bekle diyor.
O satırı anladımda aşağıdaki satırlara inceleyebilirmiyiz.
while(1){
while(!Usart_Oku(&veri,PortNum));// veri true olana kadar bekle
lcd_gotoxy(2,1); //lcd satıra git
lcd_yaz(" ");//boş yaz
lcd_gotoxy(2,1);//lcd satıra git
veri_yolla(veri);// işte burasını anlamıyorum veri değişkenini nereden çekiyor
while(Usart_Oku(&veri,PortNum)) // ve burası veri değişkeni main satırında unsigned int 8 olrak tanımlı nasıl pointer muamelesi görüyor.
veri_yolla(veri);
}
Usart_Oku(&veri,PortNum) bu fonksiyonda zaten usarttan gelen veriyi veri degişkenine yazıyor.sonra usarttan gelen veriyi tekrar usarttan gonderiyor.
veri pointer mumalesi gormuyor usartoku fonksiyonunda verinin adresini yollanıyor usart oku fonksiyonunda pointer o adrese usarttan gelen veriyi yazıyor olay bu
justice_for_all arkadaşım , veri değişkenin başındaki and işareti anlamı nedir.
Usart_Oku(&veri,PortNum));
Alıntı yapılan: armsistem - 14 Şubat 2012, 17:15:34
justice_for_all arkadaşım , veri değişkenin başındaki and işareti anlamı nedir.
Usart_Oku(&veri,PortNum));
Veri değişkenin adresini gösterir.
Hocam pointer kavramını inceleyin.
Alıntı yapılan: armsistem - 14 Şubat 2012, 17:15:34
veri değişkenin başındaki and işareti anlamı nedir.
Usart_Oku(&veri,PortNum));
veri'nin adresi.
uint8_t Usart_Oku(uint8_t *veri,uint8_t PortNum)işlevine baktığımız zaman bir uint8_t döndürüyor. İlk parametresi bir gösterge. Nasıl bir gösterge?
uint8_t tipindeki bir değişken için gösterge. Büyük ihtimal bu uint8_t işaretsiz 8 bitlik bir tamsayıdır. Yani 0 - 255 arasında değer alabilir.
Göstergeler değişkenin adresini tutarlar. Bu yüzden gösterge istenen bir yerde direkt olarak değişkenin adresini de gönderebilirim. Aynı şey.
Gene bir dizinin ismi o dizinin adresini tutar.
char harfler[10];
char * gosterge = harfler;
Göstergeler de adres gösterdiğine göre bir dizinin ismini bir göstergeye atayabiliriz. O zaman göstergemiz harfler'in ilk elemanını gösteriyor.
Peki neden gösterge kullanmaya ihtiyaç duyarız? Bunun nedeni eğer işlevin değişkenler üzerinde değişiklik yapmasını istiyorsak, işleve göndereceğimiz parametreleri gösterge olarak seçeriz. Örneğin:
#include <stdio.h>
void yerDegistir(int * a, int * b)
{
int gecici = *a;
*a = *b;
*b = gecici;
}
int main()
{
int a = 4, b = 1;
printf("sayilar degismeden önce a : %d b : %d\n", a, b);
yerDegistir(&a, &b);
printf("sayilar yerdegistirdikten sonra a : %d b : %d\n", a, b);
}
Şimdi eğer yukarıdaki yerDegistir işlevinde gösterge kullanmasaydık bu a ve b değişkenlerinin değerini değiştiremeyecektik. Programı gösterge kullanmadan deneyiniz ve aradaki farkı görün.
teşekkürler yanıtlar için.