Re: microblaze getchar() not functioning properly

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Mike,

> Post the code which actually failed, after you have verified the failure.

Following is the code which has some problem with getchar() function.

#include<stdio.h>
 volatile int i,j=0;
 int main()
{
   char buf[10];
   xil_printf("main\n");
     while(j<6)
   {
       i=getchar();
       xil_printf("input value of i is:%c\n",i);
       buf[j]=i;
       xil_printf("value of j is:%d\n",j);
      j++;
   }
       xil_printf("buffer contains:%s\n",buf);
       return 0;
}

I have given input as abc
.
I have observed following output:

 main
 input value of i is:a           ---------->my input ( I have not
pressed any key after entering 'a')
 value of j is:0
 input value of i is:             -------------> It is automatically
skipping to take my input
 value of j is:1


 input value of i is:b           ---------->my input ( I have not
pressed any key after entering 'b')
 value of j is:2
 input value of i is:              -------------> It is automatically
skipping to take my input
 value of j is:3


 input value of i is:c           ---------->my input ( I have not
pressed any key after entering 'c')
 value of j is:4
 input value of i is:             -------------> It is automatically
skipping to take my input
 value of j is:5

  buffer contains: a


If we observe it is waiting for user input when the value of variable
j is 0, 2 and 4.

I have given the input to the program using HyperTerminal. I have
entered only abc as my input.

> Look at the assembly generated by gcc.  Where is j incremented?

I have observed the code generated for j++ it is correct.
Please look into the below objdump code.
 j++;
880002c8:	b0008800 	imm	-30720
880002cc:	e8603d88 	lwi	r3, r0, 15752
880002d0:	30630001 	addik	r3, r3, 1
880002d4:	b0008800 	imm	-30720
880002d8:	f8603d88 	swi	r3, r0, 15752

> Why do you think that this is a problem in getchar()?

With the above observation I am thinking that getchar() function is
appending a null character after each character.

Can you please give me some inputs so that I can proceed further.

Thanks in advance,
Nagaraju



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux