Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   Programming (http://www.chiefdelphi.com/forums/forumdisplay.php?f=51)
-   -   printf problem (http://www.chiefdelphi.com/forums/showthread.php?t=31073)

cbolin 03-11-2004 13:09

printf problem
 
Hi,
I am trying to print the examples in the printf_lib.c commented examples.
I initialized the variables as directed and then called the following each second.

Code:

printf("%s\n",StrPtr);                            //will display 'Hello world!'
printf("X = %d, Y = %x, Z = %lx\n",x,y,z); // will display 'X = 15'
                                                        // 'Y = 0x50'
                                                        // 'Z  = deadface'

printf("X = %b (base 2)\n",x);                // will display 'X = 1111 (base 2)'
printf("X = %16b\n",x);                        // will display 'X =
                                                        // 0000000000001111'
printf("X = %04x\n",x);                        // will display 'X = 000f'

Here are the results printed to the IFI_Loader Terminal.

Code:

H
  1  5  ddf    1  01  0

...sometimes I get this...

H
  1  5  ddf= 12  01 0

My printf isn't processing all the characters...only the first it seems. Any thoughts on how to get this working? A UART initialization problem? My PC?

Regards,
ChuckB

Astronouth7303 03-11-2004 15:03

Re: printf problem
 
Quote:

Originally Posted by cbolin
Hi,
I am trying to print the examples in the printf_lib.c commented examples.
I initialized the variables as directed and then called the following each second.

Code:

printf("%s\n",StrPtr);                            //will display 'Hello world!'
printf("X = %d, Y = %x, Z = %lx\n",x,y,z); // will display 'X = 15'
                                                        // 'Y = 0x50'
                                                        // 'Z  = deadface'

printf("X = %b (base 2)\n",x);                // will display 'X = 1111 (base 2)'
printf("X = %16b\n",x);                        // will display 'X =
                                                        // 0000000000001111'
printf("X = %04x\n",x);                        // will display 'X = 000f'

Here are the results printed to the IFI_Loader Terminal.

Code:

H
  1  5  ddf    1  01  0

...sometimes I get this...

H
  1  5  ddf= 12  01 0

My printf isn't processing all the characters...only the first it seems. Any thoughts on how to get this working? A UART initialization problem? My PC?

Regards,
ChuckB

Transmitting before initializing the UART results in the notorious red-green light problem. As for bad initialization, I can't tell you.

IFI's implementation of printf doesn't do all the control codes that the PC versions use. But the code given is copied from printf_lib.c (lines 19 through 27)

It looks like it's loosing characters, either totally or just garbled. They come through interminently, but when they come in they are intact. (a baud-rate mismatch usually results in framing errors, garbage, and/or extra/lost bytes)

When I can get the config dialog fixed, I'll upload Comm Test to my site (to http://endeavour.zapto.org/astro73/programs/). The version that is up at the moment is broken.

Joe Ross 03-11-2004 17:48

Re: printf problem
 
What type of computer are you using, and what type of connection to the RC?

eugenebrooks 08-11-2004 01:39

Re: printf problem
 
Quote:

Originally Posted by cbolin
Hi,
My printf isn't processing all the characters...only the first it seems. Any thoughts on how to get this working? A UART initialization problem? My PC?

Regards,
ChuckB

Explicitly cast the integer arguments being provided to printf
to the desired type. If x is an int, y is a int, and z is a long,
use: printf("%d %d %lx\n", (int)x, (int)y, (long)z);

The default way in which arguments are pushed, for routines
that do not have their arguments declared, is char. This is a
property of the MicroChip C-Bot compiler enironment. You may
influence this behavior by changing settings, but who knows what
else will break if you do that. The only place the problem seems
to appear is the printf calls, because the arguments for all the
other routines are explicitly declared. It is not hard to provide
the required type casts to the printf calls.

The fact that you can't print a long using the provided printf()
is quite a bother. If you would like a routine that addresses that
problem, refer to the file pl.c available in the EiC.zip file available
in the technical page at www.srvhsrobotics.org The code involved
is described in the programming tutorial (well, perhaps not quite
a tutorial) available from the same web page.

Eugene

eugenebrooks 09-11-2004 02:44

Re: printf problem
 
Quote:

Originally Posted by eugenebrooks
Explicitly cast the integer arguments being provided to printf to the desired type.
Eugene

I was obviously answering the wrong question! Sorry...


All times are GMT -5. The time now is 20:01.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi