Added pendulum

This commit is contained in:
Max Braungardt 2018-03-27 01:59:25 +02:00
parent 4c816c87bf
commit 0f2b6c2e30
17 changed files with 5741 additions and 0 deletions

View File

@ -0,0 +1,3 @@
color_hsv.o: color_hsv.c color_hsv.h
color_hsv.h:

View File

@ -0,0 +1,3 @@
pendulum.o: pendulum.c color_hsv.h
color_hsv.h:

621
sketches/pendulum/Makefile Normal file
View File

@ -0,0 +1,621 @@
# $ cat ~/windows/Makefile.glove
# Hey Emacs, this is a -*- makefile -*-
#----------------------------------------------------------------------------
# WinAVR Makefile Template written by Eric B. Weddington, J<>rg Wunsch, et al.
#
# Released to the Public Domain
#
# Additional material for this makefile was written by:
# Peter Fleury
# Tim Henigan
# Colin O'Flynn
# Reiner Patommel
# Markus Pfaff
# Sander Pool
# Frederik Rouleau
# Carlos Lamas
#
#----------------------------------------------------------------------------
# On command line:
#
# make all = Make software.
#
# make clean = Clean out built project files.
#
# make coff = Convert ELF to AVR COFF.
#
# make extcoff = Convert ELF to AVR Extended COFF.
#
# make program = Download the hex file to the device, using avrdude.
# Please customize the avrdude settings below first!
#
# make debug = Start either simulavr or avarice as specified for debugging,
# with avr-gdb or avr-insight as the front end for debugging.
#
# make filename.s = Just compile filename.c into the assembler code only.
#
# make filename.i = Create a preprocessed source file for use in submitting
# bug reports to the GCC project.
#
# To rebuild project do "make clean" then "make all".
#----------------------------------------------------------------------------
# MCU name
MCU = atmega328p
# Processor frequency.
# This will define a symbol, F_CPU, in all source code files equal to the
# processor frequency. You can then use this symbol in your source code to
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
# automatically to create a 32-bit value in your source code.
# Typical values are:
# F_CPU = 1000000
# F_CPU = 1843200
# F_CPU = 2000000
# F_CPU = 3686400
# F_CPU = 4000000
# F_CPU = 7372800
# F_CPU = 8000000
# F_CPU = 11059200
# F_CPU = 14745600
# F_CPU = 16000000
# F_CPU = 18432000
# F_CPU = 20000000
F_CPU = 20000000
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
# Target file name (without extension).
TARGET = pendulum
# Object files directory
# To put object files in current directory, use a dot (.), do NOT make
# this an empty or blank macro!
OBJDIR = .
# List C source files here. (C dependencies are automatically generated.)
SRC = ${wildcard *.c}
# List C++ source files here. (C dependencies are automatically generated.)
CPPSRC =
# List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC =
# Optimization level, can be [0, 1, 2, 3, s].
# 0 = turn off optimization. s = optimize for size.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s
# Debugging format.
# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
# AVR Studio 4.10 requires dwarf-2.
# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
DEBUG =
# List any extra directories to look for include files here.
# Each directory must be seperated by a space.
# Use forward slashes for directory separators.
# For a directory that has spaces, enclose it in quotes.
EXTRAINCDIRS =
# Compiler flag to set the C Standard level.
# c89 = "ANSI" C
# gnu89 = c89 plus GCC extensions
# c99 = ISO C99 standard (not yet fully implemented)
# gnu99 = c99 plus GCC extensions
CSTANDARD = -std=c11
# Place -D or -U options here for C sources
CDEFS = -DF_CPU=$(F_CPU)UL
# Place -D or -U options here for ASM sources
ADEFS = -DF_CPU=$(F_CPU)
# Place -D or -U options here for C++ sources
CPPDEFS = -DF_CPU=$(F_CPU)UL
#CPPDEFS += -D__STDC_LIMIT_MACROS
#CPPDEFS += -D__STDC_CONSTANT_MACROS
#---------------- Compiler Options C ----------------
# -g*: generate debugging information
# -O*: optimization level
# -f...: tuning, see GCC manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -adhlns...: create assembler listing
CFLAGS = -g$(DEBUG)
CFLAGS += $(CDEFS)
CFLAGS += -O$(OPT)
CFLAGS += -funsigned-char
CFLAGS += -funsigned-bitfields
CFLAGS += -fpack-struct
CFLAGS += -fshort-enums
CFLAGS += -Wall
CFLAGS += -Wstrict-prototypes
#CFLAGS += -mshort-calls
#CFLAGS += -fno-unit-at-a-time
#CFLAGS += -Wundef
#CFLAGS += -Wunreachable-code
#CFLAGS += -Wsign-compare
CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
CFLAGS += $(CSTANDARD)
#---------------- Compiler Options C++ ----------------
# -g*: generate debugging information
# -O*: optimization level
# -f...: tuning, see GCC manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -adhlns...: create assembler listing
CPPFLAGS = -g$(DEBUG)
CPPFLAGS += $(CPPDEFS)
CPPFLAGS += -O$(OPT)
CPPFLAGS += -funsigned-char
CPPFLAGS += -funsigned-bitfields
CPPFLAGS += -fpack-struct
CPPFLAGS += -fshort-enums
CPPFLAGS += -fno-exceptions
CPPFLAGS += -Wall
CPPFLAGS += -Wundef
#CPPFLAGS += -mshort-calls
#CPPFLAGS += -fno-unit-at-a-time
#CPPFLAGS += -Wstrict-prototypes
#CPPFLAGS += -Wunreachable-code
#CPPFLAGS += -Wsign-compare
CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)
CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
#CPPFLAGS += $(CSTANDARD)
#---------------- Assembler Options ----------------
# -Wa,...: tell GCC to pass this to the assembler.
# -adhlns: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
# -listing-cont-lines: Sets the maximum number of continuation lines of hex
# dump that will be displayed for a given single line of source input.
ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
#---------------- Library Options ----------------
# Minimalistic printf version
PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
# Floating point printf version (requires MATH_LIB = -lm below)
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
# If this is left blank, then it will use the Standard printf version.
PRINTF_LIB =
#PRINTF_LIB = $(PRINTF_LIB_MIN)
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
# Minimalistic scanf version
SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
# If this is left blank, then it will use the Standard scanf version.
SCANF_LIB =
#SCANF_LIB = $(SCANF_LIB_MIN)
#SCANF_LIB = $(SCANF_LIB_FLOAT)
MATH_LIB = -lm
# List any extra directories to look for libraries here.
# Each directory must be seperated by a space.
# Use forward slashes for directory separators.
# For a directory that has spaces, enclose it in quotes.
EXTRALIBDIRS =
#---------------- External Memory Options ----------------
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
# used for variables (.data/.bss) and heap (malloc()).
#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
# only used for heap (malloc()).
#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff
EXTMEMOPTS =
#---------------- Linker Options ----------------
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
LDFLAGS += $(EXTMEMOPTS)
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
#LDFLAGS += -T linker_script.x
#---------------- Programming Options (avrdude) ----------------
# Programming hardware
# Type: avrdude -c ?
# to get a full listing.
#
AVRDUDE_PROGRAMMER = stk500v2
# com1 = serial port. Use lpt1 to connect to parallel port.
AVRDUDE_PORT = com1 # programmer connected to serial device
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE_COUNTER = -y
# Uncomment the following if you do /not/ wish a verification to be
# performed after programming the device.
#AVRDUDE_NO_VERIFY = -V
# Increase verbosity level. Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_VERBOSE = -v -v
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
#---------------- Debugging Options ----------------
# For simulavr only - target MCU frequency.
DEBUG_MFREQ = $(F_CPU)
# Set the DEBUG_UI to either gdb or insight.
# DEBUG_UI = gdb
DEBUG_UI = insight
# Set the debugging back-end to either avarice, simulavr.
DEBUG_BACKEND = avarice
#DEBUG_BACKEND = simulavr
# GDB Init Filename.
GDBINIT_FILE = __avr_gdbinit
# When using avarice settings for the JTAG
JTAG_DEV = /dev/com1
# Debugging port used to communicate between GDB / avarice / simulavr.
DEBUG_PORT = 4242
# Debugging host used to communicate between GDB / avarice / simulavr, normally
# just set to localhost unless doing some sort of crazy debugging when
# avarice is running on a different computer.
DEBUG_HOST = localhost
#============================================================================
# Define programs and commands.
SHELL = sh
CC = avr-gcc
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
AR = avr-ar rcs
NM = avr-nm
AVRDUDE = avrdude
REMOVE = rm -f
REMOVEDIR = rm -rf
COPY = cp
WINSHELL = cmd
# Define Messages
# English
MSG_ERRORS_NONE = Errors: none
MSG_BEGIN = -------- begin --------
MSG_END = -------- end --------
MSG_SIZE_BEFORE = Size before:
MSG_SIZE_AFTER = Size after:
MSG_COFF = Converting to AVR COFF:
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
MSG_FLASH = Creating load file for Flash:
MSG_EEPROM = Creating load file for EEPROM:
MSG_EXTENDED_LISTING = Creating Extended Listing:
MSG_SYMBOL_TABLE = Creating Symbol Table:
MSG_LINKING = Linking:
MSG_COMPILING = Compiling C:
MSG_COMPILING_CPP = Compiling C++:
MSG_ASSEMBLING = Assembling:
MSG_CLEANING = Cleaning project:
MSG_CREATING_LIBRARY = Creating library:
# Define all object files.
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o)
# Define all listing files.
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst)
# Compiler flags to generate dependency files.
GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d
# Combine all necessary flags and optional flags.
# Add target processor to flags.
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
# Default target.
all: begin gccversion sizebefore build sizeafter end
# Change the build target to build a HEX file or a library.
build: elf hex eep lss sym
#build: lib
elf: $(TARGET).elf
hex: $(TARGET).hex
eep: $(TARGET).eep
lss: $(TARGET).lss
sym: $(TARGET).sym
LIBNAME=lib$(TARGET).a
lib: $(LIBNAME)
# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
@echo
@echo $(MSG_BEGIN)
end:
@echo $(MSG_END)
@echo
# Display size of file.
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf
sizebefore:
@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
2>/dev/null; echo; fi
sizeafter:
@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
2>/dev/null; echo; fi
# Display compiler version information.
gccversion :
@$(CC) --version
# Program the device.
program: $(TARGET).hex $(TARGET).eep
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
# Generate avr-gdb config/init file which does the following:
# define the reset signal, load the target file, connect to target, and set
# a breakpoint at main().
gdb-config:
@$(REMOVE) $(GDBINIT_FILE)
@echo define reset >> $(GDBINIT_FILE)
@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
@echo end >> $(GDBINIT_FILE)
@echo file $(TARGET).elf >> $(GDBINIT_FILE)
@echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)
ifeq ($(DEBUG_BACKEND),simulavr)
@echo load >> $(GDBINIT_FILE)
endif
@echo break main >> $(GDBINIT_FILE)
debug: gdb-config $(TARGET).elf
ifeq ($(DEBUG_BACKEND), avarice)
@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
@$(WINSHELL) /c pause
else
@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
$(DEBUG_MFREQ) --port $(DEBUG_PORT)
endif
@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
COFFCONVERT = $(OBJCOPY) --debugging
COFFCONVERT += --change-section-address .data-0x800000
COFFCONVERT += --change-section-address .bss-0x800000
COFFCONVERT += --change-section-address .noinit-0x800000
COFFCONVERT += --change-section-address .eeprom-0x810000
coff: $(TARGET).elf
@echo
@echo $(MSG_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
extcoff: $(TARGET).elf
@echo
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
@echo
@echo $(MSG_FLASH) $@
$(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock $< $@
%.eep: %.elf
@echo
@echo $(MSG_EEPROM) $@
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0
# Create extended listing file from ELF output file.
%.lss: %.elf
@echo
@echo $(MSG_EXTENDED_LISTING) $@
$(OBJDUMP) -h -S -z $< > $@
# Create a symbol table from ELF output file.
%.sym: %.elf
@echo
@echo $(MSG_SYMBOL_TABLE) $@
$(NM) -n $< > $@
# Create library from object files.
.SECONDARY : $(TARGET).a
.PRECIOUS : $(OBJ)
%.a: $(OBJ)
@echo
@echo $(MSG_CREATING_LIBRARY) $@
$(AR) $@ $(OBJ)
# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
@echo
@echo $(MSG_LINKING) $@
$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
# Compile: create object files from C source files.
$(OBJDIR)/%.o : %.c
@echo
@echo $(MSG_COMPILING) $<
$(CC) -c $(ALL_CFLAGS) $< -o $@
# Compile: create object files from C++ source files.
$(OBJDIR)/%.o : %.cpp
@echo
@echo $(MSG_COMPILING_CPP) $<
$(CC) -c $(ALL_CPPFLAGS) $< -o $@
# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@
# Compile: create assembler files from C++ source files.
%.s : %.cpp
$(CC) -S $(ALL_CPPFLAGS) $< -o $@
# Assemble: create object files from assembler source files.
$(OBJDIR)/%.o : %.S
@echo
@echo $(MSG_ASSEMBLING) $<
$(CC) -c $(ALL_ASFLAGS) $< -o $@
# Create preprocessed source for use in sending a bug report.
%.i : %.c
$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
# Target: clean project.
clean: begin clean_list end
clean_list :
@echo
@echo $(MSG_CLEANING)
$(REMOVE) $(TARGET).hex
$(REMOVE) $(TARGET).eep
$(REMOVE) $(TARGET).cof
$(REMOVE) $(TARGET).elf
$(REMOVE) $(TARGET).map
$(REMOVE) $(TARGET).sym
$(REMOVE) $(TARGET).lss
$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)
$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)
$(REMOVE) $(SRC:.c=.i)
$(REMOVEDIR) .dep
flash: pendulum.hex
avrdude -p $(MCU) -c arduino -B 115200 -P /dev/ttyACM0 -v -v -e -Uflash:w:pendulum.hex:a
# Create object files directory
$(shell mkdir $(OBJDIR) 2>/dev/null)
# Include the dependency files.
-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion \
build elf hex eep lss sym coff extcoff \
clean clean_list program debug gdb-config

