EmbeddedRelated.com
Forums

Reserving space for a large table

Started by tim....@l-3com.com April 9, 2008
I am trying to reserve space in one project to allow for a large table
to be programmed in another to remain in the Flash.

I have successfully put the table where I need it to be using segments
and the Linker Script. But I have not been able to make the primary
project not overwrite the space. Below are the relevant areas of the
linker script. I also have told the debugger to "Retain Unchanged
Memory". I know my code is not going up into this space but it still
seems to be filled with FF's.

Thanks for your help

Tim

// ---------------------

// Constant data

// ---------------------

-Z(CONST)DATA16_C,DATA16_ID,DIFUNCT00-EFFF

// ---------------------

// Code

// ---------------------

-Z(CODE)CSTART,ISR_CODE00-EFFF

-P(CODE)CODE00-EFFF

//-Z(CODE)OLED_FONT0-FFDD // this line is used for
building the table in the table project


Beginning Microcontrollers with the MSP430

Based on your original post you are trying to get around the IAR 4k
limit. Obviously IAR in their tools are doing everything they can to
prevent this. Justifiably they want to be paid for the time and effort
taken to develop the tools, exactly like you will expect to be paid for
your labours. So they aren't exactly going to allow any simple bypasses
like this to get around their limits. Obviously the only free solutions
are:-

1. Use assembler, all becomes so free, simple and unlimited then.
2. Buy a compiler, any compiler, and the limits are all gone.
3. Use CCE, it sounds like a pain, but it has higher limits.
4. Use MSPGCC. It sounds an even bigger pain, but is unlimited and is free.
5. If your final program has any com ability built in, or has space
left, then download the data and have it written to flash by the final
application. A bit harder than the other options but a simple downloader
doesn't take much space, and can be disabled once done the first time.
Simply check the start of the data segment, if -1 then go to data grab
mode, else run as normal.

Don't forget that you can use the "erase main memory" only option to
leave some code in the INFO segments (such as a simple data downloader)
and it won't count to the 4k limit next time around. Since you can also
execute code from here as if it were ordinary code memory you could
place a simple "do I have my tables yet? " in the main code and branch
here if not. That won't add more than a few words to your program.

that's me out of ideas

Al

t...@l-3com.com wrote:

>I am trying to reserve space in one project to allow for a large table
>to be programmed in another to remain in the Flash.
>
>I have successfully put the table where I need it to be using segments
>and the Linker Script. But I have not been able to make the primary
>project not overwrite the space. Below are the relevant areas of the
>linker script. I also have told the debugger to "Retain Unchanged
>Memory". I know my code is not going up into this space but it still
>seems to be filled with FF's.
>
>Thanks for your help
>
>Tim
>
>// ---------------------
>
>// Constant data
>
>// ---------------------
>
>-Z(CONST)DATA16_C,DATA16_ID,DIFUNCT00-EFFF
>
>// ---------------------
>
>// Code
>
>// ---------------------
>
>-Z(CODE)CSTART,ISR_CODE00-EFFF
>
>-P(CODE)CODE00-EFFF
>
>//-Z(CODE)OLED_FONT0-FFDD // this line is used for
>building the table in the table project
>
>
>
Yes I am trying to get around the 4k limit and I would prefer to use CCE
but since the SimpliciTI Network Stack doesn't work with CCE 2.0. I am
waiting till CCE 3.0 comes out. Since this is a personal project I am
working on in only a proof of concept phase. I cannot see paying extra
for tools if I don't intend to completely pursue this to a final
product. If it ends up getting passed a proto/Proof of concept phase I
will gladly Pay for any tools. But for now I am trying to get a working
proto with as little cost as possible.

I like your idea of having the final program reconfigure itself based on
whether the table is in flash or not, I am going to work on that for now
thanks for your tips

Tim

Ps. Your last name wouldn't happen to be Borland would it? Since I am
Tim Taylor... you could say "I don't think so Tim"

________________________________

From: m... [mailto:m...] On Behalf
Of Onestone
Sent: Wednesday, April 09, 2008 11:33 AM
To: m...
Subject: Re: [msp430] Reserving space for a large table

Based on your original post you are trying to get around the IAR 4k
limit. Obviously IAR in their tools are doing everything they can to
prevent this. Justifiably they want to be paid for the time and effort
taken to develop the tools, exactly like you will expect to be paid for
your labours. So they aren't exactly going to allow any simple bypasses
like this to get around their limits. Obviously the only free solutions
are:-

1. Use assembler, all becomes so free, simple and unlimited then.
2. Buy a compiler, any compiler, and the limits are all gone.
3. Use CCE, it sounds like a pain, but it has higher limits.
4. Use MSPGCC. It sounds an even bigger pain, but is unlimited and is
free.
5. If your final program has any com ability built in, or has space
left, then download the data and have it written to flash by the final
application. A bit harder than the other options but a simple downloader

