Log in

View Full Version : const array - 'auto' compile error ?


oddjob
15-02-2007, 17:55
I have this User Code in OperatorControl immediately after the Variable block:


rom const unsigned char L3[] = {000,001};


There is a compile error "local 'L3' in program memory can not be auto". This is just a test before I use larger arrays - what's wrong with the code?

oddjob
15-02-2007, 19:45
I think the error message means that I can't declare a const there because only automatic local variables are allowed. If only I could add a User Code block between Globals and Begin in Main! Guess it's time to read the manual.

Branden Ghena
15-02-2007, 22:12
I got the same error, I just removed the rom classification to make it work.

whytheheckme
15-02-2007, 22:43
Wouldn't this make it be stored in RAM, not ROM? I think the purpose of putting it in ROM is because there isn't enough room in RAM....

Just speculating, haven't actually tried it.

Jacob

oddjob
15-02-2007, 23:19
I got the same error, I just removed the rom classification to make it work.

Removing the word rom, and with an array of length 256 (unsigned char) I get this error:

stack frame too large

So I don't think that is creating the array in program space? Smaller arrays do compile.

whytheheckme
16-02-2007, 01:26
mmmm....

I think you have a total of 254 chars, including the ones you use in your program. I just seem to remember this number. I could be completely off the mark.

Jacob

Mike Betts
16-02-2007, 13:47
This will not work:

rom const unsigned char L3[] = {000,001};

This will work:

rom const unsigned char L3[2] = {000,001};

You have to tell the compiler the size of the array in ROM data space.

Mike

oddjob
16-02-2007, 14:19
This will work:

rom const unsigned char L3[2] = {000,001};

You have to tell the compiler the size of the array in ROM data space.

Mike

I changed my code:

rom const unsigned char LUT4[256] = {000,003,006,009,012,014,017,020,023,025,028,030,0 33,035,038,040,042,044,047,049,051,053,055,057,059 ,061,063,065,067,069,070,072,074,076,077,079,080,0 82,083,085,086,088,089,090,092,093,094,095,096,098 ,099,100,101,102,103,104,105,106,107,108,108,109,1 10,111,111,112,113,114,114,115,116,116,117,117,118 ,118,119,119,120,120,121,121,121,122,122,122,123,1 23,123,124,124,124,124,125,125,125,125,125,125,126 ,126,126,126,126,126,126,126,127,127,127,127,127,1 27,127,127,127,127,127,127,127,127,127,127,127,127 ,127,127,127,127,127,127,127,127,127,127,127,127,1 27,127,127,127,127,127,127,127,127,127,127,127,128 ,128,128,128,128,128,128,128,129,129,129,129,129,1 29,130,130,130,130,131,131,131,132,132,132,133,133 ,133,134,134,135,135,136,136,137,137,138,138,139,1 40,140,141,142,143,143,144,145,146,146,147,148,149 ,150,151,152,153,154,155,156,158,159,160,161,162,1 64,165,166,168,169,171,172,174,175,177,178,180,182 ,184,185,187,189,191,193,195,197,199,201,203,205,2 07,210,212,214,216,219,221,224,226,229,231,234,237 ,240,242,245,248,251,255};


Still didn't work for me, but maybe I don't have the code in the right part of the project. Where should the code go? Seems like it can't be in a User Function, and there is no way to enter it in Main...Globals and there is no way to add User Code to Main. I'm sure I could get it to work in MPLAb, but Easyc Pro is fighting me.

Mike Betts
16-02-2007, 18:19
I did not realize you are using easyC. I am not sure how to work in that environment.

In MPLAB, it would go before the first function call in the file.

BradAMiller
17-02-2007, 01:22
One way that works with easyC Pro to use the new C source file feature that was just added this year.

Create a source file (go into the project tab, right click "Source Files" and create a file). In there put the definition of the array with the initialization:
rom const unsigned char L3[2] = {000,001};
Then edit the file UserInclude.h and insert an extern declaration for the array like this:
extern rom const unsigned char L3[];
Now you can use references to the L3 array in assignment statements or other expressions throughout your block-based easyC program. The only problem is that the array will not show up in the list of variables when you are creating expressions.

oddjob
17-02-2007, 01:36
Thanks Brad. That did the trick.