Re: Allocating code to separate sections

Alistair Gadd <[email protected]>
Newsgroups gmane.comp.hardware.avr.gcc
Message-ID <[email protected]>
On 2014/10/09 08:29 AM, Senthil Kumar Selvaraj wrote:
> On Thu, Oct 09, 2014 at 07:32:51AM +0200, Alistair Gadd wrote:
>> Hi Everybody,
>>
>> I'm hoping this is an easy one for someone out there.
>>
>> I'm putting together a bootloader for an ATmega328P using Atmel Studio 6.2
>> and I would just like to ask if there is an easy way configure the IDE so
>> that I can have separate sections that I can allocate code to. I have been
>> using "-Ttext 0x7000" as a linker flag in "Configuration
>> Manager->Toolchain->AVR/GNU Linker->Miscellaneous", which places all the
>> code starting with reset vector at 0x3800 onwards, but I would like to have
>> another section in the application section where I can place an SD card
>> library that will be accessible by the bootloader and by future
>> applications.
>>
>> I have defined another "FLASH segment" - ".sdlib=0x2000" in "Configuration
>> Manager->Toolchain->AVR/GNU Linker->Memory Settings, but I don't know how to
>> configure .c source files and assembler .s files so that their code is
>> allocated to this segment.
>>
>> Can anybody give me some ideas on how I could achieve this?
> There are a couple of ways.
>
> 1. Create a linker script that groups code from specific object
> files into custom output sections. Something like
>
> .sdlib :
> {
>      foo.o(*.text)
> }
>
> where foo.o is the object file containing the code to go into the
> section.
>
> 2. Use attributes in C code and .section directives in assembler code to
> specify the section.
>
> void __attribute__((section(".sdlib"))) my_function() {}
> int main() { return 0; }
>
> This makes the place the my_function's code in a .sdlib section. main's
> code still goes into .text.
>
> Hope this helps.
>
> Regards
> Senthil
Thanks very much Senthil,

I have tried the __attribute__((section(".sdlib"))) directive which 
works but I'm having problems trying to define variables in flash by using:

const unsigned char __attribute__((section(".sdlib"))) array[5] PROGMEM  
= {1,2,3,4,5};
or:
const unsigned char array[5] __attribute__((section(".sdlib"))) PROGMEM  
= {1,2,3,4,5};

I think I prefer your first option though because it would put 
everything in that module into the .sdlib section, but my problem is I 
don't know how to create and use the linker script. Can you maybe point 
me to some documentation that would show me how it is used.

Best regards,
Alistair.



--

_______________________________________________
AVR-GCC-list mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/avr-gcc-list
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.