doesn't take much space, and can be disabled once done the first time.
Simply check the start of the data segment, if -1 then go to data grab
mode, else run as normal.

Don't forget that you can use the "erase main memory" only option to
leave some code in the INFO segments (such as a simple data downloader)
and it won't count to the 4k limit next time around. Since you can also
execute code from here as if it were ordinary code memory you could
place a simple "do I have my tables yet? " in the main code and branch
here if not. That won't add more than a few words to your program.

that's me out of ideas

Al

t...@l-3com.com wrote:

>I am trying to reserve space in one project to allow for a large table
>to be programmed in another to remain in the Flash.
>
>I have successfully put the table where I need it to be using segments
>and the Linker Script. But I have not been able to make the primary
>project not overwrite the space. Below are the relevant areas of the
>linker script. I also have told the debugger to "Retain Unchanged
>Memory". I know my code is not going up into this space but it still
>seems to be filled with FF's.
>
>Thanks for your help
>
>Tim
>
>// ---------------------
>
>// Constant data
>
>// ---------------------
>
>-Z(CONST)DATA16_C,DATA16_ID,DIFUNCT00-EFFF
>
>// ---------------------
>
>// Code
>
>// ---------------------
>
>-Z(CODE)CSTART,ISR_CODE00-EFFF
>
>-P(CODE)CODE00-EFFF
>
>//-Z(CODE)OLED_FONT0-FFDD // this line is used for
>building the table in the table project
>
>
>
You're welcome.

Al
t...@l-3com.com wrote:

>Yes I am trying to get around the 4k limit and I would prefer to use CCE
>but since the SimpliciTI Network Stack doesn't work with CCE 2.0. I am
>waiting till CCE 3.0 comes out. Since this is a personal project I am
>working on in only a proof of concept phase. I cannot see paying extra
>for tools if I don't intend to completely pursue this to a final
>product. If it ends up getting passed a proto/Proof of concept phase I
>will gladly Pay for any tools. But for now I am trying to get a working
>proto with as little cost as possible.
>
>I like your idea of having the final program reconfigure itself based on
>whether the table is in flash or not, I am going to work on that for now
>thanks for your tips
>
>Tim
>
>Ps. Your last name wouldn't happen to be Borland would it? Since I am
>Tim Taylor... you could say "I don't think so Tim"
>
>________________________________
>
>From: m... [mailto:m...] On Behalf
>Of Onestone
>Sent: Wednesday, April 09, 2008 11:33 AM
>To: m...
>Subject: Re: [msp430] Reserving space for a large table
>
>Based on your original post you are trying to get around the IAR 4k
>limit. Obviously IAR in their tools are doing everything they can to
>prevent this. Justifiably they want to be paid for the time and effort
>taken to develop the tools, exactly like you will expect to be paid for
>your labours. So they aren't exactly going to allow any simple bypasses
>like this to get around their limits. Obviously the only free solutions
>are:-
>
>1. Use assembler, all becomes so free, simple and unlimited then.
>2. Buy a compiler, any compiler, and the limits are all gone.
>3. Use CCE, it sounds like a pain, but it has higher limits.
>4. Use MSPGCC. It sounds an even bigger pain, but is unlimited and is
>free.
>5. If your final program has any com ability built in, or has space
>left, then download the data and have it written to flash by the final
>application. A bit harder than the other options but a simple downloader
>
>doesn't take much space, and can be disabled once done the first time.
>Simply check the start of the data segment, if -1 then go to data grab
>mode, else run as normal.
>
>Don't forget that you can use the "erase main memory" only option to
>leave some code in the INFO segments (such as a simple data downloader)
>and it won't count to the 4k limit next time around. Since you can also
>execute code from here as if it were ordinary code memory you could
>place a simple "do I have my tables yet? " in the main code and branch
>here if not. That won't add more than a few words to your program.
>
>that's me out of ideas
>
>Al
>
>t...@l-3com.com wrote:
>
>
>
>>I am trying to reserve space in one project to allow for a large table
>>to be programmed in another to remain in the Flash.
>>
>>I have successfully put the table where I need it to be using segments
>>and the Linker Script. But I have not been able to make the primary
>>project not overwrite the space. Below are the relevant areas of the
>>linker script. I also have told the debugger to "Retain Unchanged
>>Memory". I know my code is not going up into this space but it still
>>seems to be filled with FF's.
>>
>>Thanks for your help
>>
>>Tim
>>
>>// ---------------------
>>
>>// Constant data
>>
>>// ---------------------
>>
>>-Z(CONST)DATA16_C,DATA16_ID,DIFUNCT00-EFFF
>>
>>// ---------------------
>>
>>// Code
>>
>>// ---------------------
>>
>>-Z(CODE)CSTART,ISR_CODE00-EFFF
>>
>>-P(CODE)CODE00-EFFF
>>
>>//-Z(CODE)OLED_FONT0-FFDD // this line is used for
>>building the table in the table project
>>
>>
>>
>>
>>
>
>
>
>>
You got the right idea but somewhere during the execution it was
messed up. Which version of the KickStart are you using?

