CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

Very general question on changing Variable types

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
SkeeterHawk



Joined: 16 Oct 2010
Posts: 31
Location: Florissant, CO

View user's profile Send private message

Very general question on changing Variable types
PostPosted: Sat Nov 10, 2012 10:42 pm     Reply with quote

Hello everyone.

I am pretty new to C and would appreciate a little bit of insight.

I am working with a system that is using RS-232 over a serial port using a FTDI RS232R chip, so this is pretty straight forward in hardware.

My question is in the type conversions. I am pretty clear on the Serial Port and the conversions there, but I am using the Flex_LCD driver from PCM Programmer to display what came over the serial port. This works great, but can I get some tips on where I can find information on converting from HEX to ASCII and back for this type of Function? Thanks so much for this elementary information.

Jonathan
_________________
Life is too short to only write code in assembly...
Ttelmah



Joined: 11 Mar 2010
Posts: 19549

View user's profile Send private message

PostPosted: Sun Nov 11, 2012 3:51 am     Reply with quote

Look at printf in the CCS manual. Third entry in it's 'syntax' summary:

"printf (fname, cstring, values...)"

and the comment below:

"fname is a function name to be used for outputting (default is putc is none is specified)."

printf, can be used to drive the LCD, just as it drives the serial port. So:

printf(lcd_putc,"HiThere");

Here 'fname' is 'lcd_putc' (the function to put a character to the LCD), and putc then behaves exactly as it would when using the serial port, except sending it's output to the LCD. So:

printf(lcd_putc,"%04x",var);

Will display 'var' using four hex digits, with leading zeros, on the LCD.

Best Wishes
SkeeterHawk



Joined: 16 Oct 2010
Posts: 31
Location: Florissant, CO

View user's profile Send private message

PostPosted: Sun Nov 11, 2012 2:41 pm     Reply with quote

Thank you very much, Ttelmah.

I thought that I could do it with the printf function, but didn't know how. Thank you very much for your answer. That really helps.
_________________
Life is too short to only write code in assembly...
SkeeterHawk



Joined: 16 Oct 2010
Posts: 31
Location: Florissant, CO

View user's profile Send private message

PostPosted: Mon Nov 12, 2012 10:13 pm     Reply with quote

Along this same subject, if I have a 32-bit HEX value, how would I use printf to convert that into an ascii string? The following really simplified code doesn't work:

int32 Result;

Result = spi_xfer (Chamber,0,32); // Chamber is the Stream ID

printf ("%s", Result);


I'm sure that there is something really fundamental I am missing here. I sincerely appreciate the insight here to get this to output something more man-readable.

Also, do I need to send the "0" on the spi_xfer? I don't have a Dout pin. Just wondering...

Thanks so much, as always, for your insight and patience.
_________________
Life is too short to only write code in assembly...
Ttelmah



Joined: 11 Mar 2010
Posts: 19549

View user's profile Send private message

PostPosted: Tue Nov 13, 2012 2:38 am     Reply with quote

You need to get a basic C book. %s, _outputs_ a string value. ie., something already stored as a string. Result is a number. Nothing else. Everything printf outputs is ASCII text (not actually a 'string', since a string implies _null terminated_ in C).
Just print it (remember it is 'long').
so:

printf("%Lx",Result);

Yes, SPI is always bi-directional, even if you don't 'use' the second direction. The functions require the output data.

Best Wishes
SkeeterHawk



Joined: 16 Oct 2010
Posts: 31
Location: Florissant, CO

View user's profile Send private message

PostPosted: Tue Nov 13, 2012 9:40 am     Reply with quote

Thanks again for your answer, Ttelmah.

By this point I have a pretty sizable stack of C books that I am referring to constantly, but none is very clear on what all printf can do. I can do this in assembly in a snap (though it would take time), but I am thinking that I can rely on printf to do all of these conversions for me. I guess not.

What I am wanting to do is to output the 32-bit number formatted in ASCII. In assembly, I would convert the whole thing to BCD and then link the BCD to the ASCII equivalent before pumping it over the UART. It seems that if you are just talking about one number or character, printf will actually do this for you, but it seems to be getting confused when working with a string (as you said it would).

I guess another thing that is confusing me a little is if I converted the number to BCD manually, I would potentially have a 10 digit number. How would I handle this in C as it seems to stop giving you options at 32 bits unless you are talking about a string (I think).

I'm going to review "The K&R Bible" (among others) yet again for variable types, and type conversions...but I would sincerely appreciate a veteran's practical outlook on such a fundamental part of this language. There's something not getting through my skull apparently.

Thanks, as always.
_________________
Life is too short to only write code in assembly...
Ttelmah



Joined: 11 Mar 2010
Posts: 19549

View user's profile Send private message

PostPosted: Tue Nov 13, 2012 9:49 am     Reply with quote

No, you are missing the point.

Printf _always_ outputs in ASCII.

You do not have a 'string', you have a number. Result is a number, not a string.
You _do not have a string, or need to ever get involved in a string_......
Strings in C, are null terminated character arrays containing ASCII values.
You do not _have_ such an array, hence the %s format won't work.

printf("%Lx",Result);

will print it out in ASCII. If you want to force this to be 8 hex digits, then:

printf("%08Lx",Result);

will always output four digits, with leading zeros.

Printf, _outputs_ in ASCII all the time. Nothing else.

Best Wishes
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group