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

A question about function returning pointers to ram

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



Joined: 14 May 2004
Posts: 330

View user's profile Send private message

A question about function returning pointers to ram
PostPosted: Fri May 04, 2007 10:27 am     Reply with quote

Hi,

How to have functions returning pointers to ram strings without global arrays?

I mean, a function prototyped as char *myfunction( char value ); returning the ascii representation of the value for the printf( "%s", myfunction(10) );.
myfunction would have to do its work with a global array.

So I declare it, but a long printf( "%s %s %s", , myfunction(10), myfunction(20), myfunction(30) ); would need 3 global arrays.

How about other solutions?

Thank you.
Neutone



Joined: 08 Sep 2003
Posts: 839
Location: Houston

View user's profile Send private message

PostPosted: Fri May 04, 2007 11:55 am     Reply with quote

What you ask to do with function pointers can not be done on a PIC in an efficient manner.

What information is it that you wish to display? What format do you wish to display it in?
future56
Guest







PostPosted: Fri May 04, 2007 1:20 pm     Reply with quote

It´s not function pointers, but functions returning pointers to ram.

I want to convert many variables to a readable format and display them. So if I need to show 100 counts of 5ms, I´d call the convert function passing 100 to it and it returns a pointer to a string containing "500mS".

I can have a function for each kind of variable and just call them using printf when I need.

One solution is allocating many global arrays and pass the variable and array address to the function and it returns the same array address, but I have to take care of array usage myself when many conversions are needed in the same printf (need 8 at some places).

printf( "%s %s %s %s", myfunction( 100, array1), myfunction( 10, array2), myfunction( 200, array3), myfunction( 300, array4) )

There is another problem with printf not liking more than 3 strings, but this will be addressed later.

Maybe there is a clever way to do this.

Thank you.
Ttelmah
Guest







PostPosted: Fri May 04, 2007 2:57 pm     Reply with quote

This is what the memory handling functions, in memmgmt.c, are designed to handle. When the functon is first called, have it generate a node, using a static variable to store the 'node_t' variable. Then on future calls, work out how long the string needs to be, and use the 'update_node' function, to change the size.
Then when you have finished with the memory, use 'remove_node' to free the space.
Unfortunately, the space has to be pre-allocated, so unless you have other code that also uses the same memory handling ability, you will not save anything. Also, the calls can beccome rather unreliable...
Personally, I'd probably just allocate a static area to hold the returns, or have the calling program, give the function the location it wants the result to be put into.

Best Wishes
future



Joined: 14 May 2004
Posts: 330

View user's profile Send private message

PostPosted: Fri May 04, 2007 6:04 pm     Reply with quote

Ok, I'll have static arrays declared inside each function and see how it goes.

Thank you.
libor



Joined: 14 Dec 2004
Posts: 288
Location: Hungary

View user's profile Send private message

PostPosted: Sat May 05, 2007 2:24 am     Reply with quote

future56 wrote:
There is another problem with printf not liking more than 3 strings, but this will be addressed later.

...and what about programmers not liking 3-line-long instructions ? Smile

What is the reason not using separate 'printf's ? You could then even arrange them into a loop using adressable arguments (e.g. an array of strings).
future



Joined: 14 May 2004
Posts: 330

View user's profile Send private message

PostPosted: Sat May 05, 2007 9:41 am     Reply with quote

Quote:
...and what about programmers not liking 3-line-long instructions ? Smile


I use long printf's to write a whole 16x2 LCD screen, some have 6 fields.

Quote:
What is the reason not using separate 'printf's ? You could then even arrange them into a loop using adressable arguments (e.g. an array of strings).


There is not a good reason, it is just a way I found to make the code work.
As I am not a professional programmer I try to write working code and then look how others did the same thing.

I am working on a menu system with about 60 screens, ranging from simple messages, alarms, to char and 3D array editing...
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