Commit ac92074c authored by Petter Breedveld's avatar Petter Breedveld
Browse files

Session 1 done

parents
/*
* Task1-LF.c
*
* Created: 29.01.2017 23:43:39
* Author : Petter
*/
/**
* F_CPU tells the timer what the CPU's clock frequency is, such that the timer will count correctly.
* Note that this DOES NOT set the clock speed, it just informs the timer.
* If this is set wrong, the chip will work as normal, but software delays will be too long (if set too low) or too short (if set too high).
* Example: set F_CPU to 2 MHz => "#define F_CPU 2000000UL". UL = unsigned long
* F_CPU must be defined before including headers.
*/
#define F_CPU 3333333UL //The ATtiny817 operates at 20MHz with a scaling factor of 6: 20/6 = 3.333333MHz
/**
* System headers bellow
*/
#include <avr/io.h>
#include <util/delay.h>
/**
* Define helpers for pin bit positions.
* The LED0 on the ATmega324PB main board is connected to pin 7 on port C (PINC7).
* Check the datasheet to find out which pins on which ports (PINxn) the different LEDs and buttons are connected to.
*/
#define LED0 4 // LED0 is connected to pin 4 on port B
int main(void){
/**
* We want to send signals to the LEDs, in order to turn the off and on.
* In the AVR world we have the following:
* PORTx_DIR: 1 is output, 0 is input
* LED: 1 LED is off, 0 LED is on, this is called active-low
* Button: 1 button is open, 0 button is pressed, this is called active-low
*
* Remember bit set logic:
* Set to 1: FLAG |= ( 1 << BIT_POS ) - using 'or' so we only change the one we want and leave the others untouched
* Set to 0: FLAG &= ~( 1 << BIT_POS ) - same thing here but using 'and', find paper and a logic-table, and try it out if you want to know how it works
*/
PORTB_DIR |= (1 << LED0); // Set LED0 as output - Using "B" in PORTx_DIR since the LED is connected to port B on the microcontroller
/*
* The usual way to run microcontrollers is using a simple infinite loop
*/
while (1)
{
PORTB_OUT ^= (1 << LED0); // Changes the state of LED0 by XOR-ing the last state. Check the XOR-table to find out how this works.
// Non-compressed: PORTB_OUT = PORTB_OUT ^ (1 << LED0);
_delay_ms(500);
}
}
/*
* Task2-LF.c
*
* Created: 29.01.2017 23:43:39
* Author : Petter
*/
#define F_CPU 3333333UL //3.33... MHz
/*
* System headers bellow
*/
#include <avr/io.h>
#include <util/delay.h>
/*
* Checkout the ATtiny817 datasheet to find the correct ports and pins
*/
// LED
#define LED0 4 //On port B
// Button
#define SW0 5 //On port B
int main(void)
{
/*
* We want to send signals to the LEDs, in order to turn it off and on.
* We also want to be able to read the switches.
* This is done by setting bits in the PORTx_DIR register (in this case PORTB_DIR)
* PORTx_DIR: 1 is output, 0 is input
* LED: 1 LED is off, 0 LED is on
* Button: 1 Button is open, 0 button is pressed
* Bit set logic:
* Set to 1: FLAG |= ( 1 << BIT_POS )
* Set to 0: FLAG &= ~( 1 << BIT_POS )
*/
/**
* In order to read from the switches, we need to give it a ground reference, via a pull-up resistor.
* If we don't, the switch will have a floating ground, and hence its value will be undefined.
* On the ATtiny817, we enable pull-up by setting the "PORT_PULLUPEN_bp" flag in "PORTx_PINnCTRL" high.
* See datasheet section 16 (I/O-ports) and user guide section 4 (Hardware User Guide).
*/
PORTB_DIR |= (1 << LED0); // Set LED0 as output
PORTB_DIR &= ~(1 << SW0); //Set SW0 as input
PORTB_PIN5CTRL |= (1 << PORT_PULLUPEN_bp); //Enable pull-up on button SW0 (pin5)
while (1)
{
/*
* Here, you want to check if a button is depressed, and if yes, turn on the corresponding LED.
* If no, then do the opposite.
* Similar to setting pins with PORTx_OUT, we can read pins with PORTx_IN
* In order to check a pin value, mask out that particular bit. (use bitwise AND)
* Bit masking is done like this:
* (REGISTER & (1 << BIT_POS)), which selects bit BIT_POS from register.
* If that bit is 0, the result will be 0. If it is 1, the result will be other than 0 (depending on bit pos).
*/
if(!(PORTB_IN & (1 << SW0))){ // If button is pressed (0 - LOW
PORTB_OUT &= ~(1 << LED0); // Sets output to 0, turns LED0 on
}
else{
PORTB_OUT |= (1 << LED0); // Sets output to 1, turns LED off
}
}
}
/*
* Task3-LF.c
*
* Created: 29.01.2017 23:43:39
* Author : Petter
*/
#define F_CPU 3333333UL //3.33... MHz
#include <avr/io.h>
#include <util/delay.h>
#include <stdbool.h>
//LED
#define LED0 4 //on port B
//Button
#define SW0 5 //on port B
int main(void)
{
/*
* PORTx_DIR: set direction - 1 is output, 0 is input
* PORTx_OUT: set value of pins
* PORTx_IN: read value of pins
* LED: 1 LED is off, 0 LED is on
* SW: 1 Button is open, 0 button is pressed
* Set to 1: FLAG |= ( 1 << BIT_POS )
* Set to 0: FLAG &= ~( 1 << BIT_POS )
*/
PORTB_DIR |= (1 << LED0); // Set LED0 as output
PORTB_DIR &= ~(1 << SW0); // Set SW0 as input
PORTB_PIN5CTRL |= (1 << PORT_PULLUPEN_bp); // Enable pull-up on button SW
int buttonState = 0; // To hold the button pressed state
while (1)
{
if(!(PORTB_IN & (1 << SW0))){
if(buttonState == 0){
PORTB_OUT ^= (1 << LED0);
buttonState = 1;
}
}
else{
buttonState = 0;
}
_delay_ms(1); // For deboucing
}
}
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
SHELL := cmd.exe
RM := rm -rf
USER_OBJS :=
LIBS :=
PROJ :=
O_SRCS :=
C_SRCS :=
S_SRCS :=
S_UPPER_SRCS :=
OBJ_SRCS :=
ASM_SRCS :=
PREPROCESSING_SRCS :=
OBJS :=
OBJS_AS_ARGS :=
C_DEPS :=
C_DEPS_AS_ARGS :=
EXECUTABLES :=
OUTPUT_FILE_PATH :=
OUTPUT_FILE_PATH_AS_ARGS :=
AVR_APP_PATH :=$$$AVR_APP_PATH$$$
QUOTE := "
ADDITIONAL_DEPENDENCIES:=
OUTPUT_FILE_DEP:=
LIB_DEP:=
LINKER_SCRIPT_DEP:=
# Every subdirectory with source files must be described here
SUBDIRS :=
# Add inputs and outputs from these tool invocations to the build variables
C_SRCS += \
../main.c
PREPROCESSING_SRCS +=
ASM_SRCS +=
OBJS += \
main.o
OBJS_AS_ARGS += \
main.o
C_DEPS += \
main.d
C_DEPS_AS_ARGS += \
main.d
OUTPUT_FILE_PATH +=Task1.elf
OUTPUT_FILE_PATH_AS_ARGS +=Task1.elf
ADDITIONAL_DEPENDENCIES:=
OUTPUT_FILE_DEP:= ./makedep.mk
LIB_DEP+=
LINKER_SCRIPT_DEP+=
# AVR32/GNU C Compiler
./%.o: .././%.c
@echo Building file: $<
@echo Invoking: AVR/GNU C Compiler : 4.9.2
$(QUOTE)D:\Atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"D:\Atmel\7.0\Packs\atmel\ATtiny_DFP\1.1.102\include" -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=attiny817 -B "D:\Atmel\7.0\Packs\atmel\ATtiny_DFP\1.1.102\gcc\dev\attiny817" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<"
@echo Finished building: $<
# AVR32/GNU Preprocessing Assembler
# AVR32/GNU Assembler
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
endif
# Add inputs and outputs from these tool invocations to the build variables
# All Target
all: $(OUTPUT_FILE_PATH) $(ADDITIONAL_DEPENDENCIES)
$(OUTPUT_FILE_PATH): $(OBJS) $(USER_OBJS) $(OUTPUT_FILE_DEP) $(LIB_DEP) $(LINKER_SCRIPT_DEP)
@echo Building target: $@
@echo Invoking: AVR/GNU Linker : 4.9.2
$(QUOTE)D:\Atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS) -Wl,-Map="Task1.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=attiny817 -B "D:\Atmel\7.0\Packs\atmel\ATtiny_DFP\1.1.102\gcc\dev\attiny817"
@echo Finished building target: $@
"D:\Atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "Task1.elf" "Task1.hex"
"D:\Atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "Task1.elf" "Task1.eep" || exit 0
"D:\Atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objdump.exe" -h -S "Task1.elf" > "Task1.lss"
"D:\Atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O srec -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "Task1.elf" "Task1.srec"
"D:\Atmel\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-size.exe" "Task1.elf"
# Other Targets
clean:
-$(RM) $(OBJS_AS_ARGS) $(EXECUTABLES)
-$(RM) $(C_DEPS_AS_ARGS)
rm -rf "Task1.elf" "Task1.a" "Task1.hex" "Task1.lss" "Task1.eep" "Task1.map" "Task1.srec" "Task1.usersignatures"
\ No newline at end of file
:1000000019C022C021C020C01FC01EC01DC01CC0FE
:100010001BC01AC019C018C017C016C015C014C024
:1000200013C012C011C010C00FC00EC00DC00CC054
:100030000BC00AC011241FBECFEFCDBFDFE3DEBF70
:100040000E9426000C9439000C940000E0E2F4E0D9
:10005000808180618083E4E2F4E090E180818927FF
:10006000808325E136E185E0215030408040E1F792
:06007000F5CFF894FFCF6C
:00000001FF
Task1.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .data 00000000 00803e00 00803e00 000000ca 2**0
CONTENTS, ALLOC, LOAD, DATA
1 .text 00000076 00000000 00000000 00000054 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .comment 00000030 00000000 00000000 000000ca 2**0
CONTENTS, READONLY
3 .note.gnu.avr.deviceinfo 0000003c 00000000 00000000 000000fc 2**2
CONTENTS, READONLY
4 .debug_aranges 00000020 00000000 00000000 00000138 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_info 00001781 00000000 00000000 00000158 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_abbrev 000015fc 00000000 00000000 000018d9 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_line 00000223 00000000 00000000 00002ed5 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_frame 00000024 00000000 00000000 000030f8 2**2
CONTENTS, READONLY, DEBUGGING
9 .debug_str 00000af8 00000000 00000000 0000311c 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_ranges 00000010 00000000 00000000 00003c14 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 19 c0 rjmp .+50 ; 0x34 <__ctors_end>
2: 22 c0 rjmp .+68 ; 0x48 <__bad_interrupt>
4: 21 c0 rjmp .+66 ; 0x48 <__bad_interrupt>
6: 20 c0 rjmp .+64 ; 0x48 <__bad_interrupt>
8: 1f c0 rjmp .+62 ; 0x48 <__bad_interrupt>
a: 1e c0 rjmp .+60 ; 0x48 <__bad_interrupt>
c: 1d c0 rjmp .+58 ; 0x48 <__bad_interrupt>
e: 1c c0 rjmp .+56 ; 0x48 <__bad_interrupt>
10: 1b c0 rjmp .+54 ; 0x48 <__bad_interrupt>
12: 1a c0 rjmp .+52 ; 0x48 <__bad_interrupt>
14: 19 c0 rjmp .+50 ; 0x48 <__bad_interrupt>
16: 18 c0 rjmp .+48 ; 0x48 <__bad_interrupt>
18: 17 c0 rjmp .+46 ; 0x48 <__bad_interrupt>
1a: 16 c0 rjmp .+44 ; 0x48 <__bad_interrupt>
1c: 15 c0 rjmp .+42 ; 0x48 <__bad_interrupt>
1e: 14 c0 rjmp .+40 ; 0x48 <__bad_interrupt>
20: 13 c0 rjmp .+38 ; 0x48 <__bad_interrupt>
22: 12 c0 rjmp .+36 ; 0x48 <__bad_interrupt>
24: 11 c0 rjmp .+34 ; 0x48 <__bad_interrupt>
26: 10 c0 rjmp .+32 ; 0x48 <__bad_interrupt>
28: 0f c0 rjmp .+30 ; 0x48 <__bad_interrupt>
2a: 0e c0 rjmp .+28 ; 0x48 <__bad_interrupt>
2c: 0d c0 rjmp .+26 ; 0x48 <__bad_interrupt>
2e: 0c c0 rjmp .+24 ; 0x48 <__bad_interrupt>
30: 0b c0 rjmp .+22 ; 0x48 <__bad_interrupt>
32: 0a c0 rjmp .+20 ; 0x48 <__bad_interrupt>
00000034 <__ctors_end>:
34: 11 24 eor r1, r1
36: 1f be out 0x3f, r1 ; 63
38: cf ef ldi r28, 0xFF ; 255
3a: cd bf out 0x3d, r28 ; 61
3c: df e3 ldi r29, 0x3F ; 63
3e: de bf out 0x3e, r29 ; 62
40: 0e 94 26 00 call 0x4c ; 0x4c <main>
44: 0c 94 39 00 jmp 0x72 ; 0x72 <_exit>
00000048 <__bad_interrupt>:
48: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
0000004c <main>:
* Remember bit set logic:
* Set to 1: FLAG |= ( 1 << BIT_POS ) - using 'or' so we only change the one we want and leave the others untouched
* Set to 0: FLAG &= ~( 1 << BIT_POS ) - same thing here but using 'and', find paper and a logic-table, and try it out if you want to know how it works
*/
PORTB_DIR |= (1 << LED0); // Set LED0 as output - Using "B" in PORTx_DIR since the LED is connected to port B on the microcontroller
4c: e0 e2 ldi r30, 0x20 ; 32
4e: f4 e0 ldi r31, 0x04 ; 4
50: 80 81 ld r24, Z
52: 80 61 ori r24, 0x10 ; 16
54: 80 83 st Z, r24
* The usual way to run microcontrollers is using a simple infinite loop
*/
while (1)
{
PORTB_OUT ^= (1 << LED0); // Changes the state of LED0 by XOR-ing the last state. Check the XOR-table to find out how this works.
56: e4 e2 ldi r30, 0x24 ; 36
58: f4 e0 ldi r31, 0x04 ; 4
5a: 90 e1 ldi r25, 0x10 ; 16
5c: 80 81 ld r24, Z
5e: 89 27 eor r24, r25
60: 80 83 st Z, r24
#else
//round up by default
__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
#endif
__builtin_avr_delay_cycles(__ticks_dc);
62: 25 e1 ldi r18, 0x15 ; 21
64: 36 e1 ldi r19, 0x16 ; 22
66: 85 e0 ldi r24, 0x05 ; 5
68: 21 50 subi r18, 0x01 ; 1
6a: 30 40 sbci r19, 0x00 ; 0
6c: 80 40 sbci r24, 0x00 ; 0
6e: e1 f7 brne .-8 ; 0x68 <main+0x1c>
70: f5 cf rjmp .-22 ; 0x5c <main+0x10>
00000072 <_exit>:
72: f8 94 cli
00000074 <__stop_program>:
74: ff cf rjmp .-2 ; 0x74 <__stop_program>
Archive member included to satisfy reference by file (symbol)
d:/atmel/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a(_exit.o)
D:/Atmel/7.0/Packs/atmel/ATtiny_DFP/1.1.102/gcc/dev/attiny817/avrxmega2/crtattiny817.o (exit)
Discarded input sections
.data 0x00000000 0x0 D:/Atmel/7.0/Packs/atmel/ATtiny_DFP/1.1.102/gcc/dev/attiny817/avrxmega2/crtattiny817.o
.bss 0x00000000 0x0 D:/Atmel/7.0/Packs/atmel/ATtiny_DFP/1.1.102/gcc/dev/attiny817/avrxmega2/crtattiny817.o
.text 0x00000000 0x0 main.o
.data 0x00000000 0x0 main.o
.bss 0x00000000 0x0 main.o
.text 0x00000000 0x0 d:/atmel/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a(_exit.o)
.data 0x00000000 0x0 d:/atmel/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a(_exit.o)
.bss 0x00000000 0x0 d:/atmel/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a(_exit.o)
.text.libgcc.mul
0x00000000 0x0 d:/atmel/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a(_exit.o)
.text.libgcc.div
0x00000000 0x0 d:/atmel/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a(_exit.o)
.text.libgcc 0x00000000 0x0 d:/atmel/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a(_exit.o)
.text.libgcc.prologue
0x00000000 0x0 d:/atmel/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a(_exit.o)
.text.libgcc.builtins
0x00000000 0x0 d:/atmel/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a(_exit.o)
.text.libgcc.fmul
0x00000000 0x0 d:/atmel/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a(_exit.o)
.text.libgcc.fixed
0x00000000 0x0 d:/atmel/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a(_exit.o)
Memory Configuration
Name Origin Length Attributes
text 0x00000000 0x00100000 xr
data 0x00802000 0x0000ffa0 rw !x
eeprom 0x00810000 0x00010000 rw !x
fuse 0x00820000 0x00000009 rw !x
lock 0x00830000 0x00000400 rw !x
signature 0x00840000 0x00000400 rw !x
user_signatures 0x00850000 0x00000400 rw !x
*default* 0x00000000 0xffffffff
Linker script and memory map
Address of section .data set to 0x803e00
LOAD D:/Atmel/7.0/Packs/atmel/ATtiny_DFP/1.1.102/gcc/dev/attiny817/avrxmega2/crtattiny817.o
LOAD main.o
START GROUP
LOAD d:/atmel/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/../../../../avr/lib/avrxmega2\libm.a
END GROUP
START GROUP
LOAD d:/atmel/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/avrxmega2\libgcc.a
LOAD d:/atmel/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/../../../../avr/lib/avrxmega2\libm.a
LOAD d:/atmel/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/../../../../avr/lib/avrxmega2\libc.a
LOAD D:/Atmel/7.0/Packs/atmel/ATtiny_DFP/1.1.102/gcc/dev/attiny817/avrxmega2\libattiny817.a
END GROUP
0x00100000 __TEXT_REGION_LENGTH__ = DEFINED (__TEXT_REGION_LENGTH__)?__TEXT_REGION_LENGTH__:0x100000
0x0000ffa0 __DATA_REGION_LENGTH__ = DEFINED (__DATA_REGION_LENGTH__)?__DATA_REGION_LENGTH__:0xffa0
0x00010000 __EEPROM_REGION_LENGTH__ = DEFINED (__EEPROM_REGION_LENGTH__)?__EEPROM_REGION_LENGTH__:0x10000
[0x00000009] __FUSE_REGION_LENGTH__ = DEFINED (__FUSE_REGION_LENGTH__)?__FUSE_REGION_LENGTH__:0x400
0x00000400 __LOCK_REGION_LENGTH__ = DEFINED (__LOCK_REGION_LENGTH__)?__LOCK_REGION_LENGTH__:0x400
0x00000400 __SIGNATURE_REGION_LENGTH__ = DEFINED (__SIGNATURE_REGION_LENGTH__)?__SIGNATURE_REGION_LENGTH__:0x400
0x00000400 __USER_SIGNATURE_REGION_LENGTH__ = DEFINED (__USER_SIGNATURE_REGION_LENGTH__)?__USER_SIGNATURE_REGION_LENGTH__:0x400
.hash
*(.hash)
.dynsym
*(.dynsym)
.dynstr
*(.dynstr)
.gnu.version
*(.gnu.version)
.gnu.version_d
*(.gnu.version_d)
.gnu.version_r
*(.gnu.version_r)
.rel.init
*(.rel.init)
.rela.init
*(.rela.init)
.rel.text
*(.rel.text)
*(.rel.text.*)
*(.rel.gnu.linkonce.t*)
.rela.text
*(.rela.text)
*(.rela.text.*)
*(.rela.gnu.linkonce.t*)
.rel.fini
*(.rel.fini)
.rela.fini
*(.rela.fini)
.rel.rodata
*(.rel.rodata)
*(.rel.rodata.*)
*(.rel.gnu.linkonce.r*)
.rela.rodata
*(.rela.rodata)
*(.rela.rodata.*)
*(.rela.gnu.linkonce.r*)
.rel.data
*(.rel.data)
*(.rel.data.*)
*(.rel.gnu.linkonce.d*)
.rela.data
*(.rela.data)
*(.rela.data.*)
*(.rela.gnu.linkonce.d*)
.rel.ctors
*(.rel.ctors)
.rela.ctors
*(.rela.ctors)
.rel.dtors
*(.rel.dtors)
.rela.dtors
*(.rela.dtors)
.rel.got
*(.rel.got)
.rela.got
*(.rela.got)
.rel.bss
*(.rel.bss)
.rela.bss
*(.rela.bss)
.rel.plt
*(.rel.plt)
.rela.plt
*(.rela.plt)
.text 0x00000000 0x76
*(.vectors)
.vectors 0x00000000 0x34 D:/Atmel/7.0/Packs/atmel/ATtiny_DFP/1.1.102/gcc/dev/attiny817/avrxmega2/crtattiny817.o
0x00000000 __vector_default
0x00000000 __vectors
*(.vectors)
*(.progmem.gcc*)
0x00000034 . = ALIGN (0x2)
0x00000034 __trampolines_start = .
*(.trampolines)
.trampolines 0x00000034 0x0 linker stubs
*(.trampolines*)
0x00000034 __trampolines_end = .
*libprintf_flt.a:*(.progmem.data)
*libc.a:*(.progmem.data)
*(.progmem*)
0x00000034 . = ALIGN (0x2)
*(.jumptables)
*(.jumptables*)
*(.lowtext)
*(.lowtext*)
0x00000034 __ctors_start = .
*(.ctors)
0x00000034 __ctors_end = .
0x00000034 __dtors_start = .
*(.dtors)
0x00000034 __dtors_end = .
SORT(*)(.ctors)
SORT(*)(.dtors)
*(.init0)
.init0 0x00000034 0x0 D:/Atmel/7.0/Packs/atmel/ATtiny_DFP/1.1.102/gcc/dev/attiny817/avrxmega2/crtattiny817.o
0x00000034 __init
*(.init0)
*(.init1)