Skip to content

Instantly share code, notes, and snippets.

@abudden
Last active March 1, 2020 11:22
Show Gist options
  • Save abudden/a2edfe2210dade1b032fc6865fed8550 to your computer and use it in GitHub Desktop.
Save abudden/a2edfe2210dade1b032fc6865fed8550 to your computer and use it in GitHub Desktop.
gcc-avr compile issue
#!/bin/bash
export PATH=/opt/AVR/avr-gcc-linux/bin:$PATH
export DIRAVR=/opt/AVR
make hex
mainfile_build:
build: .
volumes:
- .:/workdir
FROM ubuntu:18.04
RUN dpkg-divert --local --rename --add /sbin/initctl
RUN ln -sf /bin/true /sbin/initctl
ENV DEBIAN_FRONTEND noninteractive
RUN dpkg --add-architecture i386 && \
apt-get update && \
apt-get -y install \
make \
curl tree \
locales \
python3 \
git \
vim-nox lrzsz \
wget \
gcc \
g++ \
bzip2 \
mingw-w64 \
build-essential \
autoconf automake
# clean cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
RUN locale-gen en_GB.UTF-8
RUN userdel -r ubuntu || true
RUN groupadd -g 1000 al
RUN useradd -s /bin/bash -u 1000 -g 1000 -m al
RUN mkdir /avrinstall
RUN mkdir /opt/AVR
RUN chown -R al /opt/AVR /avrinstall
USER al
RUN git clone https://github.com/stevenj/avr-gcc-build-script /avrinstall
WORKDIR /avrinstall
RUN sed -i 's@ftp://@http://@g' build.sh
RUN bash build.sh
WORKDIR /workdir
CMD ["./build.sh"]
#ifndef GLOBAL_H
#define GLOBAL_H
#ifndef F_CPU
#define F_CPU 20000000UL // or whatever may be your frequency
#endif
#endif
#include "global.h"
#include <avr/io.h>
#include <util/delay.h> // for _delay_ms()
#include "pins.h"
/* If this function is commented out, the program works.
* If this function is not commented out, the program fails.
*/
//#if 0
void adadsdasd(void)
{
}
//#endif
int main(void)
{
OUTPUT_PORT.DIRSET = OUTPUT_PIN;
INPUT_PORT.DIRCLR = INPUT_PIN;
while (1) {
if (IS_HIGH(INPUT)) {
SET_HIGH(OUTPUT);
}
else {
SET_LOW(OUTPUT);
}
_delay_ms(100); // wait 100 milliseconds
}
}
# MCU name
MCU = avrxmega3
INCMCU = __AVR_ATtiny214__
# Main Oscillator Frequency
# This is only used to define F_OSC in all assembler and c-sources.
F_CPU = 20000000UL
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
# Target file name (without extension).
TARGET = mainfile
# List C source files here. (C dependencies are automatically generated.)
#SRC = $(TARGET).c
SRC:= $(notdir $(wildcard *.c))
# 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 stabs [default], or dwarf-2.
# AVR (extended) COFF requires stabs, plus an avr-objcopy run.
#DEBUG = stabs
DEBUG = dwarf-2
# List any extra directories to look for include files here.
# Each directory must be seperated by a space.
EXTRAINCDIRS = /opt/AVR/avr-libc3/avr/include
# 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=gnu99
# Place -D or -U options here
CDEFS = -D$(INCMCU)
# Place -I options here
CINCS =
# Compiler flags.
# -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) $(CINCS)
CFLAGS += -O$(OPT)
CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
CFLAGS += -Wall -Wstrict-prototypes
CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
CFLAGS += $(CSTANDARD)
CFLAGS += -DF_OSC=$(F_OSC)
# Assembler flags.
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: 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]
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
ASFLAGS += -DF_OSC=$(F_OSC)
#Additional libraries.
# 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
PRINTF_LIB =
# 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
SCANF_LIB =
MATH_LIB = -lm
# 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,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
EXTMEMOPTS =
# Linker flags.
# -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 += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
LDFLAGS += -L/opt/AVR/avr-libc3/avr/lib/$(MCU)
# ---------------------------------------------------------------------------
# Define directories, if needed.
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib
# Define programs and commands.
SHELL = sh
CC = avr-gcc
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
NM = avr-nm
AVRDUDE = avrdude
REMOVE = rm -f
COPY = cp
# 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:
MSG_ASSEMBLING = Assembling:
MSG_CLEANING = Cleaning project:
# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
# Compiler flags to generate dependency files.
### GENDEPFLAGS = -Wp,-M,-MP,-MT,$(*F).o,-MF,.dep/$(@F).d
GENDEPFLAGS = -MD -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_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
# Default target.
all: begin gccversion sizebefore build sizeafter finished end
build: elf hex eep lss sym
elf: $(TARGET).elf
hex: $(TARGET).hex
eep: $(TARGET).eep
lss: $(TARGET).lss
sym: $(TARGET).sym
# 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)
finished:
@echo $(MSG_ERRORS_NONE)
end:
@echo $(MSG_END)
@echo
# Display size of file.
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) -A $(TARGET).elf
sizebefore:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi
sizeafter:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi
# Display compiler version information.
gccversion :
@$(CC) --version
# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--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 $< $@
%.eep: %.elf
@echo
@echo $(MSG_EEPROM) $@
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
# Create extended listing file from ELF output file.
%.lss: %.elf
@echo
@echo $(MSG_EXTENDED_LISTING) $@
$(OBJDUMP) -h -S $< > $@
# Create a symbol table from ELF output file.
%.sym: %.elf
@echo
@echo $(MSG_SYMBOL_TABLE) $@
$(NM) -n $< > $@
# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
@echo
@echo $(MSG_LINKING) $@
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
# Compile: create object files from C source files.
%.o : %.c
@echo
@echo $(MSG_COMPILING) $<
$(CC) -c $(ALL_CFLAGS) $< -o $@
# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@
# Assemble: create object files from assembler source files.
%.o : %.S
@echo
@echo $(MSG_ASSEMBLING) $<
$(CC) -c $(ALL_ASFLAGS) $< -o $@
# Target: clean project.
clean: begin clean_list finished end
clean_list :
@echo
@echo $(MSG_CLEANING)
$(REMOVE) $(TARGET).hex
$(REMOVE) $(TARGET).eep
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).cof
$(REMOVE) $(TARGET).elf
$(REMOVE) $(TARGET).map
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).a90
$(REMOVE) $(TARGET).sym
$(REMOVE) $(TARGET).lnk
$(REMOVE) $(TARGET).lss
$(REMOVE) $(OBJ)
$(REMOVE) $(LST)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)
$(REMOVE) .dep/*
# 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
#ifndef PINS_H
#define PINS_H
#define OUTPUT_PORT PORTB
#define OUTPUT_PIN PIN1_bm
#define INPUT_PORT PORTA
#define INPUT_PIN PIN2_bm
#define IS_HIGH(name) (name##_PORT.IN & name##_PIN)
#define SET_HIGH(name) do { name##_PORT.OUTSET = name##_PIN ; } while(0)
#define SET_LOW(name) do { name##_PORT.OUTCLR = name##_PIN ; } while(0)
#endif
@abudden
Copy link
Author

abudden commented Mar 1, 2020

Listing files (both compilation with the function and without):

With function excluded (working):

   1               		.file	"mainfile.c"
   2               	__SP_H__ = 0x3e
   3               	__SP_L__ = 0x3d
   4               	__SREG__ = 0x3f
   5               	__CCP__ = 0x34
   6               	__tmp_reg__ = 0
   7               	__zero_reg__ = 1
   8               		.text
   9               	.Ltext0:
  10               		.cfi_sections	.debug_frame
  11               		.section	.text.startup,"ax",@progbits
  12               	.global	main
  14               	main:
  15               	.LFB6:
  16               		.file 1 "mainfile.c"
   1:mainfile.c    **** #include "global.h"
   2:mainfile.c    **** 
   3:mainfile.c    **** #include <avr/io.h>
   4:mainfile.c    **** #include <util/delay.h>                // for _delay_ms()
   5:mainfile.c    **** 
   6:mainfile.c    **** #include "pins.h"
   7:mainfile.c    **** 
   8:mainfile.c    **** /* If this function is commented out, the program works.
   9:mainfile.c    ****  * If this function is not commented out, the program fails.
  10:mainfile.c    ****  */
  11:mainfile.c    **** #if 0
  12:mainfile.c    **** void adadsdasd(void)
  13:mainfile.c    **** {
  14:mainfile.c    **** }
  15:mainfile.c    **** #endif
  16:mainfile.c    **** 
  17:mainfile.c    **** int main(void)
  18:mainfile.c    **** {
  17               		.loc 1 18 1 view -0
  18               		.cfi_startproc
  19               	/* prologue: function */
  20               	/* frame size = 0 */
  21               	/* stack size = 0 */
  22               	.L__stack_usage = 0
  19:mainfile.c    **** 	OUTPUT_PORT.DIRSET = OUTPUT_PIN;
  23               		.loc 1 19 2 view .LVU1
  24               		.loc 1 19 21 is_stmt 0 view .LVU2
  25 0000 82E0      		ldi r24,lo8(2)
  26 0002 8093 2104 		sts 1057,r24
  20:mainfile.c    **** 	INPUT_PORT.DIRCLR = INPUT_PIN;
  27               		.loc 1 20 2 is_stmt 1 view .LVU3
  28               		.loc 1 20 20 is_stmt 0 view .LVU4
  29 0006 84E0      		ldi r24,lo8(4)
  30 0008 8093 0204 		sts 1026,r24
  21:mainfile.c    **** 
  22:mainfile.c    **** 	while (1) {
  23:mainfile.c    **** 		if (IS_HIGH(INPUT)) {
  24:mainfile.c    **** 			SET_HIGH(OUTPUT);
  25:mainfile.c    **** 		}
  26:mainfile.c    **** 		else {
  27:mainfile.c    **** 			SET_LOW(OUTPUT);
  31               		.loc 1 27 4 view .LVU5
  32 000c 82E0      		ldi r24,lo8(2)
  33               	.L4:
  22:mainfile.c    **** 		if (IS_HIGH(INPUT)) {
  34               		.loc 1 22 2 is_stmt 1 view .LVU6
  23:mainfile.c    **** 			SET_HIGH(OUTPUT);
  35               		.loc 1 23 3 view .LVU7
  23:mainfile.c    **** 			SET_HIGH(OUTPUT);
  36               		.loc 1 23 7 is_stmt 0 view .LVU8
  37 000e 9091 0804 		lds r25,1032
  23:mainfile.c    **** 			SET_HIGH(OUTPUT);
  38               		.loc 1 23 6 view .LVU9
  39 0012 92FF      		sbrs r25,2
  40 0014 00C0      		rjmp .L2
  24:mainfile.c    **** 		}
  41               		.loc 1 24 4 is_stmt 1 view .LVU10
  24:mainfile.c    **** 		}
  42               		.loc 1 24 4 view .LVU11
  43 0016 8093 2504 		sts 1061,r24
  44               	.L3:
  28:mainfile.c    **** 		}
  29:mainfile.c    **** 
  30:mainfile.c    **** 		_delay_ms(100);                // wait 500 milliseconds
  45               		.loc 1 30 3 view .LVU12
  46               	.LVL0:
  47               	.LBB4:
  48               	.LBI4:
  49               		.file 2 "/opt/AVR/avr-libc3/avr/include/util/delay.h"
   1:/opt/AVR/avr-libc3/avr/include/util/delay.h **** /* Copyright (c) 2002, Marek Michalkiewicz
   2:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    Copyright (c) 2004,2005,2007 Joerg Wunsch
   3:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    Copyright (c) 2007  Florin-Viorel Petrov
   4:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    All rights reserved.
   5:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
   6:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    Redistribution and use in source and binary forms, with or without
   7:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    modification, are permitted provided that the following conditions are met:
   8:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
   9:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    * Redistributions of source code must retain the above copyright
  10:/opt/AVR/avr-libc3/avr/include/util/delay.h ****      notice, this list of conditions and the following disclaimer.
  11:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  12:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    * Redistributions in binary form must reproduce the above copyright
  13:/opt/AVR/avr-libc3/avr/include/util/delay.h ****      notice, this list of conditions and the following disclaimer in
  14:/opt/AVR/avr-libc3/avr/include/util/delay.h ****      the documentation and/or other materials provided with the
  15:/opt/AVR/avr-libc3/avr/include/util/delay.h ****      distribution.
  16:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  17:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    * Neither the name of the copyright holders nor the names of
  18:/opt/AVR/avr-libc3/avr/include/util/delay.h ****      contributors may be used to endorse or promote products derived
  19:/opt/AVR/avr-libc3/avr/include/util/delay.h ****      from this software without specific prior written permission.
  20:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  21:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  22:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  25:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  26:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  27:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  28:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  29:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  30:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  31:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   POSSIBILITY OF SUCH DAMAGE. */
  32:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  33:/opt/AVR/avr-libc3/avr/include/util/delay.h **** /* $Id$ */
  34:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  35:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #ifndef _UTIL_DELAY_H_
  36:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #define _UTIL_DELAY_H_ 1
  37:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  38:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #ifndef __DOXYGEN__
  39:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #  ifndef __HAS_DELAY_CYCLES
  40:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #    define __HAS_DELAY_CYCLES 1
  41:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #  endif
  42:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #endif  /* __DOXYGEN__ */
  43:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  44:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #include <inttypes.h>
  45:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #include <util/delay_basic.h>
  46:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #include <math.h>
  47:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  48:/opt/AVR/avr-libc3/avr/include/util/delay.h **** /** \file */
  49:/opt/AVR/avr-libc3/avr/include/util/delay.h **** /** \defgroup util_delay <util/delay.h>: Convenience functions for busy-wait delay loops
  50:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     \code
  51:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     #define F_CPU 1000000UL  // 1 MHz
  52:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     //#define F_CPU 14.7456E6
  53:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     #include <util/delay.h>
  54:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     \endcode
  55:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  56:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     \note As an alternative method, it is possible to pass the
  57:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     F_CPU macro down to the compiler from the Makefile.
  58:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     Obviously, in that case, no \c \#define statement should be
  59:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     used.
  60:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  61:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     The functions in this header file are wrappers around the basic
  62:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     busy-wait functions from <util/delay_basic.h>.  They are meant as
  63:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     convenience functions where actual time values can be specified
  64:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     rather than a number of cycles to wait for.  The idea behind is
  65:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     that compile-time constant expressions will be eliminated by
  66:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     compiler optimization so floating-point expressions can be used
  67:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     to calculate the number of delay cycles needed based on the CPU
  68:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     frequency passed by the macro F_CPU.
  69:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  70:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     \note In order for these functions to work as intended, compiler
  71:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     optimizations <em>must</em> be enabled, and the delay time
  72:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     <em>must</em> be an expression that is a known constant at
  73:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     compile-time.  If these requirements are not met, the resulting
  74:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     delay will be much longer (and basically unpredictable), and
  75:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     applications that otherwise do not use floating-point calculations
  76:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     will experience severe code bloat by the floating-point library
  77:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     routines linked into the application.
  78:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  79:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     The functions available allow the specification of microsecond, and
  80:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     millisecond delays directly, using the application-supplied macro
  81:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     F_CPU as the CPU clock frequency (in Hertz).
  82:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  83:/opt/AVR/avr-libc3/avr/include/util/delay.h **** */
  84:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  85:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #if !defined(__DOXYGEN__)
  86:/opt/AVR/avr-libc3/avr/include/util/delay.h **** static __inline__ void _delay_us(double __us) __attribute__((__always_inline__));
  87:/opt/AVR/avr-libc3/avr/include/util/delay.h **** static __inline__ void _delay_ms(double __ms) __attribute__((__always_inline__));
  88:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #endif
  89:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  90:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #ifndef F_CPU
  91:/opt/AVR/avr-libc3/avr/include/util/delay.h **** /* prevent compiler error by supplying a default */
  92:/opt/AVR/avr-libc3/avr/include/util/delay.h **** # warning "F_CPU not defined for <util/delay.h>"
  93:/opt/AVR/avr-libc3/avr/include/util/delay.h **** /** \ingroup util_delay
  94:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     \def F_CPU
  95:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     \brief CPU frequency in Hz
  96:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  97:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     The macro F_CPU specifies the CPU frequency to be considered by
  98:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     the delay macros.  This macro is normally supplied by the
  99:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     environment (e.g. from within a project header, or the project's
 100:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     Makefile).  The value 1 MHz here is only provided as a "vanilla"
 101:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     fallback if no such user-provided definition could be found.
 102:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 103:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     In terms of the delay functions, the CPU frequency can be given as
 104:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     a floating-point constant (e.g. 3.6864E6 for 3.6864 MHz).
 105:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     However, the macros in <util/setbaud.h> require it to be an
 106:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     integer value.
 107:/opt/AVR/avr-libc3/avr/include/util/delay.h ****  */
 108:/opt/AVR/avr-libc3/avr/include/util/delay.h **** # define F_CPU 1000000UL
 109:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #endif
 110:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 111:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #ifndef __OPTIMIZE__
 112:/opt/AVR/avr-libc3/avr/include/util/delay.h **** # warning "Compiler optimizations disabled; functions from <util/delay.h> won't work as designed"
 113:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #endif
 114:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 115:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #if __HAS_DELAY_CYCLES && defined(__OPTIMIZE__) && \
 116:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   !defined(__DELAY_BACKWARD_COMPATIBLE__) &&	   \
 117:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   __STDC_HOSTED__
 118:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #  include <math.h>
 119:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #endif
 120:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 121:/opt/AVR/avr-libc3/avr/include/util/delay.h **** /**
 122:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    \ingroup util_delay
 123:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 124:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    Perform a delay of \c __ms milliseconds, using _delay_loop_2().
 125:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 126:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    The macro F_CPU is supposed to be defined to a
 127:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    constant defining the CPU clock frequency (in Hertz).
 128:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 129:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    The maximal possible delay is 262.14 ms / F_CPU in MHz.
 130:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 131:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    When the user request delay which exceed the maximum possible one,
 132:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    _delay_ms() provides a decreased resolution functionality. In this
 133:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    mode _delay_ms() will work with a resolution of 1/10 ms, providing
 134:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    delays up to 6.5535 seconds (independent from CPU frequency).  The
 135:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    user will not be informed about decreased resolution.
 136:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 137:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    If the avr-gcc toolchain has __builtin_avr_delay_cycles()
 138:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    support, maximal possible delay is 4294967.295 ms/ F_CPU in MHz. For
 139:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    values greater than the maximal possible delay, overflows results in
 140:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    no delay i.e., 0ms.
 141:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 142:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    Conversion of \c __ms into clock cycles may not always result in
 143:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    integer.  By default, the clock cycles rounded up to next
 144:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    integer. This ensures that the user gets at least \c __ms
 145:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    microseconds of delay.
 146:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 147:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    Alternatively, by defining the macro \c __DELAY_ROUND_DOWN__, or
 148:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    \c __DELAY_ROUND_CLOSEST__, before including this header file, the
 149:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    algorithm can be made to round down, or round to closest integer,
 150:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    respectively.
 151:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 152:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    \note
 153:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 154:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    The implementation of _delay_ms() based on
 155:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    __builtin_avr_delay_cycles() is not backward compatible with older
 156:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    implementations.  In order to get functionality backward compatible
 157:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    with previous versions, the macro \c "__DELAY_BACKWARD_COMPATIBLE__"
 158:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    must be defined before including this header file. Also, the
 159:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    backward compatible algorithm will be chosen if the code is
 160:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    compiled in a <em>freestanding environment</em> (GCC option
 161:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    \c -ffreestanding), as the math functions required for rounding are
 162:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    not available to the compiler then.
 163:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 164:/opt/AVR/avr-libc3/avr/include/util/delay.h ****  */
 165:/opt/AVR/avr-libc3/avr/include/util/delay.h **** void
 166:/opt/AVR/avr-libc3/avr/include/util/delay.h **** _delay_ms(double __ms)
  50               		.loc 2 166 1 view .LVU13
  51               	.LBB5:
 167:/opt/AVR/avr-libc3/avr/include/util/delay.h **** {
 168:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	double __tmp ;
  52               		.loc 2 168 2 view .LVU14
 169:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #if __HAS_DELAY_CYCLES && defined(__OPTIMIZE__) && \
 170:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   !defined(__DELAY_BACKWARD_COMPATIBLE__) &&	   \
 171:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   __STDC_HOSTED__
 172:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	uint32_t __ticks_dc;
  53               		.loc 2 172 2 view .LVU15
 173:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	extern void __builtin_avr_delay_cycles(unsigned long);
  54               		.loc 2 173 2 view .LVU16
 174:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	__tmp = ((F_CPU) / 1e3) * __ms;
  55               		.loc 2 174 2 view .LVU17
 175:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 176:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	#if defined(__DELAY_ROUND_DOWN__)
 177:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 		__ticks_dc = (uint32_t)fabs(__tmp);
 178:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 179:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	#elif defined(__DELAY_ROUND_CLOSEST__)
 180:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 		__ticks_dc = (uint32_t)(fabs(__tmp)+0.5);
 181:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 182:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	#else
 183:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 		//round up by default
 184:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 		__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
  56               		.loc 2 184 3 view .LVU18
 185:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	#endif
 186:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 187:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	__builtin_avr_delay_cycles(__ticks_dc);
  57               		.loc 2 187 2 view .LVU19
  58 001a 2FE7      		ldi r18,lo8(399999)
  59 001c 3AE1      		ldi r19,hi8(399999)
  60 001e 96E0      		ldi r25,hlo8(399999)
  61 0020 2150      	1:	subi r18,1
  62 0022 3040      		sbci r19,0
  63 0024 9040      		sbci r25,0
  64 0026 01F4      		brne 1b
  65 0028 00C0      		rjmp .
  66 002a 0000      		nop
 188:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 189:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #else
 190:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	uint16_t __ticks;
 191:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	__tmp = ((F_CPU) / 4e3) * __ms;
 192:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	if (__tmp < 1.0)
 193:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 		__ticks = 1;
 194:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	else if (__tmp > 65535)
 195:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	{
 196:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 		//	__ticks = requested delay in 1/10 ms
 197:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 		__ticks = (uint16_t) (__ms * 10.0);
 198:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 		while(__ticks)
 199:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 		{
 200:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 			// wait 1/10 ms
 201:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 			_delay_loop_2(((F_CPU) / 4e3) / 10);
 202:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 			__ticks --;
 203:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 		}
 204:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 		return;
 205:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	}
 206:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	else
 207:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 		__ticks = (uint16_t)__tmp;
 208:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	_delay_loop_2(__ticks);
 209:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #endif
 210:/opt/AVR/avr-libc3/avr/include/util/delay.h **** }
  67               		.loc 2 210 1 is_stmt 0 view .LVU20
  68 002c 00C0      		rjmp .L4
  69               	.LVL1:
  70               	.L2:
  71               		.loc 2 210 1 view .LVU21
  72               	.LBE5:
  73               	.LBE4:
  27:mainfile.c    **** 		}
  74               		.loc 1 27 4 is_stmt 1 view .LVU22
  27:mainfile.c    **** 		}
  75               		.loc 1 27 4 view .LVU23
  76 002e 8093 2604 		sts 1062,r24
  77 0032 00C0      		rjmp .L3
  78               		.cfi_endproc
  79               	.LFE6:
  81               		.text
  82               	.Letext0:
  83               		.file 3 "/opt/AVR/avr-libc3/avr/include/stdint.h"
  84               		.file 4 "/opt/AVR/avr-libc3/avr/include/avr/iotn214.h"
