microblaze getchar() not functioning properly
Jeff Kenton
jkenton@tilera.com
Thu Jul 28 12:15:00 GMT 2011
On 07/28/2011 07:30 AM, naga raj wrote:
> 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
Attach gdb to your process and put a breakpoint in the loop. printf()
is not the best way to debug problems.
--jeff
More information about the Gcc-help
mailing list