View File

@ -0,0 +1,31 @@
CFLAGS = -Os -Wall --std=c11 -g
CHIP = atmega328p
SOURCE_FILES = ${wildcard *.c}
OBJ_FILES = $(SOURCE_FILES:%.c=%.o)
BIN = pendulum.bin
HEX = pendulum.hex
ASM = pendulum.asm
default: $(HEX)
%.o: %.c
avr-gcc $(CFLAGS) -mmcu=$(CHIP) -o $@ $<
$(BIN): $(OBJ_FILES)
avr-gcc $(CFLAGS) -o $@ $^
$(ASM): $(BIN)
avr-objdump -d -g -l -S $^ > $@
$(HEX): $(BIN)
avr-objcopy -O ihex -j .text -j .data $^ $@
asm: $(ASM)
flash: $(HEX)
avrdude -p $(CHIP) -c arduino -B 115200 -P /dev/ttyACM0 -v -v -e -Uflash:w:$(HEX):a
clean:
$(RM) $(OBJ_FILES) $(BIN) $(HEX) $(ASM)

View File

@ -0,0 +1,62 @@
#include "color_hsv.h"
void interpolate(hsv_t start, hsv_t end, size_t steps, hsv_t *colors) {
if( steps == 1 ) {
colors[0] = start;
return;
}
for( size_t i = 0; i < steps; i++ ) {
hsv_t tmp;
tmp.hue = (uint16_t)((int16_t)start.hue + ((int16_t)end.hue - (int16_t)start.hue) * (int16_t)i / ((int16_t)steps-1));
tmp.sat = (uint8_t)((int16_t)start.sat + ((int16_t)end.sat - (int16_t)start.sat) * (int16_t)i / ((int16_t)steps-1));
tmp.val = (uint8_t)((int16_t)start.val + ((int16_t)end.val - (int16_t)start.val) * (int16_t)i / ((int16_t)steps-1));
colors[i] = tmp;
}
}
void hsv2rgbList(hsv_t* hsvList, rgb_t* rgbList, size_t count) {
for(size_t i = 0; i < count; ++i) {
rgbList[i] = hsv2rgb(&hsvList[i]);
}
}
rgb_t hsv2rgb(hsv_t* hsv) {
rgb_t res;
if(hsv->sat == 0) {
res.r = res.g = res.b = hsv->val;
} else {
float hue = (float) (hsv->hue<360?hsv->hue:hsv->hue-360);
float val = ((float) hsv->val ) / 100.0;
float sat = ((float) hsv->sat ) / 100.0;
uint8_t h = hue / 60;
float f = ( hue / 60 ) - h;
uint8_t p = RGB_MAX * ( val * ( 1 - sat ));
uint8_t q = RGB_MAX * ( val * ( 1 - sat * f ));
uint8_t t = RGB_MAX * ( val * ( 1 - sat * ( 1 - f )));
switch(h) {
case 0:
case 6: res.r = hsv->val; res.g = t; res.b = p; break;
case 1: res.r = q; res.g = hsv->val; res.b = p; break;
case 2: res.r = p; res.g = hsv->val; res.b = t; break;
case 3: res.r = p; res.g = q; res.b = hsv->val; break;
case 4: res.r = t; res.g = p; res.b = hsv->val; break;
case 5: res.r = hsv->hue; res.g = p; res.b = q; break;
}
}
return res;
}
hsv_t init_hsv_t(uint16_t hue, uint8_t sat, uint8_t val) {
hsv_t tmp;
tmp.hue = hue;
tmp.sat = sat;
tmp.val = val;
return tmp;
}

View File

@ -0,0 +1,26 @@
#ifndef _COLOR_HSV_H_
#define _COLOR_HSV_H_
#include <stddef.h>
#include <stdint.h>
#define RGB_MAX 128
typedef struct {
uint8_t r;
uint8_t g;
uint8_t b;
} rgb_t;
typedef struct {
uint16_t hue;
uint8_t sat;
uint8_t val;
} hsv_t;
hsv_t init_hsv_t(uint16_t hue, uint8_t sat, uint8_t val);
rgb_t hsv2rgb(hsv_t* hsv);
void hsv2rgbList(hsv_t* hsvList, rgb_t* rgbList, size_t count);
void interpolate(hsv_t start, hsv_t end, size_t steps, hsv_t *colors);
#endif

View File