(1) You said you successfully put the table where you need it to be.
At that point in time, can you use [debug] to examine the contents of
Flash?

(2) After that, you set up your primary project. Please try the
following: (a) click [project]=>[Options..]=>[FET Debugger] select the
[Download] tab, (b) check the [Suppress download] check-box, (c) click
OK to return to accept the options, and (d) use [debug] to examine the
contents of Flash. Is the table at where you need it to be?

(3) After that, (while still in your primary project), do the
following: (a)click [project]=>[Options..]=>[FET Debugger] select the
[Download] tab again, (b) un-check the [Suppress download] check-box
and select, (c) select the [Retain unchanged memory] radio-button,(d)
click OK to return to accept the options, and (e) use [debug] to
examine the contents of Flash. Is the table still at where you need it
to be?

I tried the above, and both the primary project and the table are at
where they should.

--- In m..., tim.taylor@... wrote:
>
> I am trying to reserve space in one project to allow for a large table
> to be programmed in another to remain in the Flash.
>
>
>
> I have successfully put the table where I need it to be using segments
> and the Linker Script. But I have not been able to make the primary
> project not overwrite the space. Below are the relevant areas of the
> linker script. I also have told the debugger to "Retain Unchanged
> Memory". I know my code is not going up into this space but it still
> seems to be filled with FF's.
>
>
>
> Thanks for your help
>
> Tim
>
>
>
> // ---------------------
>
> // Constant data
>
> // ---------------------
>
>
>
> -Z(CONST)DATA16_C,DATA16_ID,DIFUNCT00-EFFF
>
>
>
>
>
> // ---------------------
>
> // Code
>
> // ---------------------
>
>
>
> -Z(CODE)CSTART,ISR_CODE00-EFFF
>
> -P(CODE)CODE00-EFFF
>
> //-Z(CODE)OLED_FONT0-FFDD // this line is used for
> building the table in the table project
>
>
>
>
>

You got the right idea but somewhere during the execution it was
messed up. Which version of the KickStart are you using?

**** V4.10E

(1) You said you successfully put the table where you need it to be.
At that point in time, can you use [debug] to examine the contents of
Flash?

**** Yes

(2) After that, you set up your primary project. Please try the
following: (a) click [project]=>[Options..]=>[FET Debugger] select the
[Download] tab, (b) check the [Suppress download] check-box, (c) click
OK to return to accept the options, and (d) use [debug] to examine the
contents of Flash. Is the table at where you need it to be?

**** Yes... now I do, I realized at this point my table loading project
was set to simulator and not emulator, so even though I saw the table in
the right place it never actually was downloaded.

(3) After that, (while still in your primary project), do the
following: (a)click [project]=>[Options..]=>[FET Debugger] select the
[Download] tab again, (b) un-check the [Suppress download] check-box
and select, (c) select the [Retain unchanged memory] radio-button,(d)
click OK to return to accept the options, and (e) use [debug] to
examine the contents of Flash. Is the table still at where you need it
to be?

**** Yes its still there thanks this helped figure out a stupid mistake.

I tried the above, and both the primary project and the table are at
where they should.

--- In m... ,
tim.taylor@... wrote:
>
> I am trying to reserve space in one project to allow for a large table
> to be programmed in another to remain in the Flash.
>
> I have successfully put the table where I need it to be using segments
> and the Linker Script. But I have not been able to make the primary
> project not overwrite the space. Below are the relevant areas of the
> linker script. I also have told the debugger to "Retain Unchanged
> Memory". I know my code is not going up into this space but it still
> seems to be filled with FF's.
>
> Thanks for your help
>
> Tim
>
> // ---------------------
>
> // Constant data
>
> // ---------------------
>
> -Z(CONST)DATA16_C,DATA16_ID,DIFUNCT00-EFFF
>
> // ---------------------
>
> // Code
>
> // ---------------------
>
> -Z(CODE)CSTART,ISR_CODE00-EFFF
>
> -P(CODE)CODE00-EFFF
>
> //-Z(CODE)OLED_FONT0-FFDD // this line is used for
> building the table in the table project
>
>
>