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

printf(lcd_putc,

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



Joined: 05 Apr 2013
Posts: 7

View user's profile Send private message

printf(lcd_putc,
PostPosted: Tue Feb 09, 2016 2:28 am     Reply with quote

Hi Guys;
This is my first time to write in the forum if I have written in wrong spot please accept my apology.
Here is my simplest code:
Code:

printf(lcd_putc,"\f%C%C%C%C%C%C%C%C%C%C%C%C%C%C%C%C%C%C%C%C

%C%C%C%C%C%C%C%C",243,243,243,143,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
243,243,243,243,243,243,243,243,);

if I print 26 characters compiler runs OK, however if I try to add one more %C, compiler throws an error: Too many parameters... Namely can not put 27 characters. Why is that ?
1) I am using Flex_LCD420.c as a LCD driver. Although checked by replacing it LCD420.c still same error message.
2) My compiler version PCH 5.025 and have not tried other versions.
Thank you guys in advance...Please help.
Ttelmah



Joined: 11 Mar 2010
Posts: 19510

View user's profile Send private message

PostPosted: Tue Feb 09, 2016 2:48 am     Reply with quote

There are limits on most things. There are length limits on the format string, limits on the maximum number of variables allowed etc. etc..
I think you will find your whole bracket contents are exceeding 255 characters, and this is the actual 'limit'.
Remember there is nothing to stop you splitting this onto multiple lines. Do 16 per line. Also, if this is just to send a graphic character to the LCD, then:
Code:

    int8 ctr;
    lcd_putc('\f');;
    for (ctr=0;ctr<80;ctr++)
       lcd_putc(243);


sends the 243 character 80 times, and is much smaller and easier for the compiler....
Chevy64



Joined: 05 Apr 2013
Posts: 7

View user's profile Send private message

PostPosted: Tue Feb 09, 2016 3:50 am     Reply with quote

Thank you Ttelmah;
I got you, but still have a hard time to understand.
I am printing only 26 Characters not 255,and what if I try to print different characters instead of repeating characters. How come I could exceed my quota?
Ok I made a calculations totally assumptive.. Say every character in LCD composed of 5x8 pixels and I can put 26 thus 40X26=1040 which is 1K. So I have to have 4x255 pixels. Than question is How come I can put an ordinary numbers filling up the LCD. Tried I can not.. So problem is LCD's memory becomes full. Sorry for out loudly thinking. So how to clear? Should I print one line at a time? Tnx Tnx.
Ttelmah



Joined: 11 Mar 2010
Posts: 19510

View user's profile Send private message

PostPosted: Tue Feb 09, 2016 4:26 am     Reply with quote

The point is that the compiler has to parse the whole statement. It is the length limit on the _statement_ that you are hitting. Think about it, you have all the individual %C's, then all the ,xxx values. All have to be handled.
Remember a line in the printf, is not a line in the display. You can do something like:
Code:

    printf("something");
    printf(" something else");

and the output will receive "something something else", without break.

Hopefully you would never be sending separate characters for anything involving this many outputs. If you have (for instance) a load of data, then have an array containing this, and use a loop to send the array.

The thing about 'printf', is that it involves a parser. So the %C command says 'go and pull the next variable, format it in this form, and send it'. A complete separate routine. Though you are using the simplest output from the parser, it is still a terribly complex way of just outputting a value...

Look at how font data is sent from the fgx_graphics routines.
Chevy64



Joined: 05 Apr 2013
Posts: 7

View user's profile Send private message

PostPosted: Tue Feb 09, 2016 5:28 am     Reply with quote

Thank you all for your prompt answer. As Ttelmah explained; despite printf is an adorable function and does arduous job it is a parser with limits. If one splits also works with 4X20 LCD by putting r\n or \n at the end. Again many thanks for your answers.
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