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 support@ccsinfo.com

const char strings[x][y] counting only 15

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



Joined: 08 Apr 2009
Posts: 100
Location: Chennai, India

View user's profile Send private message

const char strings[x][y] counting only 15
PostPosted: Mon Mar 14, 2016 10:07 am     Reply with quote

Dear Board

I'm mad at the behavior of my PIC controller.

16F877A, running at 20Mhz with 16x2 LCD - all works fine except last 2 messages

here is my code
Code:

int lcd_second_line = 14;
int lcd_first_line = 13;

#DEFINE SIZE_COMMAND    18      // Sets the Max command Length including '\0'
#DEFINE TOTAL_STRINGS    17      // Total number of Searchable strings

const char Strings[TOTAL_STRINGS][SIZE_COMMAND]={   
                                       "NA\0",                 // index 1
                                       "SUN\0",                 // index 2
                                       "MON\0",                 // index 3
                                       "TUE\0",                 // index 4
                                       "WED\0",                 // index 5
                                       "THU\0",                 // index 6
                                       "FRI\0",                 // index 7
                                       "SAT\0",                 // index 8
                                       "   SD CARD IN   \0",                 // index 9
                                       "  SD PULLED OUT \0",                 // index 10
                                       " INSERT SD CARD \0",                 // index 11
                                       "   SD CARD OK   \0",                 // index 12
                                       "    TEMP MAX     \0",                 // index 13
                                       "   TEMP MIN   \0",                 // index 14
                                       " RTC CLOCK FAIL \0",                 // index 15
                                       " MP3 MODULE FAIL\0",                 // index 16
                                       "TEMP SENSOR-\0"                 // index 17
};


void test_code(){
int temp99 = 0;

for(temp99=0; temp99 < total_strings ; temp99++){
   printf(lcd_putc,"\f      DEMO  %i", temp99);
   printf(lcd_putc,"\n%s",strings[temp99]); 
   delay_ms(1000);
}
}


my LCD shows untill 15 index very good
and after 16 and 17 are not displaying at all...

Plz someone help me where im mistaken

---
i would like to know if there is some limit for multi dimensional arrays??

also my first line shows the temp99 counting untill 17 but for 16 and 17 line 2 in LCD displays empty

thank you.
Ttelmah



Joined: 11 Mar 2010
Posts: 19451

View user's profile Send private message

PostPosted: Mon Mar 14, 2016 10:31 am     Reply with quote

1) What compiler version?. There is a limit for any array, on older compilers.
2) You don't need the '\0' declarations. A _string_ is automatically terminated with a NULL. You are making each message one character longer than it needs to be. Because of this your 'TEMP MAX' string is longer than the space available for it.....

In general in C:

"A Test message", uses 15 characters of storage. The fourteen text characters, and the NULL that is automatically added to a string.
asmboy



Joined: 20 Nov 2007
Posts: 2128
Location: albany ny

View user's profile Send private message AIM Address

PostPosted: Mon Mar 14, 2016 10:38 am     Reply with quote

in addition to MR.T's comment -
Code:


Strings[TOTAL_STRINGS][SIZE_COMMAND]
....vs.....

strings[temp99][?-huh-?] ???
when accessed later



i call your attention to the above

and i count only 17 defined elements in your array
and as you count( correctly) from temp99=0 -16 will show them all
your '17' from base 0 to 16 is actually all you defined

it is doing pretty much all it can in displaying just the only 17 strings you defined....

is not the pic or ccs - code is doing what i think you asked
you need to ask it "better" Very Happy Very Happy
mutthunaveen



Joined: 08 Apr 2009
Posts: 100
Location: Chennai, India

View user's profile Send private message

4.114
PostPosted: Mon Mar 14, 2016 11:14 am     Reply with quote

Dears

im using 4.114 ccs compiler

i ve deleted the NULL for optimising. and re runned the code but no change in behaviour

and as asmboy said.
yes its only from 0 - 16

untill index 0-15 (array 0-14) all messages displays on LCD
but index 16-17 (array 15-16) are not displayed over LCD. the forloop is running i checked it.

i hope its very clear now.
asmboy



Joined: 20 Nov 2007
Posts: 2128
Location: albany ny

View user's profile Send private message AIM Address

PostPosted: Mon Mar 14, 2016 12:04 pm     Reply with quote

Quote:

(array 15-16) are not displayed over LCD.


what IS displayed ?? anything ?? garbage ??
newguy



Joined: 24 Jun 2004
Posts: 1907

View user's profile Send private message

Re: const char strings[x][y] counting only 15
PostPosted: Mon Mar 14, 2016 12:09 pm     Reply with quote

mutthunaveen wrote:
Code:


#DEFINE TOTAL_STRINGS    17      // Total number of Searchable strings

const char Strings[TOTAL_STRINGS][SIZE_COMMAND]={ ... };

for(temp99=0; temp99 < total_strings ; temp99++){
   ...
   }



Your code will only work if you DO NOT have a #case statement (which is the default).

That said, try changing the "total_strings" to "TOTAL_STRINGS" in the for() statement. What you have now is very sloppy and poor practice. Don't mix/change capitalization on defines/variables.
Ttelmah



Joined: 11 Mar 2010
Posts: 19451

View user's profile Send private message

PostPosted: Mon Mar 14, 2016 12:52 pm     Reply with quote

The answer here is the compiler version.
4.114, is very old. There was a limit of 255 characters maximum in any array stored in ROM back at this time. The original code was written to allow ROM data to be stored in chips that didn't have any ability to actually access ROM. So ROM data was stored as a program that returns the required bytes. This was limited to an int8 index. Later this was changed, and V5 allows larger const arrays. I think it was actually first done in the later V4 versions, but not as early as .114.
mutthunaveen



Joined: 08 Apr 2009
Posts: 100
Location: Chennai, India

View user's profile Send private message

PostPosted: Tue Mar 15, 2016 12:10 am     Reply with quote

Ttelmah thank you for final root cause identification.

so, its compiler error..
i was expecting a warning message at least. but i dont find any to solve the issue.

now i will limit my size or split it by 2 different variables.

thank you.

i would like to know which is the last stable version of CCS C to work with??
can you suggest?
Ttelmah



Joined: 11 Mar 2010
Posts: 19451

View user's profile Send private message

PostPosted: Tue Mar 15, 2016 10:18 am     Reply with quote

The current V5 compilers are far more stable than any of the older compilers.
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