DEFINED SYMBOLS
                            *ABS*:0000000000000000 mainfile.c
     /tmp/cc96iZmM.s:2      *ABS*:000000000000003e __SP_H__
     /tmp/cc96iZmM.s:3      *ABS*:000000000000003d __SP_L__
     /tmp/cc96iZmM.s:4      *ABS*:000000000000003f __SREG__
     /tmp/cc96iZmM.s:5      *ABS*:0000000000000034 __CCP__
     /tmp/cc96iZmM.s:6      *ABS*:0000000000000000 __tmp_reg__
     /tmp/cc96iZmM.s:7      *ABS*:0000000000000001 __zero_reg__
     /tmp/cc96iZmM.s:14     .text.startup:0000000000000000 main

NO UNDEFINED SYMBOLS

With function included (not working):

   1               		.file	"mainfile.c"
   2               	__SP_H__ = 0x3e
   3               	__SP_L__ = 0x3d
   4               	__SREG__ = 0x3f
   5               	__CCP__ = 0x34
   6               	__tmp_reg__ = 0
   7               	__zero_reg__ = 1
   8               		.text
   9               	.Ltext0:
  10               		.cfi_sections	.debug_frame
  11               	.global	adadsdasd
  13               	adadsdasd:
  14               	.LFB6:
  15               		.file 1 "mainfile.c"
   1:mainfile.c    **** #include "global.h"
   2:mainfile.c    **** 
   3:mainfile.c    **** #include <avr/io.h>
   4:mainfile.c    **** #include <util/delay.h>                // for _delay_ms()
   5:mainfile.c    **** 
   6:mainfile.c    **** #include "pins.h"
   7:mainfile.c    **** 
   8:mainfile.c    **** /* If this function is commented out, the program works.
   9:mainfile.c    ****  * If this function is not commented out, the program fails.
  10:mainfile.c    ****  */
  11:mainfile.c    **** //#if 0
  12:mainfile.c    **** void adadsdasd(void)
  13:mainfile.c    **** {
  16               		.loc 1 13 1 view -0
  17               		.cfi_startproc
  18               	/* prologue: function */
  19               	/* frame size = 0 */
  20               	/* stack size = 0 */
  21               	.L__stack_usage = 0
  14:mainfile.c    **** }
  22               		.loc 1 14 1 view .LVU1
  23               	/* epilogue start */
  24 0000 0895      		ret
  25               		.cfi_endproc
  26               	.LFE6:
  28               		.section	.text.startup,"ax",@progbits
  29               	.global	main
  31               	main:
  32               	.LFB7:
  15:mainfile.c    **** //#endif
  16:mainfile.c    **** 
  17:mainfile.c    **** int main(void)
  18:mainfile.c    **** {
  33               		.loc 1 18 1 view -0
  34               		.cfi_startproc
  35               	/* prologue: function */
  36               	/* frame size = 0 */
  37               	/* stack size = 0 */
  38               	.L__stack_usage = 0
  19:mainfile.c    **** 	OUTPUT_PORT.DIRSET = OUTPUT_PIN;
  39               		.loc 1 19 2 view .LVU3
  40               		.loc 1 19 21 is_stmt 0 view .LVU4
  41 0000 82E0      		ldi r24,lo8(2)
  42 0002 8093 2104 		sts 1057,r24
  20:mainfile.c    **** 	INPUT_PORT.DIRCLR = INPUT_PIN;
  43               		.loc 1 20 2 is_stmt 1 view .LVU5
  44               		.loc 1 20 20 is_stmt 0 view .LVU6
  45 0006 84E0      		ldi r24,lo8(4)
  46 0008 8093 0204 		sts 1026,r24
  21:mainfile.c    **** 
  22:mainfile.c    **** 	while (1) {
  23:mainfile.c    **** 		if (IS_HIGH(INPUT)) {
  24:mainfile.c    **** 			SET_HIGH(OUTPUT);
  25:mainfile.c    **** 		}
  26:mainfile.c    **** 		else {
  27:mainfile.c    **** 			SET_LOW(OUTPUT);
  47               		.loc 1 27 4 view .LVU7
  48 000c 82E0      		ldi r24,lo8(2)
  49               	.L5:
  22:mainfile.c    **** 		if (IS_HIGH(INPUT)) {
  50               		.loc 1 22 2 is_stmt 1 view .LVU8
  23:mainfile.c    **** 			SET_HIGH(OUTPUT);
  51               		.loc 1 23 3 view .LVU9
  23:mainfile.c    **** 			SET_HIGH(OUTPUT);
  52               		.loc 1 23 7 is_stmt 0 view .LVU10
  53 000e 9091 0804 		lds r25,1032
  23:mainfile.c    **** 			SET_HIGH(OUTPUT);
  54               		.loc 1 23 6 view .LVU11
  55 0012 92FF      		sbrs r25,2
  56 0014 00C0      		rjmp .L3
  24:mainfile.c    **** 		}
  57               		.loc 1 24 4 is_stmt 1 view .LVU12
  24:mainfile.c    **** 		}
  58               		.loc 1 24 4 view .LVU13
  59 0016 8093 2504 		sts 1061,r24
  60               	.L4:
  28:mainfile.c    **** 		}
  29:mainfile.c    **** 
  30:mainfile.c    **** 		_delay_ms(100);                // wait 500 milliseconds
  61               		.loc 1 30 3 view .LVU14
  62               	.LVL0:
  63               	.LBB4:
  64               	.LBI4:
  65               		.file 2 "/opt/AVR/avr-libc3/avr/include/util/delay.h"
   1:/opt/AVR/avr-libc3/avr/include/util/delay.h **** /* Copyright (c) 2002, Marek Michalkiewicz
   2:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    Copyright (c) 2004,2005,2007 Joerg Wunsch
   3:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    Copyright (c) 2007  Florin-Viorel Petrov
   4:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    All rights reserved.
   5:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
   6:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    Redistribution and use in source and binary forms, with or without
   7:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    modification, are permitted provided that the following conditions are met:
   8:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
   9:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    * Redistributions of source code must retain the above copyright
  10:/opt/AVR/avr-libc3/avr/include/util/delay.h ****      notice, this list of conditions and the following disclaimer.
  11:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  12:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    * Redistributions in binary form must reproduce the above copyright
  13:/opt/AVR/avr-libc3/avr/include/util/delay.h ****      notice, this list of conditions and the following disclaimer in
  14:/opt/AVR/avr-libc3/avr/include/util/delay.h ****      the documentation and/or other materials provided with the
  15:/opt/AVR/avr-libc3/avr/include/util/delay.h ****      distribution.
  16:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  17:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    * Neither the name of the copyright holders nor the names of
  18:/opt/AVR/avr-libc3/avr/include/util/delay.h ****      contributors may be used to endorse or promote products derived
  19:/opt/AVR/avr-libc3/avr/include/util/delay.h ****      from this software without specific prior written permission.
  20:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  21:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  22:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  25:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  26:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  27:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  28:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  29:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  30:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  31:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   POSSIBILITY OF SUCH DAMAGE. */
  32:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  33:/opt/AVR/avr-libc3/avr/include/util/delay.h **** /* $Id$ */
  34:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  35:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #ifndef _UTIL_DELAY_H_
  36:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #define _UTIL_DELAY_H_ 1
  37:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  38:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #ifndef __DOXYGEN__
  39:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #  ifndef __HAS_DELAY_CYCLES
  40:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #    define __HAS_DELAY_CYCLES 1
  41:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #  endif
  42:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #endif  /* __DOXYGEN__ */
  43:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  44:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #include <inttypes.h>
  45:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #include <util/delay_basic.h>
  46:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #include <math.h>
  47:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  48:/opt/AVR/avr-libc3/avr/include/util/delay.h **** /** \file */
  49:/opt/AVR/avr-libc3/avr/include/util/delay.h **** /** \defgroup util_delay <util/delay.h>: Convenience functions for busy-wait delay loops
  50:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     \code
  51:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     #define F_CPU 1000000UL  // 1 MHz
  52:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     //#define F_CPU 14.7456E6
  53:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     #include <util/delay.h>
  54:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     \endcode
  55:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  56:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     \note As an alternative method, it is possible to pass the
  57:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     F_CPU macro down to the compiler from the Makefile.
  58:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     Obviously, in that case, no \c \#define statement should be
  59:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     used.
  60:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  61:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     The functions in this header file are wrappers around the basic
  62:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     busy-wait functions from <util/delay_basic.h>.  They are meant as
  63:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     convenience functions where actual time values can be specified
  64:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     rather than a number of cycles to wait for.  The idea behind is
  65:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     that compile-time constant expressions will be eliminated by
  66:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     compiler optimization so floating-point expressions can be used
  67:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     to calculate the number of delay cycles needed based on the CPU
  68:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     frequency passed by the macro F_CPU.
  69:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  70:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     \note In order for these functions to work as intended, compiler
  71:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     optimizations <em>must</em> be enabled, and the delay time
  72:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     <em>must</em> be an expression that is a known constant at
  73:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     compile-time.  If these requirements are not met, the resulting
  74:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     delay will be much longer (and basically unpredictable), and
  75:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     applications that otherwise do not use floating-point calculations
  76:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     will experience severe code bloat by the floating-point library
  77:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     routines linked into the application.
  78:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  79:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     The functions available allow the specification of microsecond, and
  80:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     millisecond delays directly, using the application-supplied macro
  81:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     F_CPU as the CPU clock frequency (in Hertz).
  82:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  83:/opt/AVR/avr-libc3/avr/include/util/delay.h **** */
  84:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  85:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #if !defined(__DOXYGEN__)
  86:/opt/AVR/avr-libc3/avr/include/util/delay.h **** static __inline__ void _delay_us(double __us) __attribute__((__always_inline__));
  87:/opt/AVR/avr-libc3/avr/include/util/delay.h **** static __inline__ void _delay_ms(double __ms) __attribute__((__always_inline__));
  88:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #endif
  89:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  90:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #ifndef F_CPU
  91:/opt/AVR/avr-libc3/avr/include/util/delay.h **** /* prevent compiler error by supplying a default */
  92:/opt/AVR/avr-libc3/avr/include/util/delay.h **** # warning "F_CPU not defined for <util/delay.h>"
  93:/opt/AVR/avr-libc3/avr/include/util/delay.h **** /** \ingroup util_delay
  94:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     \def F_CPU
  95:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     \brief CPU frequency in Hz
  96:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
  97:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     The macro F_CPU specifies the CPU frequency to be considered by
  98:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     the delay macros.  This macro is normally supplied by the
  99:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     environment (e.g. from within a project header, or the project's
 100:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     Makefile).  The value 1 MHz here is only provided as a "vanilla"
 101:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     fallback if no such user-provided definition could be found.
 102:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 103:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     In terms of the delay functions, the CPU frequency can be given as
 104:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     a floating-point constant (e.g. 3.6864E6 for 3.6864 MHz).
 105:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     However, the macros in <util/setbaud.h> require it to be an
 106:/opt/AVR/avr-libc3/avr/include/util/delay.h ****     integer value.
 107:/opt/AVR/avr-libc3/avr/include/util/delay.h ****  */
 108:/opt/AVR/avr-libc3/avr/include/util/delay.h **** # define F_CPU 1000000UL
 109:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #endif
 110:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 111:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #ifndef __OPTIMIZE__
 112:/opt/AVR/avr-libc3/avr/include/util/delay.h **** # warning "Compiler optimizations disabled; functions from <util/delay.h> won't work as designed"
 113:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #endif
 114:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 115:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #if __HAS_DELAY_CYCLES && defined(__OPTIMIZE__) && \
 116:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   !defined(__DELAY_BACKWARD_COMPATIBLE__) &&	   \
 117:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   __STDC_HOSTED__
 118:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #  include <math.h>
 119:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #endif
 120:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 121:/opt/AVR/avr-libc3/avr/include/util/delay.h **** /**
 122:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    \ingroup util_delay
 123:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 124:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    Perform a delay of \c __ms milliseconds, using _delay_loop_2().
 125:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 126:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    The macro F_CPU is supposed to be defined to a
 127:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    constant defining the CPU clock frequency (in Hertz).
 128:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 129:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    The maximal possible delay is 262.14 ms / F_CPU in MHz.
 130:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 131:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    When the user request delay which exceed the maximum possible one,
 132:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    _delay_ms() provides a decreased resolution functionality. In this
 133:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    mode _delay_ms() will work with a resolution of 1/10 ms, providing
 134:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    delays up to 6.5535 seconds (independent from CPU frequency).  The
 135:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    user will not be informed about decreased resolution.
 136:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 137:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    If the avr-gcc toolchain has __builtin_avr_delay_cycles()
 138:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    support, maximal possible delay is 4294967.295 ms/ F_CPU in MHz. For
 139:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    values greater than the maximal possible delay, overflows results in
 140:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    no delay i.e., 0ms.
 141:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 142:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    Conversion of \c __ms into clock cycles may not always result in
 143:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    integer.  By default, the clock cycles rounded up to next
 144:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    integer. This ensures that the user gets at least \c __ms
 145:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    microseconds of delay.
 146:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 147:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    Alternatively, by defining the macro \c __DELAY_ROUND_DOWN__, or
 148:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    \c __DELAY_ROUND_CLOSEST__, before including this header file, the
 149:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    algorithm can be made to round down, or round to closest integer,
 150:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    respectively.
 151:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 152:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    \note
 153:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 154:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    The implementation of _delay_ms() based on
 155:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    __builtin_avr_delay_cycles() is not backward compatible with older
 156:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    implementations.  In order to get functionality backward compatible
 157:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    with previous versions, the macro \c "__DELAY_BACKWARD_COMPATIBLE__"
 158:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    must be defined before including this header file. Also, the
 159:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    backward compatible algorithm will be chosen if the code is
 160:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    compiled in a <em>freestanding environment</em> (GCC option
 161:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    \c -ffreestanding), as the math functions required for rounding are
 162:/opt/AVR/avr-libc3/avr/include/util/delay.h ****    not available to the compiler then.
 163:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 164:/opt/AVR/avr-libc3/avr/include/util/delay.h ****  */
 165:/opt/AVR/avr-libc3/avr/include/util/delay.h **** void
 166:/opt/AVR/avr-libc3/avr/include/util/delay.h **** _delay_ms(double __ms)
  66               		.loc 2 166 1 view .LVU15
  67               	.LBB5:
 167:/opt/AVR/avr-libc3/avr/include/util/delay.h **** {
 168:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	double __tmp ;
  68               		.loc 2 168 2 view .LVU16
 169:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #if __HAS_DELAY_CYCLES && defined(__OPTIMIZE__) && \
 170:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   !defined(__DELAY_BACKWARD_COMPATIBLE__) &&	   \
 171:/opt/AVR/avr-libc3/avr/include/util/delay.h ****   __STDC_HOSTED__
 172:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	uint32_t __ticks_dc;
  69               		.loc 2 172 2 view .LVU17
 173:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	extern void __builtin_avr_delay_cycles(unsigned long);
  70               		.loc 2 173 2 view .LVU18
 174:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	__tmp = ((F_CPU) / 1e3) * __ms;
  71               		.loc 2 174 2 view .LVU19
 175:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 176:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	#if defined(__DELAY_ROUND_DOWN__)
 177:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 		__ticks_dc = (uint32_t)fabs(__tmp);
 178:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 179:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	#elif defined(__DELAY_ROUND_CLOSEST__)
 180:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 		__ticks_dc = (uint32_t)(fabs(__tmp)+0.5);
 181:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 182:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	#else
 183:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 		//round up by default
 184:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 		__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
  72               		.loc 2 184 3 view .LVU20
 185:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	#endif
 186:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 187:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	__builtin_avr_delay_cycles(__ticks_dc);
  73               		.loc 2 187 2 view .LVU21
  74 001a 2FE7      		ldi r18,lo8(399999)
  75 001c 3AE1      		ldi r19,hi8(399999)
  76 001e 96E0      		ldi r25,hlo8(399999)
  77 0020 2150      	1:	subi r18,1
  78 0022 3040      		sbci r19,0
  79 0024 9040      		sbci r25,0
  80 0026 01F4      		brne 1b
  81 0028 00C0      		rjmp .
  82 002a 0000      		nop
 188:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 
 189:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #else
 190:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	uint16_t __ticks;
 191:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	__tmp = ((F_CPU) / 4e3) * __ms;
 192:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	if (__tmp < 1.0)
 193:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 		__ticks = 1;
 194:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	else if (__tmp > 65535)
 195:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	{
 196:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 		//	__ticks = requested delay in 1/10 ms
 197:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 		__ticks = (uint16_t) (__ms * 10.0);
 198:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 		while(__ticks)
 199:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 		{
 200:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 			// wait 1/10 ms
 201:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 			_delay_loop_2(((F_CPU) / 4e3) / 10);
 202:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 			__ticks --;
 203:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 		}
 204:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 		return;
 205:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	}
 206:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	else
 207:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 		__ticks = (uint16_t)__tmp;
 208:/opt/AVR/avr-libc3/avr/include/util/delay.h **** 	_delay_loop_2(__ticks);
 209:/opt/AVR/avr-libc3/avr/include/util/delay.h **** #endif
 210:/opt/AVR/avr-libc3/avr/include/util/delay.h **** }
  83               		.loc 2 210 1 is_stmt 0 view .LVU22
  84 002c 00C0      		rjmp .L5
  85               	.LVL1:
  86               	.L3:
  87               		.loc 2 210 1 view .LVU23
  88               	.LBE5:
  89               	.LBE4:
  27:mainfile.c    **** 		}
  90               		.loc 1 27 4 is_stmt 1 view .LVU24
  27:mainfile.c    **** 		}
  91               		.loc 1 27 4 view .LVU25
  92 002e 8093 2604 		sts 1062,r24
  93 0032 00C0      		rjmp .L4
  94               		.cfi_endproc
  95               	.LFE7:
  97               		.text
  98               	.Letext0:
  99               		.file 3 "/opt/AVR/avr-libc3/avr/include/stdint.h"
 100               		.file 4 "/opt/AVR/avr-libc3/avr/include/avr/iotn214.h"
DEFINED SYMBOLS
                            *ABS*:0000000000000000 mainfile.c
     /tmp/cctYm3lq.s:2      *ABS*:000000000000003e __SP_H__
     /tmp/cctYm3lq.s:3      *ABS*:000000000000003d __SP_L__
     /tmp/cctYm3lq.s:4      *ABS*:000000000000003f __SREG__
     /tmp/cctYm3lq.s:5      *ABS*:0000000000000034 __CCP__
     /tmp/cctYm3lq.s:6      *ABS*:0000000000000000 __tmp_reg__
     /tmp/cctYm3lq.s:7      *ABS*:0000000000000001 __zero_reg__
     /tmp/cctYm3lq.s:13     .text:0000000000000000 adadsdasd
     /tmp/cctYm3lq.s:31     .text.startup:0000000000000000 main

NO UNDEFINED SYMBOLS

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment