We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Can any body tell me how printf() and the likes work under C51? If I don't have a display device, where does the output go? If I don't have a kernel and still want to use the functions and redirect the output to the serial port what should I implement first? I have already implemented a putch() function. Can I use it? I'm a rookie here in C51. Would you help me on that? Thanks very much.
All of the I/O routines (printf, scanf, puts, and so on) output characters using the putchar routine and input characters using the _getkey routine. The source for each of these routines is provided. The default for putchar is to outout characters on the 8051's serial port. The default for _getkey is to input characters on the 8051's serial port. You may rewrite these routines, however, to send characters wherever you want. Jon
By default, the printf routine used to send data to the Video Interface ( monitor ), it's true if we're talking about PCs and the like... In the Embedded World ( C51, C251, etc... ) of course we don't have a video interface/monitor, the available option to input/output data is the serial channel, all the routines that usually send data to the monitor in a PC will work with the serial channel in the C51, so we can conclude that most of the I/O routines were rewrote to input/output data from/to the SBUF ( serial buffer ) using the best variable types for the C51 ( char - 8bits architecture). So when we talk about embedded, now we know that data is sent to the serial interface. It's a pity the fact that Keil doesn't have routines source code, just to glance, ( prinft.c, strcopy.c,... ) in a folder like Avcase do, so unfortunately you'll not be able to glance at the sources to know exactly how they work . You can redirect the input/output to a place different than the serial channel, you can redirect to a LCD connected to the P1 ( Port 1 ) for example. The following files, Putchar.c and Getkey.c ( C51\Lib folder ), determine where the I/O commands will place data, you can change them and redirect the input/output to wherever you want, after rewriting the files you will need to add them together with your project files, like you do when you change the startup.a51 .
<I>"It's a pity the fact that Keil doesn't have routines source code, just to glance, ( prinft.c, strcopy.c,... )</I> The standard library implementations for printf, etc, are available from many places. We don't really need to know how printf does its magic, just how to send the characters it generates to whatever our embedded platform supports. That's where putchar (and getkey) come in!
We don't really need to know how printf does its magic It depends on the viewpoint, I don't belive in magic... ;-)