@ -0,0 +1,662 @@
1 .file "color_hsv.c"
2 __SP_H__ = 0x3e
3 __SP_L__ = 0x3d
4 __SREG__ = 0x3f
5 __tmp_reg__ = 0
6 __zero_reg__ = 1
9 .text
10 .Ltext0:
103 .global interpolate
105 interpolate:
106 .stabd 46,0,0
1:color_hsv.c **** #include "color_hsv.h"
2:color_hsv.c ****
3:color_hsv.c **** void interpolate(hsv_t start, hsv_t end, size_t steps, hsv_t *colors) {
108 .LM0:
109 .LFBB1:
110 0000 2F92 push r2
111 0002 3F92 push r3
112 0004 4F92 push r4
113 0006 5F92 push r5
114 0008 6F92 push r6
115 000a 7F92 push r7
116 000c 8F92 push r8
117 000e 9F92 push r9
118 0010 AF92 push r10
119 0012 BF92 push r11
120 0014 CF92 push r12
121 0016 DF92 push r13
122 0018 EF92 push r14
123 001a FF92 push r15
124 001c 0F93 push r16
125 001e 1F93 push r17
126 0020 CF93 push r28
127 0022 DF93 push r29
128 0024 CDB7 in r28,__SP_L__
129 0026 DEB7 in r29,__SP_H__
130 0028 2A97 sbiw r28,10
131 002a 0FB6 in __tmp_reg__,__SREG__
132 002c F894 cli
133 002e DEBF out __SP_H__,r29
134 0030 0FBE out __SREG__,__tmp_reg__
135 0032 CDBF out __SP_L__,r28
136 /* prologue: function */
137 /* frame size = 10 */
138 /* stack size = 28 */
139 .L__stack_usage = 28
140 0034 D82E mov r13,r24
141 0036 C92E mov r12,r25
142 0038 F701 movw r30,r14
4:color_hsv.c **** if( steps == 1 ) {
144 .LM1:
145 003a 0130 cpi r16,1
146 003c 1105 cpc r17,__zero_reg__
147 003e 01F0 breq .L2
148 .LBB2:
149 .LBB3:
5:color_hsv.c **** colors[0] = start;
6:color_hsv.c **** return;
7:color_hsv.c **** }
8:color_hsv.c ****
9:color_hsv.c **** for( size_t i = 0; i < steps; i++ ) {
10:color_hsv.c **** hsv_t tmp;
11:color_hsv.c **** tmp.hue = (uint16_t)((int16_t)start.hue + ((int16_t)end.hue - (int16_t)start.hue) * (int16_t)i /
151 .LM2:
152 0040 3B01 movw r6,r22
153 0042 2901 movw r4,r18
154 0044 461A sub r4,r22
155 0046 570A sbc r5,r23
156 0048 842F mov r24,r20
157 004a 90E0 ldi r25,0
12:color_hsv.c **** tmp.sat = (uint8_t)((int16_t)start.sat + ((int16_t)end.sat - (int16_t)start.sat) * (int16_t)i / (
159 .LM3:
160 004c BC01 movw r22,r24
161 004e 6D19 sub r22,r13
162 0050 7109 sbc r23,__zero_reg__
163 0052 7E83 std Y+6,r23
164 0054 6D83 std Y+5,r22
165 0056 852F mov r24,r21
166 0058 90E0 ldi r25,0
13:color_hsv.c **** tmp.val = (uint8_t)((int16_t)start.val + ((int16_t)end.val - (int16_t)start.val) * (int16_t)i / (
168 .LM4:
169 005a 9C01 movw r18,r24
170 005c 2C19 sub r18,r12
171 005e 3109 sbc r19,__zero_reg__
172 0060 3887 std Y+8,r19
173 0062 2F83 std Y+7,r18
174 0064 3396 adiw r30,3
175 0066 1A86 std Y+10,__zero_reg__
176 0068 1986 std Y+9,__zero_reg__
177 006a E12C mov r14,__zero_reg__
178 006c F12C mov r15,__zero_reg__
179 006e 80E0 ldi r24,0
180 0070 90E0 ldi r25,0
181 0072 20E0 ldi r18,0
182 0074 30E0 ldi r19,0
11:color_hsv.c **** tmp.sat = (uint8_t)((int16_t)start.sat + ((int16_t)end.sat - (int16_t)start.sat) * (int16_t)i / (
184 .LM5:
185 0076 5801 movw r10,r16
186 0078 41E0 ldi r20,1
187 007a A41A sub r10,r20
188 007c B108 sbc r11,__zero_reg__
189 007e 00C0 rjmp .L3
190 .L2:
191 .LBE3:
192 .LBE2:
5:color_hsv.c **** return;
194 .LM6:
195 0080 6083 st Z,r22
196 0082 7183 std Z+1,r23
197 0084 8283 std Z+2,r24
198 0086 9383 std Z+3,r25
6:color_hsv.c **** }
200 .LM7:
201 0088 00C0 rjmp .L1
202 .L3:
203 008a 1C01 movw r2,r24
204 008c 240C add r2,r4
205 008e 351C adc r3,r5
206 0090 4D81 ldd r20,Y+5
207 0092 5E81 ldd r21,Y+6
208 0094 4E0D add r20,r14
209 0096 5F1D adc r21,r15
210 0098 5A83 std Y+2,r21
211 009a 4983 std Y+1,r20
212 009c 4F81 ldd r20,Y+7
213 009e 5885 ldd r21,Y+8
214 00a0 6985 ldd r22,Y+9
215 00a2 7A85 ldd r23,Y+10
216 00a4 460F add r20,r22
217 00a6 571F adc r21,r23
218 00a8 5C83 std Y+4,r21
219 00aa 4B83 std Y+3,r20
220 .LBB5:
9:color_hsv.c **** hsv_t tmp;
222 .LM8:
223 00ac 2017 cp r18,r16
224 00ae 3107 cpc r19,r17
225 00b0 01F0 breq .L1
226 00b2 4F01 movw r8,r30
227 00b4 53E0 ldi r21,3
228 00b6 851A sub r8,r21
229 00b8 9108 sbc r9,__zero_reg__
230 .LBB4:
11:color_hsv.c **** tmp.sat = (uint8_t)((int16_t)start.sat + ((int16_t)end.sat - (int16_t)start.sat) * (int16_t)i / (
232 .LM9:
233 00ba B501 movw r22,r10
234 00bc 0E94 0000 call __divmodhi4
235 00c0 660D add r22,r6
236 00c2 771D adc r23,r7
14:color_hsv.c **** colors[i] = tmp;
238 .LM10:
239 00c4 D401 movw r26,r8
240 00c6 6D93 st X+,r22
241 00c8 7C93 st X,r23
242 00ca 4F01 movw r8,r30
243 00cc B1E0 ldi r27,1
244 00ce 8B1A sub r8,r27
245 00d0 9108 sbc r9,__zero_reg__
12:color_hsv.c **** tmp.val = (uint8_t)((int16_t)start.val + ((int16_t)end.val - (int16_t)start.val) * (int16_t)i / (
247 .LM11:
248 00d2 C701 movw r24,r14
249 00d4 B501 movw r22,r10
250 00d6 0E94 0000 call __divmodhi4
251 00da 6D0D add r22,r13
253 .LM12:
254 00dc D401 movw r26,r8
255 00de 6C93 st X,r22
13:color_hsv.c **** colors[i] = tmp;
257 .LM13:
258 00e0 8985 ldd r24,Y+9
259 00e2 9A85 ldd r25,Y+10
260 00e4 B501 movw r22,r10
261 00e6 0E94 0000 call __divmodhi4
262 00ea 6C0D add r22,r12
264 .LM14:
265 00ec 6083 st Z,r22
266 .LBE4:
9:color_hsv.c **** hsv_t tmp;
268 .LM15:
269 00ee 2F5F subi r18,-1
270 00f0 3F4F sbci r19,-1
271 00f2 3496 adiw r30,4
272 00f4 4B81 ldd r20,Y+3
273 00f6 5C81 ldd r21,Y+4
274 00f8 5A87 std Y+10,r21
275 00fa 4987 std Y+9,r20
276 00fc E980 ldd r14,Y+1
277 00fe FA80 ldd r15,Y+2
278 0100 C101 movw r24,r2
279 0102 00C0 rjmp .L3
280 .L1:
281 /* epilogue start */
282 .LBE5:
15:color_hsv.c **** }
16:color_hsv.c **** }
284 .LM16:
285 0104 2A96 adiw r28,10
286 0106 0FB6 in __tmp_reg__,__SREG__
287 0108 F894 cli
288 010a DEBF out __SP_H__,r29
289 010c 0FBE out __SREG__,__tmp_reg__
290 010e CDBF out __SP_L__,r28
291 0110 DF91 pop r29
292 0112 CF91 pop r28
293 0114 1F91 pop r17
294 0116 0F91 pop r16
295 0118 FF90 pop r15
296 011a EF90 pop r14
297 011c DF90 pop r13
298 011e CF90 pop r12
299 0120 BF90 pop r11
300 0122 AF90 pop r10
301 0124 9F90 pop r9
302 0126 8F90 pop r8
303 0128 7F90 pop r7
304 012a 6F90 pop r6
305 012c 5F90 pop r5
306 012e 4F90 pop r4
307 0130 3F90 pop r3
308 0132 2F90 pop r2
309 0134 0895 ret
317 .Lscope1:
319 .stabd 78,0,0
320 .global __floatunsisf
321 .global __divsf3
322 .global __fixunssfsi
323 .global __floatsisf
324 .global __subsf3
325 .global __mulsf3
328 .global hsv2rgb
330 hsv2rgb:
331 .stabd 46,0,0
17:color_hsv.c ****
18:color_hsv.c **** void hsv2rgbList(hsv_t* hsvList, rgb_t* rgbList, size_t count) {
19:color_hsv.c **** for(size_t i = 0; i < count; ++i) {
20:color_hsv.c **** rgbList[i] = hsv2rgb(&hsvList[i]);
21:color_hsv.c **** }
22:color_hsv.c **** }
23:color_hsv.c ****
24:color_hsv.c **** rgb_t hsv2rgb(hsv_t* hsv) {
333 .LM17:
334 .LFBB2:
335 0136 2F92 push r2
336 0138 3F92 push r3
337 013a 4F92 push r4
338 013c 5F92 push r5
339 013e 6F92 push r6
340 0140 7F92 push r7
341 0142 8F92 push r8
342 0144 9F92 push r9
343 0146 AF92 push r10
344 0148 BF92 push r11
345 014a CF92 push r12
346 014c DF92 push r13
347 014e EF92 push r14
348 0150 FF92 push r15
349 0152 0F93 push r16
350 0154 1F93 push r17
351 0156 CF93 push r28
352 0158 DF93 push r29
353 015a 00D0 rcall .
354 015c 00D0 rcall .
355 015e CDB7 in r28,__SP_L__
356 0160 DEB7 in r29,__SP_H__
357 /* prologue: function */
358 /* frame size = 4 */
359 /* stack size = 22 */
360 .L__stack_usage = 22
25:color_hsv.c **** rgb_t res;
26:color_hsv.c ****
27:color_hsv.c **** if(hsv->sat == 0) {
362 .LM18:
363 0162 FC01 movw r30,r24
364 0164 B280 ldd r11,Z+2
365 0166 3380 ldd r3,Z+3
366 0168 B110 cpse r11,__zero_reg__
367 016a 00C0 rjmp .L8
28:color_hsv.c **** res.r = res.g = res.b = hsv->val;
369 .LM19:
370 016c 232C mov r2,r3
371 016e 3B82 std Y+3,r3
372 0170 3C82 std Y+4,r3
373 0172 00C0 rjmp .L9
374 .L8:
375 0174 FC01 movw r30,r24
376 .LBB6:
29:color_hsv.c **** } else {
30:color_hsv.c **** float hue = (float) (hsv->hue<360?hsv->hue:hsv->hue-360);
378 .LM20:
379 0176 0081 ld r16,Z
380 0178 1181 ldd r17,Z+1
381 017a B801 movw r22,r16
382 017c 0836 cpi r16,104
383 017e F1E0 ldi r31,1
384 0180 1F07 cpc r17,r31
385 0182 00F0 brlo .L20
387 .LM21:
388 0184 6856 subi r22,104
389 0186 7140 sbci r23,1
390 .L20:
391 0188 80E0 ldi r24,0
392 018a 90E0 ldi r25,0
393 018c 0E94 0000 call __floatunsisf
394 0190 2B01 movw r4,r22
395 0192 3C01 movw r6,r24
31:color_hsv.c **** float val = ((float) hsv->val ) / 100.0;
397 .LM22:
398 0194 632D mov r22,r3
399 0196 70E0 ldi r23,0
400 0198 80E0 ldi r24,0
401 019a 90E0 ldi r25,0
402 019c 0E94 0000 call __floatunsisf
403 01a0 20E0 ldi r18,0
404 01a2 30E0 ldi r19,0
405 01a4 48EC ldi r20,lo8(-56)
406 01a6 52E4 ldi r21,lo8(66)
407 01a8 0E94 0000 call __divsf3
408 01ac 6B01 movw r12,r22
409 01ae 7C01 movw r14,r24
32:color_hsv.c **** float sat = ((float) hsv->sat ) / 100.0;
411 .LM23:
412 01b0 6B2D mov r22,r11
413 01b2 70E0 ldi r23,0
414 01b4 80E0 ldi r24,0
415 01b6 90E0 ldi r25,0
416 01b8 0E94 0000 call __floatunsisf
417 01bc 20E0 ldi r18,0
418 01be 30E0 ldi r19,0
419 01c0 48EC ldi r20,lo8(-56)
420 01c2 52E4 ldi r21,lo8(66)
421 01c4 0E94 0000 call __divsf3
422 01c8 4B01 movw r8,r22
423 01ca 5C01 movw r10,r24
33:color_hsv.c ****
34:color_hsv.c **** uint8_t h = hue / 60;
425 .LM24:
426 01cc 20E0 ldi r18,0
427 01ce 30E0 ldi r19,0
428 01d0 40E7 ldi r20,lo8(112)
429 01d2 52E4 ldi r21,lo8(66)
430 01d4 C301 movw r24,r6
431 01d6 B201 movw r22,r4
432 01d8 0E94 0000 call __divsf3
433 01dc 2B01 movw r4,r22
434 01de 3C01 movw r6,r24
435 01e0 0E94 0000 call __fixunssfsi
436 01e4 6A83 std Y+2,r22
35:color_hsv.c **** float f = ( hue / 60 ) - h;
438 .LM25:
439 01e6 70E0 ldi r23,0
440 01e8 80E0 ldi r24,0
441 01ea 90E0 ldi r25,0
442 01ec 0E94 0000 call __floatsisf
443 01f0 9B01 movw r18,r22
444 01f2 AC01 movw r20,r24
445 01f4 C301 movw r24,r6
446 01f6 B201 movw r22,r4
447 01f8 0E94 0000 call __subsf3
448 01fc 2B01 movw r4,r22
449 01fe 3C01 movw r6,r24
36:color_hsv.c ****
37:color_hsv.c **** uint8_t p = RGB_MAX * ( val * ( 1 - sat ));
451 .LM26:
452 0200 A501 movw r20,r10
453 0202 9401 movw r18,r8
454 0204 60E0 ldi r22,0
455 0206 70E0 ldi r23,0
456 0208 80E8 ldi r24,lo8(-128)
457 020a 9FE3 ldi r25,lo8(63)
458 020c 0E94 0000 call __subsf3
459 0210 9B01 movw r18,r22
460 0212 AC01 movw r20,r24
461 0214 C701 movw r24,r14
462 0216 B601 movw r22,r12
463 0218 0E94 0000 call __mulsf3
464 021c 20E0 ldi r18,0
465 021e 30E0 ldi r19,0
466 0220 40E0 ldi r20,0
467 0222 53E4 ldi r21,lo8(67)
468 0224 0E94 0000 call __mulsf3
469 0228 0E94 0000 call __fixunssfsi
470 022c 262E mov r2,r22
38:color_hsv.c **** uint8_t q = RGB_MAX * ( val * ( 1 - sat * f ));
472 .LM27:
473 022e A301 movw r20,r6
474 0230 9201 movw r18,r4
475 0232 C501 movw r24,r10
476 0234 B401 movw r22,r8
477 0236 0E94 0000 call __mulsf3
478 023a 9B01 movw r18,r22
479 023c AC01 movw r20,r24
480 023e 60E0 ldi r22,0
481 0240 70E0 ldi r23,0
482 0242 80E8 ldi r24,lo8(-128)
483 0244 9FE3 ldi r25,lo8(63)
484 0246 0E94 0000 call __subsf3
485 024a 9B01 movw r18,r22
486 024c AC01 movw r20,r24
487 024e C701 movw r24,r14
488 0250 B601 movw r22,r12
489 0252 0E94 0000 call __mulsf3
490 0256 20E0 ldi r18,0
491 0258 30E0 ldi r19,0
492 025a 40E0 ldi r20,0
493 025c 53E4 ldi r21,lo8(67)
494 025e 0E94 0000 call __mulsf3
495 0262 0E94 0000 call __fixunssfsi
496 0266 6983 std Y+1,r22
39:color_hsv.c **** uint8_t t = RGB_MAX * ( val * ( 1 - sat * ( 1 - f )));
498 .LM28:
499 0268 A301 movw r20,r6
500 026a 9201 movw r18,r4
501 026c 60E0 ldi r22,0
502 026e 70E0 ldi r23,0
503 0270 80E8 ldi r24,lo8(-128)
504 0272 9FE3 ldi r25,lo8(63)
505 0274 0E94 0000 call __subsf3
506 0278 9B01 movw r18,r22
507 027a AC01 movw r20,r24
508 027c C501 movw r24,r10
509 027e B401 movw r22,r8
510 0280 0E94 0000 call __mulsf3
511 0284 9B01 movw r18,r22
512 0286 AC01 movw r20,r24
513 0288 60E0 ldi r22,0
514 028a 70E0 ldi r23,0
515 028c 80E8 ldi r24,lo8(-128)
516 028e 9FE3 ldi r25,lo8(63)
517 0290 0E94 0000 call __subsf3
518 0294 9B01 movw r18,r22
519 0296 AC01 movw r20,r24
520 0298 C701 movw r24,r14
521 029a B601 movw r22,r12
522 029c 0E94 0000 call __mulsf3
523 02a0 20E0 ldi r18,0
524 02a2 30E0 ldi r19,0
525 02a4 40E0 ldi r20,0
526 02a6 53E4 ldi r21,lo8(67)
527 02a8 0E94 0000 call __mulsf3
528 02ac 0E94 0000 call __fixunssfsi
40:color_hsv.c ****
41:color_hsv.c **** switch(h) {
530 .LM29:
531 02b0 2A81 ldd r18,Y+2
532 02b2 822F mov r24,r18
533 02b4 90E0 ldi r25,0
534 02b6 8730 cpi r24,7
535 02b8 9105 cpc r25,__zero_reg__
536 02ba 00F4 brsh .L19
538 .LM30:
539 02bc FC01 movw r30,r24
540 02be E050 subi r30,lo8(-(gs(.L13)))
541 02c0 F040 sbci r31,hi8(-(gs(.L13)))
542 02c2 0C94 0000 jmp __tablejump2__
543 .section .progmem.gcc_sw_table,"a",@progbits
544 .p2align 1
545 .L13:
546 0000 0000 .word gs(.L12)
547 0002 0000 .word gs(.L14)
548 0004 0000 .word gs(.L15)
549 0006 0000 .word gs(.L16)
550 0008 0000 .word gs(.L17)
551 000a 0000 .word gs(.L18)
552 000c 0000 .word gs(.L12)
553 .text
554 .L12:
42:color_hsv.c **** case 0:
43:color_hsv.c **** case 6: res.r = hsv->val; res.g = t; res.b = p; break;
556 .LM31:
557 02c6 2B82 std Y+3,r2
558 02c8 6C83 std Y+4,r22
559 02ca 232C mov r2,r3
560 02cc 00C0 rjmp .L9
561 .L14:
44:color_hsv.c **** case 1: res.r = q; res.g = hsv->val; res.b = p; break;
563 .LM32:
564 02ce 2B82 std Y+3,r2
565 02d0 3C82 std Y+4,r3
566 02d2 2980 ldd r2,Y+1
567 02d4 00C0 rjmp .L9
568 .L15:
45:color_hsv.c **** case 2: res.r = p; res.g = hsv->val; res.b = t; break;
570 .LM33:
571 02d6 6B83 std Y+3,r22
572 02d8 3C82 std Y+4,r3
573 02da 00C0 rjmp .L9
574 .L16:
46:color_hsv.c **** case 3: res.r = p; res.g = q; res.b = hsv->val; break;
576 .LM34:
577 02dc 3B82 std Y+3,r3
578 02de 8981 ldd r24,Y+1
579 02e0 8C83 std Y+4,r24
580 02e2 00C0 rjmp .L9
581 .L17:
47:color_hsv.c **** case 4: res.r = t; res.g = p; res.b = hsv->val; break;
583 .LM35:
584 02e4 3B82 std Y+3,r3
585 02e6 2C82 std Y+4,r2
586 02e8 262E mov r2,r22
587 02ea 00C0 rjmp .L9
588 .L18:
48:color_hsv.c **** case 5: res.r = hsv->hue; res.g = p; res.b = q; break;
590 .LM36:
591 02ec E981 ldd r30,Y+1
592 02ee EB83 std Y+3,r30
593 02f0 2C82 std Y+4,r2
594 02f2 202E mov r2,r16
595 02f4 00C0 rjmp .L9
596 .L19:
41:color_hsv.c **** case 0:
598 .LM37:
599 02f6 212C mov r2,__zero_reg__
600 .L9:
601 .LBE6:
49:color_hsv.c ****
50:color_hsv.c **** }
51:color_hsv.c **** }
52:color_hsv.c **** return res;
53:color_hsv.c **** }
603 .LM38:
604 02f8 622D mov r22,r2
605 02fa 7C81 ldd r23,Y+4
606 02fc 8B81 ldd r24,Y+3
607 /* epilogue start */
608 02fe 0F90 pop __tmp_reg__
609 0300 0F90 pop __tmp_reg__
610 0302 0F90 pop __tmp_reg__
611 0304 0F90 pop __tmp_reg__
612 0306 DF91 pop r29
613 0308 CF91 pop r28
614 030a 1F91 pop r17
615 030c 0F91 pop r16
616 030e FF90 pop r15
617 0310 EF90 pop r14
618 0312 DF90 pop r13
619 0314 CF90 pop r12
620 0316 BF90 pop r11
621 0318 AF90 pop r10
622 031a 9F90 pop r9
623 031c 8F90 pop r8
624 031e 7F90 pop r7
625 0320 6F90 pop r6
626 0322 5F90 pop r5
627 0324 4F90 pop r4
628 0326 3F90 pop r3
629 0328 2F90 pop r2
630 032a 0895 ret
635 .Lscope2:
637 .stabd 78,0,0
641 .global hsv2rgbList
643 hsv2rgbList:
644 .stabd 46,0,0
18:color_hsv.c **** for(size_t i = 0; i < count; ++i) {
646 .LM39:
647 .LFBB3:
648 032c CF92 push r12
649 032e DF92 push r13
650 0330 EF92 push r14
651 0332 FF92 push r15
652 0334 0F93 push r16
653 0336 1F93 push r17
654 0338 CF93 push r28
655 033a DF93 push r29
656 /* prologue: function */
657 /* frame size = 0 */
658 /* stack size = 8 */
659 .L__stack_usage = 8
660 033c 6A01 movw r12,r20
661 033e EB01 movw r28,r22
662 0340 7C01 movw r14,r24
663 .LBB7:
19:color_hsv.c **** rgbList[i] = hsv2rgb(&hsvList[i]);
665 .LM40:
666 0342 00E0 ldi r16,0
667 0344 10E0 ldi r17,0
668 .L22:
19:color_hsv.c **** rgbList[i] = hsv2rgb(&hsvList[i]);
670 .LM41:
671 0346 0C15 cp r16,r12
672 0348 1D05 cpc r17,r13
673 034a 01F0 breq .L24
20:color_hsv.c **** }
675 .LM42:
676 034c C701 movw r24,r14
677 034e 0E94 0000 call hsv2rgb
678 0352 6993 st Y+,r22
679 0354 7993 st Y+,r23
680 0356 8993 st Y+,r24
19:color_hsv.c **** rgbList[i] = hsv2rgb(&hsvList[i]);
682 .LM43:
683 0358 0F5F subi r16,-1
684 035a 1F4F sbci r17,-1
685 035c 84E0 ldi r24,4
686 035e E80E add r14,r24
687 0360 F11C adc r15,__zero_reg__
688 0362 00C0 rjmp .L22
689 .L24:
690 /* epilogue start */
691 .LBE7:
22:color_hsv.c ****
693 .LM44:
694 0364 DF91 pop r29
695 0366 CF91 pop r28
696 0368 1F91 pop r17
697 036a 0F91 pop r16
698 036c FF90 pop r15
699 036e EF90 pop r14
700 0370 DF90 pop r13
701 0372 CF90 pop r12
702 0374 0895 ret
707 .Lscope3:
709 .stabd 78,0,0
713 .global init_hsv_t
715 init_hsv_t:
716 .stabd 46,0,0
54:color_hsv.c ****
55:color_hsv.c **** hsv_t init_hsv_t(uint16_t hue, uint8_t sat, uint8_t val) {
718 .LM45:
719 .LFBB4:
720 /* prologue: function */
721 /* frame size = 0 */
722 /* stack size = 0 */
723 .L__stack_usage = 0
724 0376 282F mov r18,r24
725 0378 862F mov r24,r22
56:color_hsv.c **** hsv_t tmp;
57:color_hsv.c **** tmp.hue = hue;
58:color_hsv.c **** tmp.sat = sat;
59:color_hsv.c **** tmp.val = val;
60:color_hsv.c ****
61:color_hsv.c **** return tmp;
62:color_hsv.c **** }
727 .LM46:
728 037a 622F mov r22,r18
729 037c 792F mov r23,r25
730 037e 942F mov r25,r20
731 0380 0895 ret
733 .Lscope4:
735 .stabd 78,0,0
737 .Letext0:
738 .ident "GCC: (GNU) 4.9.2"
DEFINED SYMBOLS
*ABS*:0000000000000000 color_hsv.c
/tmp/cclIci1E.s:2 *ABS*:000000000000003e __SP_H__
/tmp/cclIci1E.s:3 *ABS*:000000000000003d __SP_L__
/tmp/cclIci1E.s:4 *ABS*:000000000000003f __SREG__
/tmp/cclIci1E.s:5 *ABS*:0000000000000000 __tmp_reg__
/tmp/cclIci1E.s:6 *ABS*:0000000000000001 __zero_reg__
/tmp/cclIci1E.s:105 .text:0000000000000000 interpolate
/tmp/cclIci1E.s:330 .text:0000000000000136 hsv2rgb
/tmp/cclIci1E.s:643 .text:000000000000032c hsv2rgbList
/tmp/cclIci1E.s:715 .text:0000000000000376 init_hsv_t
UNDEFINED SYMBOLS
__divmodhi4
__floatunsisf
__divsf3
__fixunssfsi
__floatsisf
__subsf3
__mulsf3
__tablejump2__

Binary file not shown.

View File

@ -0,0 +1,228 @@
#define F_CPU 20000000UL
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/io.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#include "color_hsv.h"
#define HUE_MAX 610
#define HUE_MIN 350
#define HUE_MID ((HUE_MAX + HUE_MIN) / 2)
#define HUE_DIF (HUE_MAX - HUE_MIN)
#define HUE_SAT 100 // 0 = white, 100 = color
#define HUE_VAL 20 // 0 = black, 100 = color
#define HUE_STEP 8 // 8
const uint32_t colorSteps = HUE_DIF / HUE_STEP;
//~ const uint32_t colorSteps = 5;
#define LEDS 30
// Prototypes:
void writeZero(void);
void writeOne(void);
void writeRGB(uint8_t red, uint8_t green, uint8_t blue);
// Interrupt variables:
int8_t volatile status = 1;
uint16_t volatile min = HUE_MID;
uint16_t volatile max = HUE_MID;
uint32_t volatile time = 0;
uint32_t volatile T_half = 0;
uint32_t volatile oldTime = 0;
uint32_t volatile cooldown = 0;
//~ uint32_t volatile delay = 0;
// On External Interrupt:
ISR(INT1_vect) {
EIMSK &= 0xfd; // Disable INT1
T_half = time + TCNT1;
//~ delay = T_half / 16;
cooldown = T_half / 2;
TCNT1 = 0; // Reset Timer/Counter1
time = 0;
oldTime = 0;
PORTC ^= 0x02;
//~ min = HUE_MID;
//~ max = HUE_MID;
//~ status = (status == 1 ? -1 : 1);
}
// On Timer Overflow Interrupt:
ISR(TIMER1_OVF_vect) {
time += 0x00010000;
}
int main(void) {
EIMSK |= 0x02; // External Interrupt Mask Register
// Enable INT1 (PIN5) for interrupt
EICRA |= 0x0c; // External Interrupt Control Register
// INT1 on rising edge
TIMSK1 |= 0x01; // Timer/Counter1 Interrupt Mask Register
// Enable overflow interrupt
TCCR1B |= 0x01; // Timer/Counter1 Control Register B
// Prescale Factor 1
SREG |= 0x80; // Status Register
// Enable global interrupts
DDRC = 0x3f; // Digital Direction PORTC[5:0] = output
PORTC = 0x00;
// Init color
hsv_t colorsHSV[LEDS];
rgb_t colorsRGB[LEDS];
interpolate(
init_hsv_t(min, HUE_SAT, HUE_VAL), // from color
init_hsv_t(max, HUE_SAT, HUE_VAL), // to color
LEDS,
colorsHSV
);
hsv2rgbList(colorsHSV, colorsRGB, LEDS);
// Assign color
for(int i = 0; i < LEDS; i++) {
writeRGB( colorsRGB[i].r, colorsRGB[i].g, colorsRGB[i].b);
}
// Next color
int8_t sign = 1;
min += sign * HUE_STEP;
max -= sign * HUE_STEP;
interpolate(
init_hsv_t(min, HUE_SAT, HUE_VAL),// from color
init_hsv_t(max, HUE_SAT, HUE_VAL), // to color
LEDS,
colorsHSV
);
hsv2rgbList(colorsHSV, colorsRGB, LEDS);
while(1) {
uint32_t now = time + TCNT1;
//~ if(now > delay) {
//~ PORTC |= 0x08; // PORTC3 = HIGH
//~ }
//~ if(now > delay * 2) {
//~ PORTC &= 0xf7; // PORTC3 = LOW
//~ }
if(now > cooldown) {
EIMSK |= 0x02; // Enable INT1
}
uint32_t T_step = T_half / colorSteps;
// Check if it is time for next color
if(now > oldTime + T_step) {
oldTime += T_step;
PORTC ^= 0x04;
// Assign color
cli();
for(int i = 0; i < LEDS; i++) {
writeRGB( colorsRGB[i].r, colorsRGB[i].g, colorsRGB[i].b);
}
sei();
//~ _delay_us(51);
// Next color
min += sign * HUE_STEP;
max -= sign * HUE_STEP;
interpolate(
init_hsv_t(min, HUE_SAT, HUE_VAL), // from color
init_hsv_t(max, HUE_SAT, HUE_VAL), // to color
LEDS,
colorsHSV
);
hsv2rgbList(colorsHSV, colorsRGB, LEDS);
// Check if reached amplitude
if(sign == 1 && (min >= HUE_MAX || max <= HUE_MIN)) {
sign = -1;
} else if(sign == -1 && (min <= HUE_MIN || max >= HUE_MAX)) {
sign = 1;
}
//~ if(status == 1 && sign == 1 && (min >= HUE_MAX || max <= HUE_MIN)) {
//~ sign = -1;
//~ } else if(status == 1 && sign == -1 && (min <= HUE_MIN || max >= HUE_MAX)) {
//~ sign = 1;
//~ } else if(status == -1 && sign == 1 && (min <= HUE_MIN || max >= HUE_MAX)) {
//~ sign = -1;
//~ } else if(status == -1 && sign == -1 && (min >= HUE_MAX || max <= HUE_MIN)) {
//~ sign = 1;
//~ }
}
}
}
/***********************************************************************
*
* TIMING
*
************************************************************************
* f=20MHz -> T=0,05 µs = 50 ns
*
* 0,05 µs * 6 == 0.3 µs ~ 0.4 µs (+- 150ns) == [0.25, 0.55] µs
* 0,05 µs * 14 == 0.7 µs ~ 0.8 µs (+- 150ns) == [0.65, 0.95] µs
* 0,05 µs * 15 == 0.75 µs ~ 0.85 µs (+- 150ns) == [0.70, 1.00] µs
* 0,05 µs * 8 == 0.35 µs ~ 0.45 µs (+- 150ns) == [0.30, 0.60] µs
* 51 µs > 50 µs
************************************************************************/
// AVR-GCC optimizes multiple "nop"s on every optimization level
// So we use timing from:
// https://github.com/cpldcpu/light_ws2812/blob/master/light_ws2812_AVR/Light_WS2812/light_ws2812.c
#define w_nop1 __asm__("nop \n\t")
#define w_nop2 __asm__("rjmp .+0 \n\t")
#define w_nop4 w_nop2; w_nop2
#define w_nop8 w_nop4; w_nop4
#define w_nop16 w_nop8; w_nop8 // Not used
#define wait6 w_nop2; w_nop4
#define wait8 w_nop8
#define wait14 wait8; wait6
#define wait15 wait14; w_nop1
// WS2812B protocol
inline void writeZero() {
PORTC |= 0x01; // PORTC0 = 1, PORTC[5:1] = invariant
wait6;
PORTC &= 0xfe; // PORTC0 = 0, PORTC[5:1] = invariant
wait15;
}
// WS2812B protocol
inline void writeOne() {
PORTC |= 0x01; // PORTC0 = 1, PORTC[5:1] = invariant
wait14;
PORTC &= 0xfe; // PORTC0 = 0, PORTC[5:1] = invariant
wait8;
}
inline void writeRGB(uint8_t red, uint8_t green, uint8_t blue) {
int i;
for( i = 128; i > 0; i >>= 1 ) {
if( green & i ){
writeOne();
} else {
writeZero();
}
}
for( i = 128; i > 0; i >>= 1 ) {
if( red & i ){
writeOne();
} else {
writeZero();
}
}
for( i = 128; i > 0; i >>= 1 ) {
if( blue & i ){
writeOne();
} else {
writeZero();
}
}
}

View File

@ -0,0 +1 @@
:00000001FF

BIN
sketches/pendulum/pendulum.elf Executable file

Binary file not shown.

View File

@ -0,0 +1,216 @@
:100000000C943B000C9458000C945A000C9458002B
:100010000C9458000C9458000C9458000C94580000
:100020000C9458000C9458000C9458000C945800F0
:100030000C9458000C94B7000C9458000C94580081
:100040000C9458000C9458000C9458000C945800D0
:100050000C9458000C9458000C9458000C945800C0
:100060000C9458000C945800AA02AE02B202B502D9
:10007000B902BD02AA0211241FBECFEFD8E0DEBF35
:10008000CDBF11E0A0E0B1E0E0E6FDE002C00590E8
:100090000D92AA30B107D9F721E0AAE0B1E001C082
:1000A0001D92AA31B207E1F70E9408030C94AE0634
:1000B0000C9400001F920F920FB60F9211242F93F1
:1000C0003F938F939F93AF93BF93EF93FF93E998E1
:1000D0008091160190911701A0911801B09119011A
:1000E000E4E8F0E020813181820F931FA11DB11D52
:1000F0008093120190931301A0931401B093150102
:100100008091120190911301A0911401B0911501F9
:10011000B695A7959795879580930A0190930B01C3
:10012000A0930C01B0930D01118210821092160160
:1001300010921701109218011092190110920E01DD
:1001400010920F01109210011092110198B182E0EB
:10015000892788B9FF91EF91BF91AF919F918F91BE
:100160003F912F910F900FBE0F901F9018951F92E7
:100170000F920FB60F9211248F939F93AF93BF935B
:100180008091160190911701A0911801B091190169
:1001900011968093160190931701A0931801B093C4
:1001A0001901BF91AF919F918F910F900FBE0F904A
:1001B0001F901895409A00C000C000C0409800C031
:1001C00000C000C000C000C000C000C00000089512
:1001D000409A00C000C000C000C000C000C000C005
:1001E000409800C000C000C000C00895AF92BF9208
:1001F000CF92DF92EF92FF920F931F93CF93DF93F3
:10020000C82EE42EC8E0D0E000E810E0A62EB12C05
:10021000C8018A219B21892B19F00E94E80002C0A5
:100220000E94DA0015950795219791F7C8E0D0E074
:1002300000E810E0D12CC8018C219D21892B19F0F8
:100240000E94E80002C00E94DA00159507952197E8
:1002500091F7C8E0D0E000E810E0F12CC8018E2151
:100260009F21892B19F00E94E80002C00E94DA0049
:1002700015950795219791F7DF91CF911F910F91D8
:10028000FF90EF90DF90CF90BF90AF9008952F92A6
:100290003F924F925F926F927F928F929F92AF9216
:1002A000BF92CF92DF92EF92FF920F931F93CF9363
:1002B000DF93CDB7DEB72A970FB6F894DEBF0FBE37
:1002C000CDBFD82EC92EF7010130110501F13B0138
:1002D0002901461A570A842F90E0BC016D19710953
:1002E0007E836D83852F90E09C012C19310938871E
:1002F0002F8333961A861986E12CF12C80E090E04A
:1003000020E030E0580141E0A41AB10805C0608344
:100310007183828393833DC01C01240C351C4D8165
:100320005E814E0D5F1D5A8349834F8158856985D3
:100330007A85460F571F5C834B832017310749F19D
:100340004F0153E0851A9108B5010E948006660DA1
:10035000771DD4016D937C934F01B1E08B1A910806
:10036000C701B5010E9480066D0DD4016C9389858B
:100370009A85B5010E9480066C0D60832F5F3F4F08
:1003800034964B815C815A874987E980FA80C101A4
:10039000C3CF2A960FB6F894DEBF0FBECDBFDF9154
:1003A000CF911F910F91FF90EF90DF90CF90BF9072
:1003B000AF909F908F907F906F905F904F903F9005
:1003C0002F9008952F923F924F925F926F927F925B
:1003D0008F929F92AF92BF92CF92DF92EF92FF9255
:1003E0000F931F93CF93DF9300D000D0CDB7DEB72C
:1003F000FC01B2803380B11004C0232C3B823C82CC
:10040000C2C0FC0100811181B8010836F1E01F076C
:1004100010F06856714080E090E00E9485052B0145
:100420003C01632D70E080E090E00E94850520E0B3
:1004300030E048EC52E40E94E4046B017C016B2D37
:1004400070E080E090E00E94850520E030E048EC1C
:1004500052E40E94E4044B015C0120E030E040E7FC
:1004600052E4C301B2010E94E4042B013C010E944A
:1004700056056A8370E080E090E00E9487059B014A
:10048000AC01C301B2010E9477042B013C01A5011C
:10049000940160E070E080E89FE30E9477049B0194
:1004A000AC01C701B6010E94130620E030E040E035
:1004B00053E40E9413060E945605262EA3019201C2
:1004C000C501B4010E9413069B01AC0160E070E01D
:1004D00080E89FE30E9477049B01AC01C701B6014D
:1004E0000E94130620E030E040E053E40E9413062F
:1004F0000E9456056983A301920160E070E080E8E4
:100500009FE30E9477049B01AC01C501B4010E94E6
:1005100013069B01AC0160E070E080E89FE30E945D
:1005200077049B01AC01C701B6010E94130620E0CD
:1005300030E040E053E40E9413060E9456052A81F1
:10054000822F90E087309105E8F4FC01EC5CFF4FCE
:100550000C9494062B826C83232C15C02B823C8236
:10056000298011C06B833C820EC03B8289818C83C1
:100570000AC03B822C82262E06C0E981EB832C82A6
:10058000202E01C0212C622D7C818B810F900F9039
:100590000F900F90DF91CF911F910F91FF90EF90EF
:1005A000DF90CF90BF90AF909F908F907F906F9093
:1005B0005F904F903F902F900895CF92DF92EF92EF
:1005C000FF920F931F93CF93DF936A01EB017C019E
:1005D00000E010E00C151D0561F0C7010E94E2016A
:1005E0006993799389930F5F1F4F84E0E80EF11CA4
:1005F000F1CFDF91CF911F910F91FF90EF90DF909E
:10060000CF900895282F862F622F792F942F089549
:10061000CF93DF93CDB7DEB7C25DD1090FB6F894A3
:10062000DEBF0FBECDBFE99A809169008C608093D8
:10063000690080916F00816080936F0080918100DC
:100640008160809381008FB780688FBF8FE387B907
:1006500018B8809100019091010144E164E60E9484
:1006600002034B015C01809102019091030144E17E
:1006700064E60E9402039E012F5F3F4F79010EE165
:1006800010E0A50194010E9447014EE150E0BE0137
:1006900067587F4FC7010E94DD0249E7A42EB12CA5
:1006A000AC0EBD1E32E0A30EB11C4E0185ED880ECE
:1006B000911C8501D8011197C8010297F80140816A
:1006C0006C91FC0180810E94F6000D5F1F4F0815A0
:1006D000190581F78091020190910301089690938A
:1006E000030180930201809100019091010108971C
:1006F000909301018093000180910001909101018C
:1007000044E164E60E9402032B013C018091020156
:100710009091030144E164E60E9402039E012F5F71
:100720003F4F79010EE110E0A30192010E944701C1
:100730004EE150E0BE0167587F4FC7010E94DD02C5
:10074000DD24D39434E0C32E40911601509117015B
:100750006091180170911901809184009091850039
:10076000480F591F611D711D80910A0190910B0165
:10077000A0910C01B0910D0184179507A607B7074A
:1007800008F4E99A8091120190911301A09114014B
:10079000B091150125E0B695A795979587952A956F
:1007A000D1F700910E0110910F01209110013091AD
:1007B0001101080F191F2A1F3B1F041715072607D1
:1007C000370710F640910E0150910F016091100112
:1007D00070911101840F951FA61FB71F80930E0102
:1007E00090930F01A0931001B093110188B18C2553
:1007F00088B9F8948501D8011197C8010297F801CA
:1008000040816C91FC0180810E94F6000D5F1F4FBA
:100810000815190581F778948091020190910301E0
:10082000FD2D28E0F202800D911D1124909303010B
:1008300080930201809100019091010138E0F30260
:1008400080199109112490930101809300018091F6
:1008500000019091010144E164E60E9402032B0132
:100860003C01809102019091030144E164E60E9401
:100870000203FE0131967F010EE110E0A301920117
:100880000E9447014EE150E0BE0167587F4FC7010B
:100890000E94DD02F1E0DF1212C08091020190910E
:1008A00003018236924018F0DD24DA944DCF809116
:1008B0000001909101018F359140B0F345CF8FEF4A
:1008C000D81611F0D12C40CF8091020190910301F4
:1008D0008F35914018F4DD24D39436CF80910001F8
:1008E000909101018236924008F42ECFF4CF5058F7
:1008F000BB27AA270E948F040C94D9050E94CB0520
:1009000038F00E94D20520F039F49F3F19F426F404
:100910000C94C8050EF4E095E7FB0C94C205E92F92
:100920000E94EA0558F3BA17620773078407950710
:1009300020F079F4A6F50C940C060EF4E0950B2E3D
:10094000BA2FA02D0B01B90190010C01CA01A00121
:100950001124FF27591B99F0593F50F4503E68F17C
:100960001A16F040A22F232F342F4427585FF3CFBD
:10097000469537952795A795F0405395C9F77EF48E
:100980001F16BA0B620B730B840BBAF09150A1F0D7
:10099000FF0FBB1F661F771F881FC2F70EC0BA0F5D
:1009A000621F731F841F48F4879577956795B795E5
:1009B000F7959E3F08F0B0CF9395880F08F09927E0
:1009C000EE0F9795879508950E94F8040C94D90529
:1009D0000E94D20558F00E94CB0540F029F45F3FF9
:1009E00029F00C94C20551110C940D060C94C80505
:1009F0000E94EA0568F39923B1F3552391F3951BFF
:100A0000550BBB27AA2762177307840738F09F5F2F
:100A10005F4F220F331F441FAA1FA9F335D00E2E9C
:100A20003AF0E0E832D091505040E695001CCAF709
:100A30002BD0FE2F29D0660F771F881FBB1F2617CC
:100A400037074807AB07B0E809F0BB0B802DBF01A3
:100A5000FF2793585F4F3AF09E3F510578F00C9472
:100A6000C2050C940D065F3FE4F3983ED4F38695DF
:100A700077956795B795F7959F5FC9F7880F911D93
:100A80009695879597F90895E1E0660F771F881F7F
:100A9000BB1F621773078407BA0720F0621B730B32
:100AA000840BBA0BEE1F88F7E09508950E94F205BB
:100AB00088F09F5798F0B92F9927B751B0F0E1F01F
:100AC000660F771F881F991F1AF0BA95C9F714C0CF
:100AD000B13091F00E940C06B1E008950C940C0620
:100AE000672F782F8827B85F39F0B93FCCF3869508
:100AF00077956795B395D9F73EF490958095709565
:100B000061957F4F8F4F9F4F0895E89409C097FBE1
:100B10003EF490958095709561957F4F8F4F9F4FD4
:100B20009923A9F0F92F96E9BB279395F695879518
:100B300077956795B795F111F8CFFAF4BB0F11F4DB
:100B400060FF1BC06F5F7F4F8F4F9F4F16C0882382
:100B500011F096E911C0772321F09EE8872F762FB8
:100B600005C0662371F096E8862F70E060E02AF0F9
:100B70009A95660F771F881FDAF7880F96958795E5
:100B800097F9089597F99F6780E870E060E008950D
:100B90009FEF80EC089500240A9416161706180695
:100BA0000906089500240A94121613061406050671
:100BB0000895092E0394000C11F4882352F0BB0F02
:100BC00040F4BF2B11F460FF04C06F5F7F4F8F4F65
:100BD0009F4F089557FD9058440F551F59F05F3FA0
:100BE00071F04795880F97FB991F61F09F3F79F04F
:100BF00087950895121613061406551FF2CF4695D1
:100C0000F1DF08C0161617061806991FF1CF869552
:100C10007105610508940895E894BB276627772736
:100C2000CB0197F908950E9426060C94D9050E94DD
:100C3000CB0538F00E94D20520F0952311F00C94DA
:100C4000C2050C94C80511240C940D060E94EA05F7
:100C500070F3959FC1F3950F50E0551F629FF0010F
:100C6000729FBB27F00DB11D639FAA27F00DB11D28
:100C7000AA1F649F6627B00DA11D661F829F2227B1
:100C8000B00DA11D621F739FB00DA11D621F839F38
:100C9000A00D611D221F749F3327A00D611D231F0E
:100CA000849F600D211D822F762F6A2F11249F575C
:100CB00050409AF0F1F088234AF0EE0FFF1FBB1F5F
:100CC000661F771F881F91505040A9F79E3F51051E
:100CD00080F00C94C2050C940D065F3FE4F3983E3F
:100CE000D4F3869577956795B795F795E7959F5FC8
:100CF000C1F7FE2B880F911D9695879597F908955A
:100D000097FB072E16F4009407D077FD09D00E94B8
:100D10009A0607FC05D03EF4909581959F4F089563
:100D2000709561957F4F0895EE0FFF1F0590F49128
:100D3000E02D0994AA1BBB1B51E107C0AA1FBB1FD2
:100D4000A617B70710F0A61BB70B881F991F5A9557
:100D5000A9F780959095BC01CD010895F894FFCF37
:0A0D6000E001E001012000000000A6
:00000001FF

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,772 @@
Archive member included to satisfy reference by file (symbol)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3.o)
color_hsv.o (__subsf3)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3x.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3.o) (__addsf3x)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(divsf3.o)
color_hsv.o (__divsf3)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(divsf3x.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(divsf3.o) (__divsf3x)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fixunssfsi.o)
color_hsv.o (__fixunssfsi)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(floatsisf.o)
color_hsv.o (__floatunsisf)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_inf.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3x.o) (__fp_inf)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_nan.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3x.o) (__fp_nan)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_pscA.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3x.o) (__fp_pscA)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_pscB.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3x.o) (__fp_pscB)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_round.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3.o) (__fp_round)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_split3.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3x.o) (__fp_split3)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_zero.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3x.o) (__fp_zero)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(mulsf3.o)
color_hsv.o (__mulsf3)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(mulsf3x.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(mulsf3.o) (__mulsf3x)
/usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_divmodhi4.o)
color_hsv.o (__divmodhi4)
/usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_exit.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o (exit)
/usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_tablejump2.o)
color_hsv.o (__tablejump2__)
/usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_copy_data.o)
pendulum.o (__do_copy_data)
/usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_clear_bss.o)
pendulum.o (__do_clear_bss)
/usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_udivmodhi4.o)
/usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_divmodhi4.o) (__udivmodhi4)
Speichereinrichtung
Name Ursprung Länge Eigenschaften
text 0x0000000000000000 0x0000000000020000 xr
data 0x0000000000800060 0x000000000000ffa0 rw !x
eeprom 0x0000000000810000 0x0000000000010000 rw !x
fuse 0x0000000000820000 0x0000000000000400 rw !x
lock 0x0000000000830000 0x0000000000000400 rw !x
signature 0x0000000000840000 0x0000000000000400 rw !x
user_signatures 0x0000000000850000 0x0000000000000400 rw !x
*default* 0x0000000000000000 0xffffffffffffffff
Linker script and memory map
Address of section .data set to 0x800100
LOAD /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
LOAD pendulum.o
LOAD color_hsv.o
LOAD /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a
START GROUP
LOAD /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a
LOAD /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a
LOAD /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libc.a
LOAD /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libatmega328p.a
END GROUP
.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 0x0000000000000000 0xd60
*(.vectors)
.vectors 0x0000000000000000 0x68 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
0x0000000000000000 __vectors
0x0000000000000000 __vector_default
*(.vectors)
*(.progmem.gcc*)
.progmem.gcc_sw_table
0x0000000000000068 0xe color_hsv.o
0x0000000000000076 . = ALIGN (0x2)
0x0000000000000076 __trampolines_start = .
*(.trampolines)
.trampolines 0x0000000000000076 0x0 linker stubs
*(.trampolines*)
0x0000000000000076 __trampolines_end = .
*(.progmem*)
0x0000000000000076 . = ALIGN (0x2)
*(.jumptables)
*(.jumptables*)
*(.lowtext)
*(.lowtext*)
0x0000000000000076 __ctors_start = .
*(.ctors)
0x0000000000000076 __ctors_end = .
0x0000000000000076 __dtors_start = .
*(.dtors)
0x0000000000000076 __dtors_end = .
SORT(*)(.ctors)
SORT(*)(.dtors)
*(.init0)
.init0 0x0000000000000076 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
0x0000000000000076 __init
*(.init0)
*(.init1)
*(.init1)
*(.init2)
.init2 0x0000000000000076 0xc /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
*(.init2)
*(.init3)
*(.init3)
*(.init4)
.init4 0x0000000000000082 0x16 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_copy_data.o)
0x0000000000000082 __do_copy_data
.init4 0x0000000000000098 0x10 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_clear_bss.o)
0x0000000000000098 __do_clear_bss
*(.init4)
*(.init5)
*(.init5)
*(.init6)
*(.init6)
*(.init7)
*(.init7)
*(.init8)
*(.init8)
*(.init9)
.init9 0x00000000000000a8 0x8 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
*(.init9)
*(.text)
.text 0x00000000000000b0 0x4 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
0x00000000000000b0 __vector_22
0x00000000000000b0 __vector_1
0x00000000000000b0 __vector_24
0x00000000000000b0 __vector_12
0x00000000000000b0 __bad_interrupt
0x00000000000000b0 __vector_6
0x00000000000000b0 __vector_3
0x00000000000000b0 __vector_23
0x00000000000000b0 __vector_25
0x00000000000000b0 __vector_11
0x00000000000000b0 __vector_17
0x00000000000000b0 __vector_19
0x00000000000000b0 __vector_7
0x00000000000000b0 __vector_5
0x00000000000000b0 __vector_4
0x00000000000000b0 __vector_9
0x00000000000000b0 __vector_21
0x00000000000000b0 __vector_15
0x00000000000000b0 __vector_8
0x00000000000000b0 __vector_14
0x00000000000000b0 __vector_10
0x00000000000000b0 __vector_16
0x00000000000000b0 __vector_18
0x00000000000000b0 __vector_20
.text 0x00000000000000b4 0x1da pendulum.o
0x00000000000000b4 __vector_2
0x000000000000016e __vector_13
0x00000000000001b4 writeZero
0x00000000000001d0 writeOne
0x00000000000001ec writeRGB
.text 0x000000000000028e 0x382 color_hsv.o
0x000000000000028e interpolate
0x00000000000003c4 hsv2rgb
0x00000000000005ba hsv2rgbList
0x0000000000000604 init_hsv_t
.text 0x0000000000000610 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3.o)
.text 0x0000000000000610 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3x.o)
.text 0x0000000000000610 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(divsf3.o)
.text 0x0000000000000610 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(divsf3x.o)
.text 0x0000000000000610 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fixunssfsi.o)
.text 0x0000000000000610 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(floatsisf.o)
.text 0x0000000000000610 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_inf.o)
.text 0x0000000000000610 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_nan.o)
.text 0x0000000000000610 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_pscA.o)
.text 0x0000000000000610 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_pscB.o)
.text 0x0000000000000610 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_round.o)
.text 0x0000000000000610 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_split3.o)
.text 0x0000000000000610 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_zero.o)
.text 0x0000000000000610 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(mulsf3.o)
.text 0x0000000000000610 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(mulsf3x.o)
.text 0x0000000000000610 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_divmodhi4.o)
.text 0x0000000000000610 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_exit.o)
.text 0x0000000000000610 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_tablejump2.o)
.text 0x0000000000000610 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_copy_data.o)
.text 0x0000000000000610 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_clear_bss.o)
.text 0x0000000000000610 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_udivmodhi4.o)
0x0000000000000610 . = ALIGN (0x2)
*(.text.*)
.text.startup 0x0000000000000610 0x2de pendulum.o
0x0000000000000610 main
.text.avr-libc.fplib
0x00000000000008ee 0xe /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3.o)
0x00000000000008ee __subsf3
0x00000000000008f0 __addsf3
.text.avr-libc.fplib
0x00000000000008fc 0xcc /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3x.o)
0x000000000000091e __addsf3x
.text.avr-libc.fplib
0x00000000000009c8 0x8 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(divsf3.o)
0x00000000000009c8 __divsf3
.text.avr-libc.fplib
0x00000000000009d0 0xdc /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(divsf3x.o)
0x00000000000009f0 __divsf3x
0x00000000000009f6 __divsf3_pse
.text.avr-libc.fplib
0x0000000000000aac 0x5e /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fixunssfsi.o)
0x0000000000000aac __fixunssfsi
.text.avr-libc.fplib
0x0000000000000b0a 0x7a /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(floatsisf.o)
0x0000000000000b0a __floatunsisf
0x0000000000000b0e __floatsisf
.text.avr-libc.fplib
0x0000000000000b84 0xc /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_inf.o)
0x0000000000000b84 __fp_inf
.text.avr-libc.fplib
0x0000000000000b90 0x6 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_nan.o)
0x0000000000000b90 __fp_nan
.text.avr-libc.fplib
0x0000000000000b96 0xe /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_pscA.o)
0x0000000000000b96 __fp_pscA
.text.avr-libc.fplib
0x0000000000000ba4 0xe /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_pscB.o)
0x0000000000000ba4 __fp_pscB
.text.avr-libc.fplib
0x0000000000000bb2 0x22 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_round.o)
0x0000000000000bb2 __fp_round
.text.avr-libc.fplib
0x0000000000000bd4 0x44 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_split3.o)
0x0000000000000bd4 __fp_split3
0x0000000000000be4 __fp_splitA
.text.avr-libc.fplib
0x0000000000000c18 0xe /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_zero.o)
0x0000000000000c18 __fp_zero
0x0000000000000c1a __fp_szero
.text.avr-libc.fplib
0x0000000000000c26 0x8 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(mulsf3.o)
0x0000000000000c26 __mulsf3
.text.avr-libc.fplib
0x0000000000000c2e 0xd2 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(mulsf3x.o)
0x0000000000000c4c __mulsf3x
0x0000000000000c52 __mulsf3_pse
.text.libgcc.mul
0x0000000000000d00 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_divmodhi4.o)
.text.libgcc.div
0x0000000000000d00 0x28 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_divmodhi4.o)
0x0000000000000d00 __divmodhi4
0x0000000000000d00 _div
.text.libgcc 0x0000000000000d28 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_divmodhi4.o)
.text.libgcc.prologue
0x0000000000000d28 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_divmodhi4.o)
.text.libgcc.builtins
0x0000000000000d28 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_divmodhi4.o)
.text.libgcc.fmul
0x0000000000000d28 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_divmodhi4.o)
.text.libgcc.fixed
0x0000000000000d28 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_divmodhi4.o)
.text.libgcc.mul
0x0000000000000d28 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_exit.o)
.text.libgcc.div
0x0000000000000d28 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_exit.o)
.text.libgcc 0x0000000000000d28 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_exit.o)
.text.libgcc.prologue
0x0000000000000d28 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_exit.o)
.text.libgcc.builtins
0x0000000000000d28 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_exit.o)
.text.libgcc.fmul
0x0000000000000d28 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_exit.o)
.text.libgcc.fixed
0x0000000000000d28 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_exit.o)
.text.libgcc.mul
0x0000000000000d28 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_tablejump2.o)
.text.libgcc.div
0x0000000000000d28 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_tablejump2.o)
.text.libgcc 0x0000000000000d28 0xc /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_tablejump2.o)
0x0000000000000d28 __tablejump2__
.text.libgcc.prologue
0x0000000000000d34 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_tablejump2.o)
.text.libgcc.builtins
0x0000000000000d34 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_tablejump2.o)
.text.libgcc.fmul
0x0000000000000d34 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_tablejump2.o)
.text.libgcc.fixed
0x0000000000000d34 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_tablejump2.o)
.text.libgcc.mul
0x0000000000000d34 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_copy_data.o)
.text.libgcc.div
0x0000000000000d34 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_copy_data.o)
.text.libgcc 0x0000000000000d34 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_copy_data.o)
.text.libgcc.prologue
0x0000000000000d34 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_copy_data.o)
.text.libgcc.builtins
0x0000000000000d34 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_copy_data.o)
.text.libgcc.fmul
0x0000000000000d34 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_copy_data.o)
.text.libgcc.fixed
0x0000000000000d34 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_copy_data.o)
.text.libgcc.mul
0x0000000000000d34 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_clear_bss.o)
.text.libgcc.div
0x0000000000000d34 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_clear_bss.o)
.text.libgcc 0x0000000000000d34 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_clear_bss.o)
.text.libgcc.prologue
0x0000000000000d34 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_clear_bss.o)
.text.libgcc.builtins
0x0000000000000d34 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_clear_bss.o)
.text.libgcc.fmul
0x0000000000000d34 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_clear_bss.o)
.text.libgcc.fixed
0x0000000000000d34 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_clear_bss.o)
.text.libgcc.mul
0x0000000000000d34 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_udivmodhi4.o)
.text.libgcc.div
0x0000000000000d34 0x28 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_udivmodhi4.o)
0x0000000000000d34 __udivmodhi4
.text.libgcc 0x0000000000000d5c 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_udivmodhi4.o)
.text.libgcc.prologue
0x0000000000000d5c 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_udivmodhi4.o)
.text.libgcc.builtins
0x0000000000000d5c 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_udivmodhi4.o)
.text.libgcc.fmul
0x0000000000000d5c 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_udivmodhi4.o)
.text.libgcc.fixed
0x0000000000000d5c 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_udivmodhi4.o)
0x0000000000000d5c . = ALIGN (0x2)
*(.fini9)
.fini9 0x0000000000000d5c 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_exit.o)
0x0000000000000d5c exit
0x0000000000000d5c _exit
*(.fini9)
*(.fini8)
*(.fini8)
*(.fini7)
*(.fini7)
*(.fini6)
*(.fini6)
*(.fini5)
*(.fini5)
*(.fini4)
*(.fini4)
*(.fini3)
*(.fini3)
*(.fini2)
*(.fini2)
*(.fini1)
*(.fini1)
*(.fini0)
.fini0 0x0000000000000d5c 0x4 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_exit.o)
*(.fini0)
0x0000000000000d60 _etext = .
.data 0x0000000000800100 0xa load address 0x0000000000000d60
0x0000000000800100 PROVIDE (__data_start, .)
*(.data)
.data 0x0000000000800100 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
.data 0x0000000000800100 0x5 pendulum.o
0x0000000000800100 max
0x0000000000800102 min
0x0000000000800104 status
.data 0x0000000000800105 0x0 color_hsv.o
.data 0x0000000000800105 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3.o)
.data 0x0000000000800105 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3x.o)
.data 0x0000000000800105 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(divsf3.o)
.data 0x0000000000800105 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(divsf3x.o)
.data 0x0000000000800105 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fixunssfsi.o)
.data 0x0000000000800105 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(floatsisf.o)
.data 0x0000000000800105 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_inf.o)
.data 0x0000000000800105 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_nan.o)
.data 0x0000000000800105 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_pscA.o)
.data 0x0000000000800105 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_pscB.o)
.data 0x0000000000800105 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_round.o)
.data 0x0000000000800105 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_split3.o)
.data 0x0000000000800105 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_zero.o)
.data 0x0000000000800105 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(mulsf3.o)
.data 0x0000000000800105 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(mulsf3x.o)
.data 0x0000000000800105 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_divmodhi4.o)
.data 0x0000000000800105 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_exit.o)
.data 0x0000000000800105 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_tablejump2.o)
.data 0x0000000000800105 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_copy_data.o)
.data 0x0000000000800105 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_clear_bss.o)
.data 0x0000000000800105 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_udivmodhi4.o)
*(.data*)
*(.rodata)
.rodata 0x0000000000800105 0x4 pendulum.o
0x0000000000800105 colorSteps
*(.rodata*)
*(.gnu.linkonce.d*)
0x000000000080010a . = ALIGN (0x2)
*fill* 0x0000000000800109 0x1
0x000000000080010a _edata = .
0x000000000080010a PROVIDE (__data_end, .)
.bss 0x000000000080010a 0x10
0x000000000080010a PROVIDE (__bss_start, .)
*(.bss)
.bss 0x000000000080010a 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
.bss 0x000000000080010a 0x10 pendulum.o
0x000000000080010a cooldown
0x000000000080010e oldTime
0x0000000000800112 T_half
0x0000000000800116 time
.bss 0x000000000080011a 0x0 color_hsv.o
.bss 0x000000000080011a 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3.o)
.bss 0x000000000080011a 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3x.o)
.bss 0x000000000080011a 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(divsf3.o)
.bss 0x000000000080011a 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(divsf3x.o)
.bss 0x000000000080011a 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fixunssfsi.o)
.bss 0x000000000080011a 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(floatsisf.o)
.bss 0x000000000080011a 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_inf.o)
.bss 0x000000000080011a 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_nan.o)
.bss 0x000000000080011a 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_pscA.o)
.bss 0x000000000080011a 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_pscB.o)
.bss 0x000000000080011a 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_round.o)
.bss 0x000000000080011a 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_split3.o)
.bss 0x000000000080011a 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_zero.o)
.bss 0x000000000080011a 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(mulsf3.o)
.bss 0x000000000080011a 0x0 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(mulsf3x.o)
.bss 0x000000000080011a 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_divmodhi4.o)
.bss 0x000000000080011a 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_exit.o)
.bss 0x000000000080011a 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_tablejump2.o)
.bss 0x000000000080011a 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_copy_data.o)
.bss 0x000000000080011a 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_clear_bss.o)
.bss 0x000000000080011a 0x0 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_udivmodhi4.o)
*(.bss*)
*(COMMON)
0x000000000080011a PROVIDE (__bss_end, .)
0x0000000000000d60 __data_load_start = LOADADDR (.data)
0x0000000000000d6a __data_load_end = (__data_load_start + SIZEOF (.data))
.noinit 0x000000000080011a 0x0
0x000000000080011a PROVIDE (__noinit_start, .)
*(.noinit*)
0x000000000080011a PROVIDE (__noinit_end, .)
0x000000000080011a _end = .
0x000000000080011a PROVIDE (__heap_start, .)
.eeprom 0x0000000000810000 0x0
*(.eeprom*)
0x0000000000810000 __eeprom_end = .
.fuse
*(.fuse)
*(.lfuse)
*(.hfuse)
*(.efuse)
.lock
*(.lock*)
.signature
*(.signature*)
.user_signatures
*(.user_signatures*)
.stab 0x0000000000000000 0x1110
*(.stab)
.stab 0x0000000000000000 0xab0 pendulum.o
.stab 0x0000000000000ab0 0x660 color_hsv.o
0x834 (size before relaxing)
.stabstr 0x0000000000000000 0xf67
*(.stabstr)
.stabstr 0x0000000000000000 0xf67 pendulum.o
.stab.excl
*(.stab.excl)
.stab.exclstr
*(.stab.exclstr)
.stab.index
*(.stab.index)
.stab.indexstr
*(.stab.indexstr)
.comment 0x0000000000000000 0x11
*(.comment)
.comment 0x0000000000000000 0x11 pendulum.o
0x12 (size before relaxing)
.comment 0x0000000000000011 0x12 color_hsv.o
.note.gnu.avr.deviceinfo
0x0000000000000000 0x40
.note.gnu.avr.deviceinfo
0x0000000000000000 0x40 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
.note.gnu.build-id
*(.note.gnu.build-id)
.debug
*(.debug)
.line
*(.line)
.debug_srcinfo
*(.debug_srcinfo)
.debug_sfnames
*(.debug_sfnames)
.debug_aranges
*(.debug_aranges)
.debug_pubnames
*(.debug_pubnames)
.debug_info
*(.debug_info .gnu.linkonce.wi.*)
.debug_abbrev
*(.debug_abbrev)
.debug_line
*(.debug_line .debug_line.* .debug_line_end)
.debug_frame
*(.debug_frame)
.debug_str
*(.debug_str)
.debug_loc
*(.debug_loc)
.debug_macinfo
*(.debug_macinfo)
.debug_weaknames
*(.debug_weaknames)
.debug_funcnames
*(.debug_funcnames)
.debug_typenames
*(.debug_typenames)
.debug_varnames
*(.debug_varnames)
.debug_pubtypes
*(.debug_pubtypes)
.debug_ranges
*(.debug_ranges)
.debug_macro
*(.debug_macro)
OUTPUT(pendulum.elf elf32-avr)
LOAD linker stubs
Kreuzreferenz-Tabelle
Symbol Datei
T_half pendulum.o
__addsf3 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3.o)
__addsf3x /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3x.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3.o)
__bad_interrupt /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__bss_end /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_clear_bss.o)
__bss_start /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_clear_bss.o)
__data_end /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_copy_data.o)
__data_load_start /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_copy_data.o)
__data_start /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_copy_data.o)
__divmodhi4 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_divmodhi4.o)
color_hsv.o
__divsf3 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(divsf3.o)
color_hsv.o
__divsf3_pse /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(divsf3x.o)
__divsf3x /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(divsf3x.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(divsf3.o)
__do_clear_bss /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_clear_bss.o)
pendulum.o
__do_copy_data /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_copy_data.o)
pendulum.o
__fixunssfsi /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fixunssfsi.o)
color_hsv.o
__floatsisf /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(floatsisf.o)
color_hsv.o
__floatunsisf /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(floatsisf.o)
color_hsv.o
__fp_inf /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_inf.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(mulsf3x.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(divsf3x.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3x.o)
__fp_nan /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_nan.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(mulsf3x.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(divsf3x.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3x.o)
__fp_pscA /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_pscA.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(mulsf3x.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(divsf3x.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3x.o)
__fp_pscB /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_pscB.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(mulsf3x.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(divsf3x.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3x.o)
__fp_round /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_round.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(mulsf3.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(divsf3.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3.o)
__fp_split3 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_split3.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(mulsf3x.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(divsf3x.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3x.o)
__fp_splitA /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_split3.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fixunssfsi.o)
__fp_szero /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_zero.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(mulsf3x.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(divsf3x.o)
__fp_zero /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fp_zero.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(fixunssfsi.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3x.o)
__heap_end /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__init /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__mulsf3 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(mulsf3.o)
color_hsv.o
__mulsf3_pse /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(mulsf3x.o)
__mulsf3x /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(mulsf3x.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(mulsf3.o)
__stack /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__subsf3 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/libm.a(addsf3.o)
color_hsv.o
__tablejump2__ /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_tablejump2.o)
color_hsv.o
__udivmodhi4 /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_udivmodhi4.o)
/usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_divmodhi4.o)
__vector_1 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vector_10 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vector_11 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vector_12 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vector_13 pendulum.o
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vector_14 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vector_15 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vector_16 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vector_17 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vector_18 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vector_19 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vector_2 pendulum.o
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vector_20 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vector_21 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vector_22 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vector_23 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vector_24 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vector_25 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vector_3 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vector_4 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vector_5 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vector_6 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vector_7 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vector_8 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vector_9 /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vector_default /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
__vectors /usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
_div /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_divmodhi4.o)
_exit /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_exit.o)
colorSteps pendulum.o
cooldown pendulum.o
exit /usr/lib/gcc/avr/4.9.2/avr5/libgcc.a(_exit.o)
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
hsv2rgb color_hsv.o
hsv2rgbList color_hsv.o
pendulum.o
init_hsv_t color_hsv.o
pendulum.o
interpolate color_hsv.o
pendulum.o
main pendulum.o
/usr/lib/gcc/avr/4.9.2/../../../avr/lib/avr5/crtatmega328p.o
max pendulum.o
min pendulum.o
oldTime pendulum.o
status pendulum.o
time pendulum.o
writeOne pendulum.o
writeRGB pendulum.o
writeZero pendulum.o

Binary file not shown.

View File

@ -0,0 +1,109 @@
00000000 W __heap_end
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 W __vector_default
00000000 T __vectors
00000001 a __zero_reg__
00000001 a __zero_reg__
0000003d a __SP_L__
0000003d a __SP_L__
0000003e a __SP_H__
0000003e a __SP_H__
0000003f a __SREG__
0000003f a __SREG__
00000076 T __ctors_end
00000076 T __ctors_start
00000076 T __dtors_end
00000076 T __dtors_start
00000076 W __init
00000076 T __trampolines_end
00000076 T __trampolines_start
00000082 T __do_copy_data
00000098 T __do_clear_bss
000000a0 t .do_clear_bss_loop
000000a2 t .do_clear_bss_start
000000b0 T __bad_interrupt
000000b0 W __vector_1
000000b0 W __vector_10
000000b0 W __vector_11
000000b0 W __vector_12
000000b0 W __vector_14
000000b0 W __vector_15
000000b0 W __vector_16
000000b0 W __vector_17
000000b0 W __vector_18
000000b0 W __vector_19
000000b0 W __vector_20
000000b0 W __vector_21
000000b0 W __vector_22
000000b0 W __vector_23
000000b0 W __vector_24
000000b0 W __vector_25
000000b0 W __vector_3
000000b0 W __vector_4
000000b0 W __vector_5
000000b0 W __vector_6
000000b0 W __vector_7
000000b0 W __vector_8
000000b0 W __vector_9
000000b4 T __vector_2
00000146 T __vector_13
0000018c T writeZero
000001a8 T writeOne
000001c4 T writeRGB
00000266 T interpolate
0000039c T hsv2rgb
00000592 T hsv2rgbList
000005dc T init_hsv_t
000005e8 T main
000008ac T __subsf3
000008ae T __addsf3
000008dc T __addsf3x
000008ff W __stack
00000986 T __divsf3
000009ae T __divsf3x
000009b4 T __divsf3_pse
00000a6a T __fixunssfsi
00000ac8 T __floatunsisf
00000acc T __floatsisf
00000b42 T __fp_inf
00000b4e T __fp_nan
00000b54 T __fp_pscA
00000b62 T __fp_pscB
00000b70 T __fp_round
00000b92 T __fp_split3
00000ba2 T __fp_splitA
00000bd6 T __fp_zero
00000bd8 T __fp_szero
00000be4 T __mulsf3
00000c0a T __mulsf3x
00000c10 T __mulsf3_pse
00000cbe T _div
00000cbe T __divmodhi4
00000cd6 t __divmodhi4_neg1
00000cde t __divmodhi4_neg2
00000ce4 t __divmodhi4_exit
00000ce6 T __tablejump2__
00000cf2 T __udivmodhi4
00000cfa t __udivmodhi4_loop
00000d08 t __udivmodhi4_ep
00000d1a W exit
00000d1a T _exit
00000d1c t __stop_program
00000d1e A __data_load_start
00000d1e T _etext
00000d28 A __data_load_end
00800100 D __data_start
00800100 D max
00800102 D min
00800104 D status
00800105 D colorSteps
0080010a B __bss_start
0080010a D __data_end
0080010a D _edata
0080010a B oldTime
0080010e B T_half
00800112 B time
00800116 B __bss_end
00800116 N _end
00810000 N __eeprom_end