Forums

IAR Linker Problem

Started by Oliver January 7, 2004
Hi!



I'm using an IAR Compiler for Hitachi H8-3687. This Controller has to RAM
areas (0xE800-0xEFFF(2kByte) and 0xFB80-0xFF7F(1kByte). My segment UDATA1
has more than 2kByte an is not linkable. How can I split the segment in two
parts to locate it in both RAM areas?

Oliver




On Wed, 7 Jan 2004 16:00:53 +0100, "Oliver" <ohager@gmx.at> wrote:

>Hi! > > > >I'm using an IAR Compiler for Hitachi H8-3687. This Controller has to RAM >areas (0xE800-0xEFFF(2kByte) and 0xFB80-0xFF7F(1kByte). My segment UDATA1 >has more than 2kByte an is not linkable. How can I split the segment in two >parts to locate it in both RAM areas?
I've not used that compiler, but a couple of general principles: 1) Initialized and Uninitialized data usually go into two separate segments. A first guess would be IDATA1. Try initializing some data to see if it moves. Tell your linker script to put IDATA1 in one RAM area and UDATA1 in the other. 2) The compiler usually decides where to put data. There may be an option or a pragma you can use when compiling to direct some modules to place data in one or another segment of your own choosing. Maybe UDATA2? Look for something like that. HTH, -=Dave -- Change is inevitable, progress is not.
On Wed, 7 Jan 2004 16:00:53 +0100, "Oliver" <ohager@gmx.at> wrote:

>Hi! > > > >I'm using an IAR Compiler for Hitachi H8-3687. This Controller has to RAM >areas (0xE800-0xEFFF(2kByte) and 0xFB80-0xFF7F(1kByte). My segment UDATA1 >has more than 2kByte an is not linkable. How can I split the segment in two >parts to locate it in both RAM areas? > >Oliver
I have not used the H8-3 IAR compiler, but on the IAR compilers I have used theres is a compiler flag that keeps text/string data in the ROM areas. Make sure this is enabled otherwise all text/string data is copied to RAM. For locating some variables in other data areas you need to use something like the following: #pragma memory=dataseg(anothersection) int var_in_anothersection; #pragma memory=default You can specify in the linker file where "anothersection" should be located. Regards Anton Erasmus
"Oliver" <ohager@gmx.at> wrote in message news:<3ffc1fc7$0$27220$91cee783@newsreader01.highway.telekom.at>...
> Hi! > > > > I'm using an IAR Compiler for Hitachi H8-3687. This Controller has to RAM > areas (0xE800-0xEFFF(2kByte) and 0xFB80-0xFF7F(1kByte). My segment UDATA1 > has more than 2kByte an is not linkable. How can I split the segment in two > parts to locate it in both RAM areas? > > Oliver
Hi! If none of your projects translation units e.g. .c files consists more than 2 kBytes uninitialized data, then the linker should be able to place uninitialilzed data to those two RAM areas automatically. But if one of these translation units have more than 2 kBytes uninitialized data then you better do what Dave said in his post.
Hi!

Thanks, it's working now!!!!!!

Oliver


"Anton Erasmus" <junk@junk.net> schrieb im Newsbeitrag
news:v2sovvopk2bgg75k2t38dfpb00ab5kou6c@4ax.com...
> On Wed, 7 Jan 2004 16:00:53 +0100, "Oliver" <ohager@gmx.at> wrote: > > >Hi! > > > > > > > >I'm using an IAR Compiler for Hitachi H8-3687. This Controller has to RAM > >areas (0xE800-0xEFFF(2kByte) and 0xFB80-0xFF7F(1kByte). My segment UDATA1 > >has more than 2kByte an is not linkable. How can I split the segment in
two
> >parts to locate it in both RAM areas? > > > >Oliver > > I have not used the H8-3 IAR compiler, but on the IAR compilers I have > used theres is a compiler flag that keeps text/string data in the ROM > areas. Make sure this is enabled otherwise all text/string data is > copied to RAM. > For locating some variables in other data areas you need to use > something like the following: > #pragma memory=dataseg(anothersection) > int var_in_anothersection; > #pragma memory=default > You can specify in the linker file where "anothersection" should be > located. > > Regards > Anton Erasmus > >