Keil Logo Arm Logo

Technical Support

On-Line Manuals

Linker User Guide

Conventions and feedback Overview of the linker Linking models supported by armlink Image structure and generation Using linker optimizations Getting information about images Accessing and managing symbols with armlink Using scatter files About scatter-loading When to use scatter-loading Scatter-loading command-line option Images with a simple memory map Images with a complex memory map Linker-defined symbols that are not defined when s Specifying stack and heap using the scatter file What is a root region? Creating root execution regions Using the FIXED attribute to create root regions Placing functions and data at specific addresses Placing a named section explicitly using scatter-l Placing unassigned sections with the .ANY module s Examples of using placement algorithms for .ANY se Example of next_fit algorithm showing behavior of Examples of using sorting algorithms for .ANY sect Selecting veneer input sections in scatter-loading Using __attribute__((section("name"))) t Using __at sections to place sections at a specifi Restrictions on placing __at sections Automatic placement of __at sections Manual placement of __at sections Placing a key in flash memory using __at Placing a structure over a peripheral register usi Placement of sections with overlays About placing ARM C and C++ library code Example of placing code in a root region Example of placing ARM C library code Example of placing ARM C++ library code Example of placing ARM library helper functions Reserving an empty region About creating regions on page boundaries Overalignment of execution regions and input secti Using preprocessing commands in a scatter file Expression evaluation in scatter files Using expression evaluation in a scatter file to a Equivalent scatter-loading descriptions for simple Type 1 image, one load region and contiguous execu Type 2 image, one load region and non-contiguous e Type 3 image, two load regions and non-contiguous Scatter file to ELF mapping

Linker User Guide

When to use scatter-loading

When to use scatter-loading

The command-line options to the linker give some control over the placement of data and code, but complete control of placement requires more detailed instructions than can be entered on the command line.

Situations where scatter-loading is either required or very useful:

Complex memory maps

Code and data that must be placed into many distinct areas of memory require detailed instructions on where to place the sections in the memory space.

Different types of memory

Many systems contain a variety of physical memory devices such as flash, ROM, SDRAM, and fast SRAM. A scatter-loading description can match the code and data with the most appropriate type of memory. For example, interrupt code might be placed into fast SRAM to improve interrupt response time but infrequently-used configuration information might be placed into slower flash memory.

Memory-mapped peripherals

The scatter-loading description can place a data section at a precise address in the memory map so that memory mapped peripherals can be accessed.

Functions at a constant location

A function can be placed at the same location in memory even though the surrounding application has been modified and recompiled. This is useful for jump table implementation.

Using symbols to identify the heap and stack

Symbols can be defined for the heap and stack location when the application is linked.

Scatter-loading is usually required for implementing embedded systems because these use ROM, RAM, and memory-mapped peripherals.

Show/hideSee also

Copyright © 2007-2008, 2011-2012 ARM. All rights reserved.ARM DUI 0377D
Non-ConfidentialID062912

arm-logo-small

Keil logo
Important information

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies.