Atmel CAVR-4 Manual De Usuario
![Atmel](https://files.manualsbrain.com/attachments/0369829915bda09f9c2e00fb805a7753579683b5/common/fit/150/50/8d2bf08978ec3e5bc63f4343ac5e91ce8d0e40045619fa520d910d64af8f/brand_logo.png)
CAVR-4
Part 1. Using the compiler
The DLIB runtime environment
81
Implementation of system startup code
This section presents some general techniques used in the system startup code, including
background information that might be useful if you need to modify it.
background information that might be useful if you need to modify it.
Note: Do not modify the file
cstartup.s90
unless required by your application. Your
first option should be to use a customized version of
_ _low_level_init
for
initialization code.
The source files are well commented and are not described in detail in this guide.
For information about assembler source files, see the AVR® IAR Assembler Reference
Guide.
Guide.
MODULES AND SEGMENT PARTS
To understand how the startup code is designed, you must have a clear understanding of
modules and segment parts, and how the IAR XLINK Linker treats them.
modules and segment parts, and how the IAR XLINK Linker treats them.
An assembler module starts with a
MODULE
directive and ends with an
ENDMOD
directive.
Each module is logically divided into segment parts, which are the smallest linkable
units. There will be segment parts for constants, code bytes, and for reserved space for
data. Each segment part begins with an
units. There will be segment parts for constants, code bytes, and for reserved space for
data. Each segment part begins with an
RSEG
directive.
When XLINK builds an application, it starts with a small number of modules that have
either been declared using the
either been declared using the
_ _root
keyword or have the program entry label
_ _program_start
. The linker then continues to include all modules that are referred
from the already included modules. XLINK then discards unused segment parts.
Segment parts, REQUIRE, and the falling-through trick
The system startup code has been designed to use segment parts so that as little as
possible of unused code will be included in the linked application.
possible of unused code will be included in the linked application.
A piece of code or data is not included if it is not used or referred to. To make the linker
always include a piece of code or data, the assembler directive
always include a piece of code or data, the assembler directive
REQUIRE
can be used.
The segment parts defined in the system startup code are guaranteed to be placed
immediately after each other. There are two reasons for this. First, the alignment
requirement of the segment parts is every two bytes. Because the size of all assembler
instructions are multiples of two, this does not allow pad bytes to be placed between
code sections. Second, XLINK will not change the order of the segment parts or
modules, because the segments holding the system startup code are placed using the
immediately after each other. There are two reasons for this. First, the alignment
requirement of the segment parts is every two bytes. Because the size of all assembler
instructions are multiples of two, this does not allow pad bytes to be placed between
code sections. Second, XLINK will not change the order of the segment parts or
modules, because the segments holding the system startup code are placed using the
-Z
option.