Category Archives: Embedded

NIOS II Blinking LEDs

Clock: 125 MHz = 8 ns
Sleep: 8 ns * 125 = 1 us
void sleep_ms(int milisec)
{
    int i;
    int k;
    for (i = 0; i < milisec; i++) {
        for (k = 0; k < 125; k++) {
             __asm("nop");
        }
    }
}

int
main()
{    
    int i = 0;
    int k = 0;
    while (1) {
        k = 1 << i;
        i++;
        av_bus_write_32(HOST_REG_USER0, k);
        sleep_ms(5);
        if (i > 4) {
            i = 0;
        }
    }
    
    return 0;
}

STM32F4Discovery

ARM
STM32
STM32F4-Discovery

Getting started with the STM32F4Discovery
STM32F4Discovery: Up and running with the ARM Cortex M4
An Ethernet PHY for the STM32F107 and STM32F4
stm32plus::net, a C++ TCP/IP stack for the STM32
GitHub: andysworkshop/stm32plus

Ethernet on STM32F4DISCOVERY using external PHY

GCC

Getting Started with the STM32F4 and GCC

$ git clone git://github.com/jeremyherbert/stm32-templates.git
$ cp -r stm32-templates/stm32f4-discovery blinky

NIOS II: Development

Windows Cygwin: Use MinTTY

Using the DOS “start” command with parameters passed to the started program

[...]
:run_nios2_command_shell
@ start "" "%_QUARTUS_ROOT%\bin\cygwin\bin\mintty.exe" -e /bin/bash -c '%_NIOS2EDS_ROOT%nios2_command_shell.sh %*'
[...]
:run_nios2_command_shell
@ REM "%_QUARTUS_BIN%\cygwin\bin\bash.exe" -c '%_NIOS2EDS_ROOT%nios2_command_shell.sh %*'
@ start "" "%_QUARTUS_BIN%\cygwin\bin\mintty.exe" -e /bin/bash -c '%_NIOS2EDS_ROOT%nios2_command_shell.sh %*'

Windows Cygwin: Use Python

if [ -n "${COMSPEC}" ]; then
    _IS_WINDOWS=1
    PATH="/bin:/usr/bin:/cygdrive/c/Python27:${PATH}"
fi

Makefile changes (create-this-app-base.sh)

[...]
APP_ARGS=
NIOS2_APP_GEN_ARGS="$NIOS2_APP_GEN_ARGS_RELEASE"

while true; do
    case "$1" in
      -d|--debug)
          NIOS2_APP_GEN_ARGS="$NIOS2_APP_GEN_ARGS_DEBUG"
          shift
          ;;
          
      -s|--silent)
          APP_ARGS="$APP_ARGS --silent"
          shift
          ;;
          
      *)
          break
          ;;
    esac
done

. ../scripts/create-this-app-base.sh $APP_ARGS

# EOF
[...]
if [ -z "$SKIP_MAKE" ]; then
  cmd="make"
  
  if [ -n "$SILENT_MAKE" ]; then
      sed 's/^$(CC)/@$(CC)/' Makefile > Makefile.new
      mv Makefile.new Makefile
  fi
  
  sed 's/$(APP_CXXFLAGS) $(APP_CFLAGS)/$(APP_CXXFLAGS)/' Makefile > Makefile.new
  mv Makefile.new Makefile
  
  echo "create-this-app.sh: Running \"$cmd\""
  $cmd || {
      echo "make failed"
      exit 1
  }
  [...]
fi
exit 0
# EOF

Software Build Tools (SBT) + create-this-app

$ nios2-swexample-create --list
hello_world_small
float2_gcc
simple_socket_server
float2_functionality
memtest_small
blank_project
memtest
simple_socket_server_rgmii
float2_performance
hello_ucosii
count_binary
board_diag
hello_alt_main
web_server
hello_world
web_server_rgmii

$ nios2-swexample-create \
--sopc-file=../../hdl/quartus/qsys/nios.sopcinfo \
--type=hello_world

Make not found

Problems -> Errors -> Program "make" is not found in PATH

Project -> Properties -> C/C++-Build -> Tool Chain Editor -> Linux NIOS II GCC4
or
Eclipse Preferences -> C/C++ -> Build -> Environment -> Add.. -> "${PATH}:/Developer/usr/bin"

Program “make” not found in PATH

Small Driver, Reduced Device Drivers

#if defined(ALT_USE_SMALL_DRIVERS) || defined(ALTERA_AVALON_UART_SMALL)
bsp_editor_reduced_device_drivers

bsp_editor_small_driver

Includes

/opt/altera12.1sp1/nios2eds/components/altera_nios2/HAL/inc
/opt/altera12.1sp1/nios2eds/bin/gnu/H-i686-pc-linux-gnu/nios2-elf/include
/opt/altera12.1sp1/nios2eds/bin/gnu/H-i686-pc-linux-gnu/lib/gcc/nios2-elf/4.1.2/include

Exception Handling

Nios II Exception Handling
alteraforum.com: Nios II exception handler

Stacktrace / Backtrace

ABachmann: Debug user space application with MMU

libc

Is malloc() and free() not thread-safe?

In addition, the MicroC/OS-II implementation provides appropriate task
locking to ensure that heap accesses, i.e., calls to malloc() and free()
are also thread safe.

GCC

$ nios2-elf-gcc -v
gcc version 4.1.2 (Altera 12.1sp1 Build 243)

$ nios2-elf-gcc -v
gcc version 4.7.3 (Altera 13.1 Build 162)

$ nios2-elf-gcc -v
gcc version 4.8.3 20140320 (prerelease) (Altera 14.1 Build 186)

Embedded News and Events: Nios II Gen2 Processor Support
Nios II GNU toolchain upgrade from GCC 4.1.2 to GCC 4.7.3
Can the linker inline functions?

rand()

Generate a random number between 'x' and 'y':

return [ x + random % (y - x + 1) }

ex. x = 2, y = 7
random % (7 - 2 + 1) = random % 6 = 0 ... 5
2 + random % 6                    = 2 ... 7

random number generator?
ucore-nios2/libs/rand.c
How to choose numbers random with C?

GDB

Place a .gdbinit in your app-directory

How to use GDB to find what function a memory address corresponds to
GDB: Getting a symbol name from a memory address

bt
#0  alt_irq_entry () at HAL/src/alt_exception_entry.S:117
#1  0x00000024 in alt_irq_entry () at HAL/src/alt_exception_entry.S:107
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
info symbol 0x1201c
sys_check_timeouts + 164 in section .text
list *0x1201c
0x1201c is in sys_check_timeouts (src/lwip-1.4.1/core/timers.c:374).
369	    /* this cares for wraparounds */
370	    diff = now - timeouts_last_time;
371	    do
372	    {
373	#if PBUF_POOL_FREE_OOSEQ
374	      PBUF_CHECK_FREE_OOSEQ();
375	#endif /* PBUF_POOL_FREE_OOSEQ */
376	      had_one = 0;
377	      tmptimeout = next_timeout;
378	      if (tmptimeout && (tmptimeout->time <= diff)) {

readelf

Dive into ELF files using readelf command
what are the meanings of the columns displayed by readelf?

objdump

Understanding ELF using readelf and objdump
How to get gcc to interleave assembly output with original source code

$ nios2-elf-objdump -d -j <section> <filename> | grep -C <context> <address>
$ nios2-elf-objdump -d -j .text hcpp.elf | grep -C 30 1201c

PRIxPTR and intptr_t

Info: Compiling src/test.c to obj/default/src/test.o
src/test.c: In function 'task_test':
src/test.c:642:9: warning: format '%llx' expects argument of type 'long long unsigned int', but argument 2 has type 'unsigned int' [-Wformat=]
src/test.c:642:9: warning: format '%llx' expects argument of type 'long long unsigned int', but argument 3 has type 'unsigned int' [-Wformat=]
         LOG_PRINTLN(LOG_TEST, LOG_VERBOSE, ("lut_entry = 0x%08" PRIxPTR " idx_table = 0x%08" PRIxPTR, (uintptr_t) lut_table, (uintptr_t) idx_tabl));

inttypes.h bug leads to inconsistent warnings cross platform

Remove build-in Include Path

eclipse_include_path
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?scdStore version="2"?><scannerInfo id="org.eclipse.cdt.make.core.discoveredScannerInfo">
<instance id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1881282838;preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1881282838.;cdt.managedbuild.tool.gnu.cpp.compiler.cygwin.base.875764835;cdt.managedbuild.tool.gnu.cpp.compiler.input.cygwin.1182321586">
<collector id="org.eclipse.cdt.make.core.PerProjectSICollector">
<includePath path="C:\altera\14.1\quartus\bin64\cygwin\lib\gcc\x86_64-pc-cygwin\4.8.3\include\c++"/>
<includePath path="C:\altera\14.1\quartus\bin64\cygwin\lib\gcc\x86_64-pc-cygwin\4.8.3\include\c++\x86_64-pc-cygwin"/>
<includePath path="C:\altera\14.1\quartus\bin64\cygwin\lib\gcc\x86_64-pc-cygwin\4.8.3\include\c++\backward"/>
<includePath path="C:\altera\14.1\quartus\bin64\cygwin\lib\gcc\x86_64-pc-cygwin\4.8.3\include"/>
<includePath path="C:\altera\14.1\quartus\bin64\cygwin\lib\gcc\x86_64-pc-cygwin\4.8.3\include-fixed"/>
<includePath path="C:\altera\14.1\quartus\bin64\cygwin\usr\include"/>
<includePath path="C:\altera\14.1\quartus\bin64\cygwin\usr\include\w32api"/>
<includePath path="C:/src/hcpp/software/bsp/HAL/inc"/>
<includePath path="C:/src/hcpp/software/bsp/"/>
<includePath path="C:/src/hcpp/software/bsp/drivers/inc"/>
<includePath path="C:/src/hcpp/software/app/include/lwip-1.4.1"/>
<includePath path="C:/src/hcpp/software/app/include/lwip-1.4.1/ipv4"/>
<includePath path="C:/src/hcpp/software/app/include"/>
<includePath path="C:/src/hcpp/software/app/include/lwip-enet"/>
<includePath path="C:\altera\12.1sp1\quartus\bin\cygwin\lib\gcc\i686-pc-cygwin\4.5.3\include\c++"/>
<includePath path="C:\altera\12.1sp1\quartus\bin\cygwin\lib\gcc\i686-pc-cygwin\4.5.3\include\c++\i686-pc-cygwin"/>
<includePath path="C:\altera\12.1sp1\quartus\bin\cygwin\lib\gcc\i686-pc-cygwin\4.5.3\include\c++\backward"/>
<includePath path="C:\altera\12.1sp1\quartus\bin\cygwin\lib\gcc\i686-pc-cygwin\4.5.3\include"/>
<includePath path="C:\altera\12.1sp1\quartus\bin\cygwin\lib\gcc\i686-pc-cygwin\4.5.3\include-fixed"/>
<includePath path="C:\altera\12.1sp1\quartus\bin\cygwin\usr\include"/>
<includePath path="C:\altera\12.1sp1\quartus\bin\cygwin\usr\include\w32api"/>
<definedSymbol symbol="__STDC__=1"/>
<definedSymbol symbol="__cplusplus=1"/>
<definedSymbol symbol="__cplusplus=199711L"/>
<definedSymbol symbol="__STDC_HOSTED__=1"/>
<definedSymbol symbol="__GNUC__=4"/>
<definedSymbol symbol="__GNUC_MINOR__=5"/>
<definedSymbol symbol="__GNUC_MINOR__=8"/>
<definedSymbol symbol="__GNUC_PATCHLEVEL__=3"/>
<definedSymbol symbol="__GNUG__=4"/>
<definedSymbol symbol="__SIZE_TYPE__=unsigned int"/>
<definedSymbol symbol="__SIZE_TYPE__=long unsigned int"/>
<definedSymbol symbol="__PTRDIFF_TYPE__=int"/>
<definedSymbol symbol="__PTRDIFF_TYPE__=long int"/>
<definedSymbol symbol="__WCHAR_TYPE__=short unsigned int"/>
<definedSymbol symbol="__WINT_TYPE__=unsigned int"/>
<definedSymbol symbol="__INTMAX_TYPE__=long long int"/>
<definedSymbol symbol="__INTMAX_TYPE__=long int"/>
<definedSymbol symbol="__UINTMAX_TYPE__=long long unsigned int"/>
<definedSymbol symbol="__UINTMAX_TYPE__=long unsigned int"/>
<definedSymbol symbol="__CHAR16_TYPE__=short unsigned int"/>
<definedSymbol symbol="__CHAR32_TYPE__=unsigned int"/>
<definedSymbol symbol="__SIG_ATOMIC_TYPE__=int"/>
<definedSymbol symbol="__INT8_TYPE__=signed char"/>
<definedSymbol symbol="__INT16_TYPE__=short int"/>
<definedSymbol symbol="__INT32_TYPE__=int"/>
<definedSymbol symbol="__INT64_TYPE__=long long int"/>
<definedSymbol symbol="__INT64_TYPE__=long int"/>
<definedSymbol symbol="__UINT8_TYPE__=unsigned char"/>
<definedSymbol symbol="__UINT16_TYPE__=short unsigned int"/>
<definedSymbol symbol="__UINT32_TYPE__=unsigned int"/>
<definedSymbol symbol="__UINT64_TYPE__=long long unsigned int"/>
<definedSymbol symbol="__UINT64_TYPE__=long unsigned int"/>
<definedSymbol symbol="__INT_LEAST8_TYPE__=signed char"/>
<definedSymbol symbol="__INT_LEAST16_TYPE__=short int"/>
<definedSymbol symbol="__INT_LEAST32_TYPE__=int"/>
<definedSymbol symbol="__INT_LEAST64_TYPE__=long long int"/>
<definedSymbol symbol="__INT_LEAST64_TYPE__=long int"/>
<definedSymbol symbol="__UINT_LEAST8_TYPE__=unsigned char"/>
<definedSymbol symbol="__UINT_LEAST16_TYPE__=short unsigned int"/>
<definedSymbol symbol="__UINT_LEAST32_TYPE__=unsigned int"/>
<definedSymbol symbol="__UINT_LEAST64_TYPE__=long long unsigned int"/>
<definedSymbol symbol="__UINT_LEAST64_TYPE__=long unsigned int"/>
<definedSymbol symbol="__INT_FAST8_TYPE__=signed char"/>
<definedSymbol symbol="__INT_FAST16_TYPE__=int"/>
<definedSymbol symbol="__INT_FAST16_TYPE__=long int"/>
<definedSymbol symbol="__INT_FAST32_TYPE__=int"/>
<definedSymbol symbol="__INT_FAST32_TYPE__=long int"/>
<definedSymbol symbol="__INT_FAST64_TYPE__=long long int"/>
<definedSymbol symbol="__INT_FAST64_TYPE__=long int"/>
<definedSymbol symbol="__UINT_FAST8_TYPE__=unsigned char"/>
<definedSymbol symbol="__UINT_FAST16_TYPE__=unsigned int"/>
<definedSymbol symbol="__UINT_FAST16_TYPE__=long unsigned int"/>
<definedSymbol symbol="__UINT_FAST32_TYPE__=unsigned int"/>
<definedSymbol symbol="__UINT_FAST32_TYPE__=long unsigned int"/>
<definedSymbol symbol="__UINT_FAST64_TYPE__=long long unsigned int"/>
<definedSymbol symbol="__UINT_FAST64_TYPE__=long unsigned int"/>
<definedSymbol symbol="__INTPTR_TYPE__=int"/>
<definedSymbol symbol="__INTPTR_TYPE__=long int"/>
<definedSymbol symbol="__UINTPTR_TYPE__=unsigned int"/>
<definedSymbol symbol="__UINTPTR_TYPE__=long unsigned int"/>
<definedSymbol symbol="__GXX_WEAK__=1"/>
<definedSymbol symbol="__DEPRECATED=1"/>
<definedSymbol symbol="__GXX_RTTI=1"/>
<definedSymbol symbol="__EXCEPTIONS=1"/>
<definedSymbol symbol="__GXX_ABI_VERSION=1002"/>
<definedSymbol symbol="__SCHAR_MAX__=127"/>
<definedSymbol symbol="__SHRT_MAX__=32767"/>
<definedSymbol symbol="__INT_MAX__=2147483647"/>
<definedSymbol symbol="__LONG_MAX__=2147483647L"/>
<definedSymbol symbol="__LONG_MAX__=9223372036854775807L"/>
<definedSymbol symbol="__LONG_LONG_MAX__=9223372036854775807LL"/>
<definedSymbol symbol="__WCHAR_MAX__=65535"/>
<definedSymbol symbol="__WCHAR_MIN__=0"/>
<definedSymbol symbol="__WINT_MAX__=4294967295U"/>
<definedSymbol symbol="__WINT_MIN__=0U"/>
<definedSymbol symbol="__PTRDIFF_MAX__=2147483647"/>
<definedSymbol symbol="__PTRDIFF_MAX__=9223372036854775807L"/>
<definedSymbol symbol="__SIZE_MAX__=4294967295U"/>
<definedSymbol symbol="__SIZE_MAX__=18446744073709551615UL"/>
<definedSymbol symbol="__CHAR_BIT__=8"/>
<definedSymbol symbol="__INTMAX_MAX__=9223372036854775807LL"/>
<definedSymbol symbol="__INTMAX_MAX__=9223372036854775807L"/>
<definedSymbol symbol="__INTMAX_C(c)=c ## LL"/>
<definedSymbol symbol="__INTMAX_C(c)=c ## L"/>
<definedSymbol symbol="__UINTMAX_MAX__=18446744073709551615ULL"/>
<definedSymbol symbol="__UINTMAX_MAX__=18446744073709551615UL"/>
<definedSymbol symbol="__UINTMAX_C(c)=c ## ULL"/>
<definedSymbol symbol="__UINTMAX_C(c)=c ## UL"/>
<definedSymbol symbol="__SIG_ATOMIC_MAX__=2147483647"/>
<definedSymbol symbol="__SIG_ATOMIC_MIN__=(-__SIG_ATOMIC_MAX__ - 1)"/>
<definedSymbol symbol="__INT8_MAX__=127"/>
<definedSymbol symbol="__INT16_MAX__=32767"/>
<definedSymbol symbol="__INT32_MAX__=2147483647"/>
<definedSymbol symbol="__INT64_MAX__=9223372036854775807LL"/>
<definedSymbol symbol="__INT64_MAX__=9223372036854775807L"/>
<definedSymbol symbol="__UINT8_MAX__=255"/>
<definedSymbol symbol="__UINT16_MAX__=65535"/>
<definedSymbol symbol="__UINT32_MAX__=4294967295U"/>
<definedSymbol symbol="__UINT64_MAX__=18446744073709551615ULL"/>
<definedSymbol symbol="__UINT64_MAX__=18446744073709551615UL"/>
<definedSymbol symbol="__INT_LEAST8_MAX__=127"/>
<definedSymbol symbol="__INT8_C(c)=c"/>
<definedSymbol symbol="__INT_LEAST16_MAX__=32767"/>
<definedSymbol symbol="__INT16_C(c)=c"/>
<definedSymbol symbol="__INT_LEAST32_MAX__=2147483647"/>
<definedSymbol symbol="__INT32_C(c)=c"/>
<definedSymbol symbol="__INT_LEAST64_MAX__=9223372036854775807LL"/>
<definedSymbol symbol="__INT_LEAST64_MAX__=9223372036854775807L"/>
<definedSymbol symbol="__INT64_C(c)=c ## LL"/>
<definedSymbol symbol="__INT64_C(c)=c ## L"/>
<definedSymbol symbol="__UINT_LEAST8_MAX__=255"/>
<definedSymbol symbol="__UINT8_C(c)=c"/>
<definedSymbol symbol="__UINT_LEAST16_MAX__=65535"/>
<definedSymbol symbol="__UINT16_C(c)=c"/>
<definedSymbol symbol="__UINT_LEAST32_MAX__=4294967295U"/>
<definedSymbol symbol="__UINT32_C(c)=c ## U"/>
<definedSymbol symbol="__UINT_LEAST64_MAX__=18446744073709551615ULL"/>
<definedSymbol symbol="__UINT_LEAST64_MAX__=18446744073709551615UL"/>
<definedSymbol symbol="__UINT64_C(c)=c ## ULL"/>
<definedSymbol symbol="__UINT64_C(c)=c ## UL"/>
<definedSymbol symbol="__INT_FAST8_MAX__=127"/>
<definedSymbol symbol="__INT_FAST16_MAX__=2147483647"/>
<definedSymbol symbol="__INT_FAST16_MAX__=9223372036854775807L"/>
<definedSymbol symbol="__INT_FAST32_MAX__=2147483647"/>
<definedSymbol symbol="__INT_FAST32_MAX__=9223372036854775807L"/>
<definedSymbol symbol="__INT_FAST64_MAX__=9223372036854775807LL"/>
<definedSymbol symbol="__INT_FAST64_MAX__=9223372036854775807L"/>
<definedSymbol symbol="__UINT_FAST8_MAX__=255"/>
<definedSymbol symbol="__UINT_FAST16_MAX__=4294967295U"/>
<definedSymbol symbol="__UINT_FAST16_MAX__=18446744073709551615UL"/>
<definedSymbol symbol="__UINT_FAST32_MAX__=4294967295U"/>
<definedSymbol symbol="__UINT_FAST32_MAX__=18446744073709551615UL"/>
<definedSymbol symbol="__UINT_FAST64_MAX__=18446744073709551615ULL"/>
<definedSymbol symbol="__UINT_FAST64_MAX__=18446744073709551615UL"/>
<definedSymbol symbol="__INTPTR_MAX__=2147483647"/>
<definedSymbol symbol="__INTPTR_MAX__=9223372036854775807L"/>
<definedSymbol symbol="__UINTPTR_MAX__=4294967295U"/>
<definedSymbol symbol="__UINTPTR_MAX__=18446744073709551615UL"/>
<definedSymbol symbol="__FLT_EVAL_METHOD__=2"/>
<definedSymbol symbol="__FLT_EVAL_METHOD__=0"/>
<definedSymbol symbol="__DEC_EVAL_METHOD__=2"/>
<definedSymbol symbol="__FLT_RADIX__=2"/>
<definedSymbol symbol="__FLT_MANT_DIG__=24"/>
<definedSymbol symbol="__FLT_DIG__=6"/>
<definedSymbol symbol="__FLT_MIN_EXP__=(-125)"/>
<definedSymbol symbol="__FLT_MIN_10_EXP__=(-37)"/>
<definedSymbol symbol="__FLT_MAX_EXP__=128"/>
<definedSymbol symbol="__FLT_MAX_10_EXP__=38"/>
<definedSymbol symbol="__FLT_MAX__=3.40282346638528859812e+38F"/>
<definedSymbol symbol="__FLT_MIN__=1.17549435082228750797e-38F"/>
<definedSymbol symbol="__FLT_EPSILON__=1.19209289550781250000e-7F"/>
<definedSymbol symbol="__FLT_DENORM_MIN__=1.40129846432481707092e-45F"/>
<definedSymbol symbol="__FLT_HAS_DENORM__=1"/>
<definedSymbol symbol="__FLT_HAS_INFINITY__=1"/>
<definedSymbol symbol="__FLT_HAS_QUIET_NAN__=1"/>
<definedSymbol symbol="__DBL_MANT_DIG__=53"/>
<definedSymbol symbol="__DBL_DIG__=15"/>
<definedSymbol symbol="__DBL_MIN_EXP__=(-1021)"/>
<definedSymbol symbol="__DBL_MIN_10_EXP__=(-307)"/>
<definedSymbol symbol="__DBL_MAX_EXP__=1024"/>
<definedSymbol symbol="__DBL_MAX_10_EXP__=308"/>
<definedSymbol symbol="__DBL_MAX__=((double)1.79769313486231570815e+308L)"/>
<definedSymbol symbol="__DBL_MAX__=double(1.79769313486231570815e+308L)"/>
<definedSymbol symbol="__DBL_MIN__=((double)2.22507385850720138309e-308L)"/>
<definedSymbol symbol="__DBL_MIN__=double(2.22507385850720138309e-308L)"/>
<definedSymbol symbol="__DBL_EPSILON__=((double)2.22044604925031308085e-16L)"/>
<definedSymbol symbol="__DBL_EPSILON__=double(2.22044604925031308085e-16L)"/>
<definedSymbol symbol="__DBL_DENORM_MIN__=((double)4.94065645841246544177e-324L)"/>
<definedSymbol symbol="__DBL_DENORM_MIN__=double(4.94065645841246544177e-324L)"/>
<definedSymbol symbol="__DBL_HAS_DENORM__=1"/>
<definedSymbol symbol="__DBL_HAS_INFINITY__=1"/>
<definedSymbol symbol="__DBL_HAS_QUIET_NAN__=1"/>
<definedSymbol symbol="__LDBL_MANT_DIG__=64"/>
<definedSymbol symbol="__LDBL_DIG__=18"/>
<definedSymbol symbol="__LDBL_MIN_EXP__=(-16381)"/>
<definedSymbol symbol="__LDBL_MIN_10_EXP__=(-4931)"/>
<definedSymbol symbol="__LDBL_MAX_EXP__=16384"/>
<definedSymbol symbol="__LDBL_MAX_10_EXP__=4932"/>
<definedSymbol symbol="__DECIMAL_DIG__=21"/>
<definedSymbol symbol="__LDBL_MAX__=1.18973149535723176502e+4932L"/>
<definedSymbol symbol="__LDBL_MIN__=3.36210314311209350626e-4932L"/>
<definedSymbol symbol="__LDBL_EPSILON__=1.08420217248550443401e-19L"/>
<definedSymbol symbol="__LDBL_DENORM_MIN__=3.64519953188247460253e-4951L"/>
<definedSymbol symbol="__LDBL_HAS_DENORM__=1"/>
<definedSymbol symbol="__LDBL_HAS_INFINITY__=1"/>
<definedSymbol symbol="__LDBL_HAS_QUIET_NAN__=1"/>
<definedSymbol symbol="__DEC32_MANT_DIG__=7"/>
<definedSymbol symbol="__DEC32_MIN_EXP__=(-94)"/>
<definedSymbol symbol="__DEC32_MAX_EXP__=97"/>
<definedSymbol symbol="__DEC32_MIN__=1E-95DF"/>
<definedSymbol symbol="__DEC32_MAX__=9.999999E96DF"/>
<definedSymbol symbol="__DEC32_EPSILON__=1E-6DF"/>
<definedSymbol symbol="__DEC32_SUBNORMAL_MIN__=0.000001E-95DF"/>
<definedSymbol symbol="__DEC64_MANT_DIG__=16"/>
<definedSymbol symbol="__DEC64_MIN_EXP__=(-382)"/>
<definedSymbol symbol="__DEC64_MAX_EXP__=385"/>
<definedSymbol symbol="__DEC64_MIN__=1E-383DD"/>
<definedSymbol symbol="__DEC64_MAX__=9.999999999999999E384DD"/>
<definedSymbol symbol="__DEC64_EPSILON__=1E-15DD"/>
<definedSymbol symbol="__DEC64_SUBNORMAL_MIN__=0.000000000000001E-383DD"/>
<definedSymbol symbol="__DEC128_MANT_DIG__=34"/>
<definedSymbol symbol="__DEC128_MIN_EXP__=(-6142)"/>
<definedSymbol symbol="__DEC128_MAX_EXP__=6145"/>
<definedSymbol symbol="__DEC128_MIN__=1E-6143DL"/>
<definedSymbol symbol="__DEC128_MAX__=9.999999999999999999999999999999999E6144DL"/>
<definedSymbol symbol="__DEC128_EPSILON__=1E-33DL"/>
<definedSymbol symbol="__DEC128_SUBNORMAL_MIN__=0.000000000000000000000000000000001E-6143DL"/>
<definedSymbol symbol="__REGISTER_PREFIX__="/>
<definedSymbol symbol="__USER_LABEL_PREFIX__=_"/>
<definedSymbol symbol="__USER_LABEL_PREFIX__="/>
<definedSymbol symbol="__VERSION__=&quot;4.5.3&quot;"/>
<definedSymbol symbol="__VERSION__=&quot;4.8.3&quot;"/>
<definedSymbol symbol="__GNUC_GNU_INLINE__=1"/>
<definedSymbol symbol="__NO_INLINE__=1"/>
<definedSymbol symbol="__FINITE_MATH_ONLY__=0"/>
<definedSymbol symbol="__WCHAR_UNSIGNED__=1"/>
<definedSymbol symbol="__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1=1"/>
<definedSymbol symbol="__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2=1"/>
<definedSymbol symbol="__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4=1"/>
<definedSymbol symbol="__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8=1"/>
<definedSymbol symbol="__PRAGMA_REDEFINE_EXTNAME=1"/>
<definedSymbol symbol="__SIZEOF_INT__=4"/>
<definedSymbol symbol="__SIZEOF_LONG__=4"/>
<definedSymbol symbol="__SIZEOF_LONG__=8"/>
<definedSymbol symbol="__SIZEOF_LONG_LONG__=8"/>
<definedSymbol symbol="__SIZEOF_SHORT__=2"/>
<definedSymbol symbol="__SIZEOF_FLOAT__=4"/>
<definedSymbol symbol="__SIZEOF_DOUBLE__=8"/>
<definedSymbol symbol="__SIZEOF_LONG_DOUBLE__=12"/>
<definedSymbol symbol="__SIZEOF_LONG_DOUBLE__=16"/>
<definedSymbol symbol="__SIZEOF_SIZE_T__=4"/>
<definedSymbol symbol="__SIZEOF_SIZE_T__=8"/>
<definedSymbol symbol="__SIZEOF_WCHAR_T__=2"/>
<definedSymbol symbol="__SIZEOF_WINT_T__=4"/>
<definedSymbol symbol="__SIZEOF_PTRDIFF_T__=4"/>
<definedSymbol symbol="__SIZEOF_PTRDIFF_T__=8"/>
<definedSymbol symbol="__SIZEOF_POINTER__=4"/>
<definedSymbol symbol="__SIZEOF_POINTER__=8"/>
<definedSymbol symbol="__i386=1"/>
<definedSymbol symbol="__i386__=1"/>
<definedSymbol symbol="i386=1"/>
<definedSymbol symbol="__i686=1"/>
<definedSymbol symbol="__i686__=1"/>
<definedSymbol symbol="__pentiumpro=1"/>
<definedSymbol symbol="__pentiumpro__=1"/>
<definedSymbol symbol="_X86_=1"/>
<definedSymbol symbol="__stdcall=__attribute__((__stdcall__))"/>
<definedSymbol symbol="__fastcall=__attribute__((__fastcall__))"/>
<definedSymbol symbol="__cdecl=__attribute__((__cdecl__))"/>
<definedSymbol symbol="_stdcall=__attribute__((__stdcall__))"/>
<definedSymbol symbol="_fastcall=__attribute__((__fastcall__))"/>
<definedSymbol symbol="_cdecl=__attribute__((__cdecl__))"/>
<definedSymbol symbol="__GXX_MERGED_TYPEINFO_NAMES=0"/>
<definedSymbol symbol="__GXX_TYPEINFO_EQUALITY_INLINE=0"/>
<definedSymbol symbol="__declspec(x)=__attribute__((x))"/>
<definedSymbol symbol="__BIGGEST_ALIGNMENT__=16"/>
<definedSymbol symbol="__CYGWIN32__=1"/>
<definedSymbol symbol="__CYGWIN__=1"/>
<definedSymbol symbol="unix=1"/>
<definedSymbol symbol="__unix__=1"/>
<definedSymbol symbol="__unix=1"/>
<definedSymbol symbol="SYSTEM_BUS_WIDTH=32"/>
<definedSymbol symbol="__hal__=1"/>
<definedSymbol symbol="ALT_NO_INSTRUCTION_EMULATION=1"/>
<definedSymbol symbol="ALT_SINGLE_THREADED=1"/>
<definedSymbol symbol="__ATOMIC_RELAXED=0"/>
<definedSymbol symbol="__ATOMIC_SEQ_CST=5"/>
<definedSymbol symbol="__ATOMIC_ACQUIRE=2"/>
<definedSymbol symbol="__ATOMIC_RELEASE=3"/>
<definedSymbol symbol="__ATOMIC_ACQ_REL=4"/>
<definedSymbol symbol="__ATOMIC_CONSUME=1"/>
<definedSymbol symbol="__pic__=1"/>
<definedSymbol symbol="__PIC__=1"/>
<definedSymbol symbol="_LP64=1"/>
<definedSymbol symbol="__LP64__=1"/>
<definedSymbol symbol="__ORDER_LITTLE_ENDIAN__=1234"/>
<definedSymbol symbol="__ORDER_BIG_ENDIAN__=4321"/>
<definedSymbol symbol="__ORDER_PDP_ENDIAN__=3412"/>
<definedSymbol symbol="__BYTE_ORDER__=__ORDER_LITTLE_ENDIAN__"/>
<definedSymbol symbol="__FLOAT_WORD_ORDER__=__ORDER_LITTLE_ENDIAN__"/>
<definedSymbol symbol="__FLT_DECIMAL_DIG__=9"/>
<definedSymbol symbol="__DBL_DECIMAL_DIG__=17"/>
<definedSymbol symbol="__GCC_ATOMIC_BOOL_LOCK_FREE=2"/>
<definedSymbol symbol="__GCC_ATOMIC_CHAR_LOCK_FREE=2"/>
<definedSymbol symbol="__GCC_ATOMIC_CHAR16_T_LOCK_FREE=2"/>
<definedSymbol symbol="__GCC_ATOMIC_CHAR32_T_LOCK_FREE=2"/>
<definedSymbol symbol="__GCC_ATOMIC_WCHAR_T_LOCK_FREE=2"/>
<definedSymbol symbol="__GCC_ATOMIC_SHORT_LOCK_FREE=2"/>
<definedSymbol symbol="__GCC_ATOMIC_INT_LOCK_FREE=2"/>
<definedSymbol symbol="__GCC_ATOMIC_LONG_LOCK_FREE=2"/>
<definedSymbol symbol="__GCC_ATOMIC_LLONG_LOCK_FREE=2"/>
<definedSymbol symbol="__GCC_ATOMIC_TEST_AND_SET_TRUEVAL=1"/>
<definedSymbol symbol="__GCC_ATOMIC_POINTER_LOCK_FREE=2"/>
<definedSymbol symbol="__SIZEOF_INT128__=16"/>
<definedSymbol symbol="__amd64=1"/>
<definedSymbol symbol="__amd64__=1"/>
<definedSymbol symbol="__x86_64=1"/>
<definedSymbol symbol="__x86_64__=1"/>
<definedSymbol symbol="__ATOMIC_HLE_ACQUIRE=65536"/>
<definedSymbol symbol="__ATOMIC_HLE_RELEASE=131072"/>
<definedSymbol symbol="__k8=1"/>
<definedSymbol symbol="__k8__=1"/>
<definedSymbol symbol="__code_model_medium__=1"/>
<definedSymbol symbol="__MMX__=1"/>
<definedSymbol symbol="__SSE__=1"/>
<definedSymbol symbol="__SSE2__=1"/>
<definedSymbol symbol="__FXSR__=1"/>
<definedSymbol symbol="__SSE_MATH__=1"/>
<definedSymbol symbol="__SSE2_MATH__=1"/>
<definedSymbol symbol="__SEH__=1"/>
<definedSymbol symbol="__thiscall=__attribute__((__thiscall__))"/>
<definedSymbol symbol="_thiscall=__attribute__((__thiscall__))"/>
<definedSymbol symbol="__DECIMAL_BID_FORMAT__=1"/>
</collector>
</instance>
<instance id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1881282838;preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1881282838.;cdt.managedbuild.tool.gnu.c.compiler.cygwin.base.824698696;cdt.managedbuild.tool.gnu.c.compiler.input.cygwin.1417893846">
<collector id="org.eclipse.cdt.make.core.PerProjectSICollector">
<includePath path="C:\altera\14.1\quartus\bin64\cygwin\lib\gcc\x86_64-pc-cygwin\4.8.3\include"/>
<includePath path="C:\altera\14.1\quartus\bin64\cygwin\lib\gcc\x86_64-pc-cygwin\4.8.3\include-fixed"/>
<includePath path="C:\altera\14.1\quartus\bin64\cygwin\usr\include"/>
<includePath path="C:\altera\14.1\quartus\bin64\cygwin\usr\include\w32api"/>
<includePath path="C:/src/hcpp/software/bsp/HAL/inc"/>
<includePath path="C:/src/hcpp/software/bsp/"/>
<includePath path="C:/src/hcpp/software/bsp/drivers/inc"/>
<includePath path="C:/src/hcpp/software/app/include/lwip-1.4.1"/>
<includePath path="C:/src/hcpp/software/app/include/lwip-1.4.1/ipv4"/>
<includePath path="C:/src/hcpp/software/app/include"/>
<includePath path="C:/src/hcpp/software/app/include/lwip-enet"/>
<includePath path="C:\altera\12.1sp1\quartus\bin\cygwin\lib\gcc\i686-pc-cygwin\4.5.3\include"/>
<includePath path="C:\altera\12.1sp1\quartus\bin\cygwin\lib\gcc\i686-pc-cygwin\4.5.3\include-fixed"/>
<includePath path="C:\altera\12.1sp1\quartus\bin\cygwin\usr\include"/>
<includePath path="C:\altera\12.1sp1\quartus\bin\cygwin\usr\include\w32api"/>
<definedSymbol symbol="__STDC__=1"/>
<definedSymbol symbol="__STDC_HOSTED__=1"/>
<definedSymbol symbol="__GNUC__=4"/>
<definedSymbol symbol="__GNUC_MINOR__=5"/>
<definedSymbol symbol="__GNUC_MINOR__=8"/>
<definedSymbol symbol="__GNUC_PATCHLEVEL__=3"/>
<definedSymbol symbol="__SIZE_TYPE__=unsigned int"/>
<definedSymbol symbol="__SIZE_TYPE__=long unsigned int"/>
<definedSymbol symbol="__PTRDIFF_TYPE__=int"/>
<definedSymbol symbol="__PTRDIFF_TYPE__=long int"/>
<definedSymbol symbol="__WCHAR_TYPE__=short unsigned int"/>
<definedSymbol symbol="__WINT_TYPE__=unsigned int"/>
<definedSymbol symbol="__INTMAX_TYPE__=long long int"/>
<definedSymbol symbol="__INTMAX_TYPE__=long int"/>
<definedSymbol symbol="__UINTMAX_TYPE__=long long unsigned int"/>
<definedSymbol symbol="__UINTMAX_TYPE__=long unsigned int"/>
<definedSymbol symbol="__CHAR16_TYPE__=short unsigned int"/>
<definedSymbol symbol="__CHAR32_TYPE__=unsigned int"/>
<definedSymbol symbol="__SIG_ATOMIC_TYPE__=int"/>
<definedSymbol symbol="__INT8_TYPE__=signed char"/>
<definedSymbol symbol="__INT16_TYPE__=short int"/>
<definedSymbol symbol="__INT32_TYPE__=int"/>
<definedSymbol symbol="__INT64_TYPE__=long long int"/>
<definedSymbol symbol="__INT64_TYPE__=long int"/>
<definedSymbol symbol="__UINT8_TYPE__=unsigned char"/>
<definedSymbol symbol="__UINT16_TYPE__=short unsigned int"/>
<definedSymbol symbol="__UINT32_TYPE__=unsigned int"/>
<definedSymbol symbol="__UINT64_TYPE__=long long unsigned int"/>
<definedSymbol symbol="__UINT64_TYPE__=long unsigned int"/>
<definedSymbol symbol="__INT_LEAST8_TYPE__=signed char"/>
<definedSymbol symbol="__INT_LEAST16_TYPE__=short int"/>
<definedSymbol symbol="__INT_LEAST32_TYPE__=int"/>
<definedSymbol symbol="__INT_LEAST64_TYPE__=long long int"/>
<definedSymbol symbol="__INT_LEAST64_TYPE__=long int"/>
<definedSymbol symbol="__UINT_LEAST8_TYPE__=unsigned char"/>
<definedSymbol symbol="__UINT_LEAST16_TYPE__=short unsigned int"/>
<definedSymbol symbol="__UINT_LEAST32_TYPE__=unsigned int"/>
<definedSymbol symbol="__UINT_LEAST64_TYPE__=long long unsigned int"/>
<definedSymbol symbol="__UINT_LEAST64_TYPE__=long unsigned int"/>
<definedSymbol symbol="__INT_FAST8_TYPE__=signed char"/>
<definedSymbol symbol="__INT_FAST16_TYPE__=int"/>
<definedSymbol symbol="__INT_FAST16_TYPE__=long int"/>
<definedSymbol symbol="__INT_FAST32_TYPE__=int"/>
<definedSymbol symbol="__INT_FAST32_TYPE__=long int"/>
<definedSymbol symbol="__INT_FAST64_TYPE__=long long int"/>
<definedSymbol symbol="__INT_FAST64_TYPE__=long int"/>
<definedSymbol symbol="__UINT_FAST8_TYPE__=unsigned char"/>
<definedSymbol symbol="__UINT_FAST16_TYPE__=unsigned int"/>
<definedSymbol symbol="__UINT_FAST16_TYPE__=long unsigned int"/>
<definedSymbol symbol="__UINT_FAST32_TYPE__=unsigned int"/>
<definedSymbol symbol="__UINT_FAST32_TYPE__=long unsigned int"/>
<definedSymbol symbol="__UINT_FAST64_TYPE__=long long unsigned int"/>
<definedSymbol symbol="__UINT_FAST64_TYPE__=long unsigned int"/>
<definedSymbol symbol="__INTPTR_TYPE__=int"/>
<definedSymbol symbol="__INTPTR_TYPE__=long int"/>
<definedSymbol symbol="__UINTPTR_TYPE__=unsigned int"/>
<definedSymbol symbol="__UINTPTR_TYPE__=long unsigned int"/>
<definedSymbol symbol="__GXX_ABI_VERSION=1002"/>
<definedSymbol symbol="__SCHAR_MAX__=127"/>
<definedSymbol symbol="__SHRT_MAX__=32767"/>
<definedSymbol symbol="__INT_MAX__=2147483647"/>
<definedSymbol symbol="__LONG_MAX__=2147483647L"/>
<definedSymbol symbol="__LONG_MAX__=9223372036854775807L"/>
<definedSymbol symbol="__LONG_LONG_MAX__=9223372036854775807LL"/>
<definedSymbol symbol="__WCHAR_MAX__=65535"/>
<definedSymbol symbol="__WCHAR_MIN__=0"/>
<definedSymbol symbol="__WINT_MAX__=4294967295U"/>
<definedSymbol symbol="__WINT_MIN__=0U"/>
<definedSymbol symbol="__PTRDIFF_MAX__=2147483647"/>
<definedSymbol symbol="__PTRDIFF_MAX__=9223372036854775807L"/>
<definedSymbol symbol="__SIZE_MAX__=4294967295U"/>
<definedSymbol symbol="__SIZE_MAX__=18446744073709551615UL"/>
<definedSymbol symbol="__CHAR_BIT__=8"/>
<definedSymbol symbol="__INTMAX_MAX__=9223372036854775807LL"/>
<definedSymbol symbol="__INTMAX_MAX__=9223372036854775807L"/>
<definedSymbol symbol="__INTMAX_C(c)=c ## LL"/>
<definedSymbol symbol="__INTMAX_C(c)=c ## L"/>
<definedSymbol symbol="__UINTMAX_MAX__=18446744073709551615ULL"/>
<definedSymbol symbol="__UINTMAX_MAX__=18446744073709551615UL"/>
<definedSymbol symbol="__UINTMAX_C(c)=c ## ULL"/>
<definedSymbol symbol="__UINTMAX_C(c)=c ## UL"/>
<definedSymbol symbol="__SIG_ATOMIC_MAX__=2147483647"/>
<definedSymbol symbol="__SIG_ATOMIC_MIN__=(-__SIG_ATOMIC_MAX__ - 1)"/>
<definedSymbol symbol="__INT8_MAX__=127"/>
<definedSymbol symbol="__INT16_MAX__=32767"/>
<definedSymbol symbol="__INT32_MAX__=2147483647"/>
<definedSymbol symbol="__INT64_MAX__=9223372036854775807LL"/>
<definedSymbol symbol="__INT64_MAX__=9223372036854775807L"/>
<definedSymbol symbol="__UINT8_MAX__=255"/>
<definedSymbol symbol="__UINT16_MAX__=65535"/>
<definedSymbol symbol="__UINT32_MAX__=4294967295U"/>
<definedSymbol symbol="__UINT64_MAX__=18446744073709551615ULL"/>
<definedSymbol symbol="__UINT64_MAX__=18446744073709551615UL"/>
<definedSymbol symbol="__INT_LEAST8_MAX__=127"/>
<definedSymbol symbol="__INT8_C(c)=c"/>
<definedSymbol symbol="__INT_LEAST16_MAX__=32767"/>
<definedSymbol symbol="__INT16_C(c)=c"/>
<definedSymbol symbol="__INT_LEAST32_MAX__=2147483647"/>
<definedSymbol symbol="__INT32_C(c)=c"/>
<definedSymbol symbol="__INT_LEAST64_MAX__=9223372036854775807LL"/>
<definedSymbol symbol="__INT_LEAST64_MAX__=9223372036854775807L"/>
<definedSymbol symbol="__INT64_C(c)=c ## LL"/>
<definedSymbol symbol="__INT64_C(c)=c ## L"/>
<definedSymbol symbol="__UINT_LEAST8_MAX__=255"/>
<definedSymbol symbol="__UINT8_C(c)=c"/>
<definedSymbol symbol="__UINT_LEAST16_MAX__=65535"/>
<definedSymbol symbol="__UINT16_C(c)=c"/>
<definedSymbol symbol="__UINT_LEAST32_MAX__=4294967295U"/>
<definedSymbol symbol="__UINT32_C(c)=c ## U"/>
<definedSymbol symbol="__UINT_LEAST64_MAX__=18446744073709551615ULL"/>
<definedSymbol symbol="__UINT_LEAST64_MAX__=18446744073709551615UL"/>
<definedSymbol symbol="__UINT64_C(c)=c ## ULL"/>
<definedSymbol symbol="__UINT64_C(c)=c ## UL"/>
<definedSymbol symbol="__INT_FAST8_MAX__=127"/>
<definedSymbol symbol="__INT_FAST16_MAX__=2147483647"/>
<definedSymbol symbol="__INT_FAST16_MAX__=9223372036854775807L"/>
<definedSymbol symbol="__INT_FAST32_MAX__=2147483647"/>
<definedSymbol symbol="__INT_FAST32_MAX__=9223372036854775807L"/>
<definedSymbol symbol="__INT_FAST64_MAX__=9223372036854775807LL"/>
<definedSymbol symbol="__INT_FAST64_MAX__=9223372036854775807L"/>
<definedSymbol symbol="__UINT_FAST8_MAX__=255"/>
<definedSymbol symbol="__UINT_FAST16_MAX__=4294967295U"/>
<definedSymbol symbol="__UINT_FAST16_MAX__=18446744073709551615UL"/>
<definedSymbol symbol="__UINT_FAST32_MAX__=4294967295U"/>
<definedSymbol symbol="__UINT_FAST32_MAX__=18446744073709551615UL"/>
<definedSymbol symbol="__UINT_FAST64_MAX__=18446744073709551615ULL"/>
<definedSymbol symbol="__UINT_FAST64_MAX__=18446744073709551615UL"/>
<definedSymbol symbol="__INTPTR_MAX__=2147483647"/>
<definedSymbol symbol="__INTPTR_MAX__=9223372036854775807L"/>
<definedSymbol symbol="__UINTPTR_MAX__=4294967295U"/>
<definedSymbol symbol="__UINTPTR_MAX__=18446744073709551615UL"/>
<definedSymbol symbol="__FLT_EVAL_METHOD__=2"/>
<definedSymbol symbol="__FLT_EVAL_METHOD__=0"/>
<definedSymbol symbol="__DEC_EVAL_METHOD__=2"/>
<definedSymbol symbol="__FLT_RADIX__=2"/>
<definedSymbol symbol="__FLT_MANT_DIG__=24"/>
<definedSymbol symbol="__FLT_DIG__=6"/>
<definedSymbol symbol="__FLT_MIN_EXP__=(-125)"/>
<definedSymbol symbol="__FLT_MIN_10_EXP__=(-37)"/>
<definedSymbol symbol="__FLT_MAX_EXP__=128"/>
<definedSymbol symbol="__FLT_MAX_10_EXP__=38"/>
<definedSymbol symbol="__FLT_MAX__=3.40282346638528859812e+38F"/>
<definedSymbol symbol="__FLT_MIN__=1.17549435082228750797e-38F"/>
<definedSymbol symbol="__FLT_EPSILON__=1.19209289550781250000e-7F"/>
<definedSymbol symbol="__FLT_DENORM_MIN__=1.40129846432481707092e-45F"/>
<definedSymbol symbol="__FLT_HAS_DENORM__=1"/>
<definedSymbol symbol="__FLT_HAS_INFINITY__=1"/>
<definedSymbol symbol="__FLT_HAS_QUIET_NAN__=1"/>
<definedSymbol symbol="__DBL_MANT_DIG__=53"/>
<definedSymbol symbol="__DBL_DIG__=15"/>
<definedSymbol symbol="__DBL_MIN_EXP__=(-1021)"/>
<definedSymbol symbol="__DBL_MIN_10_EXP__=(-307)"/>
<definedSymbol symbol="__DBL_MAX_EXP__=1024"/>
<definedSymbol symbol="__DBL_MAX_10_EXP__=308"/>
<definedSymbol symbol="__DBL_MAX__=((double)1.79769313486231570815e+308L)"/>
<definedSymbol symbol="__DBL_MIN__=((double)2.22507385850720138309e-308L)"/>
<definedSymbol symbol="__DBL_EPSILON__=((double)2.22044604925031308085e-16L)"/>
<definedSymbol symbol="__DBL_DENORM_MIN__=((double)4.94065645841246544177e-324L)"/>
<definedSymbol symbol="__DBL_HAS_DENORM__=1"/>
<definedSymbol symbol="__DBL_HAS_INFINITY__=1"/>
<definedSymbol symbol="__DBL_HAS_QUIET_NAN__=1"/>
<definedSymbol symbol="__LDBL_MANT_DIG__=64"/>
<definedSymbol symbol="__LDBL_DIG__=18"/>
<definedSymbol symbol="__LDBL_MIN_EXP__=(-16381)"/>
<definedSymbol symbol="__LDBL_MIN_10_EXP__=(-4931)"/>
<definedSymbol symbol="__LDBL_MAX_EXP__=16384"/>
<definedSymbol symbol="__LDBL_MAX_10_EXP__=4932"/>
<definedSymbol symbol="__DECIMAL_DIG__=21"/>
<definedSymbol symbol="__LDBL_MAX__=1.18973149535723176502e+4932L"/>
<definedSymbol symbol="__LDBL_MIN__=3.36210314311209350626e-4932L"/>
<definedSymbol symbol="__LDBL_EPSILON__=1.08420217248550443401e-19L"/>
<definedSymbol symbol="__LDBL_DENORM_MIN__=3.64519953188247460253e-4951L"/>
<definedSymbol symbol="__LDBL_HAS_DENORM__=1"/>
<definedSymbol symbol="__LDBL_HAS_INFINITY__=1"/>
<definedSymbol symbol="__LDBL_HAS_QUIET_NAN__=1"/>
<definedSymbol symbol="__DEC32_MANT_DIG__=7"/>
<definedSymbol symbol="__DEC32_MIN_EXP__=(-94)"/>
<definedSymbol symbol="__DEC32_MAX_EXP__=97"/>
<definedSymbol symbol="__DEC32_MIN__=1E-95DF"/>
<definedSymbol symbol="__DEC32_MAX__=9.999999E96DF"/>
<definedSymbol symbol="__DEC32_EPSILON__=1E-6DF"/>
<definedSymbol symbol="__DEC32_SUBNORMAL_MIN__=0.000001E-95DF"/>
<definedSymbol symbol="__DEC64_MANT_DIG__=16"/>
<definedSymbol symbol="__DEC64_MIN_EXP__=(-382)"/>
<definedSymbol symbol="__DEC64_MAX_EXP__=385"/>
<definedSymbol symbol="__DEC64_MIN__=1E-383DD"/>
<definedSymbol symbol="__DEC64_MAX__=9.999999999999999E384DD"/>
<definedSymbol symbol="__DEC64_EPSILON__=1E-15DD"/>
<definedSymbol symbol="__DEC64_SUBNORMAL_MIN__=0.000000000000001E-383DD"/>
<definedSymbol symbol="__DEC128_MANT_DIG__=34"/>
<definedSymbol symbol="__DEC128_MIN_EXP__=(-6142)"/>
<definedSymbol symbol="__DEC128_MAX_EXP__=6145"/>
<definedSymbol symbol="__DEC128_MIN__=1E-6143DL"/>
<definedSymbol symbol="__DEC128_MAX__=9.999999999999999999999999999999999E6144DL"/>
<definedSymbol symbol="__DEC128_EPSILON__=1E-33DL"/>
<definedSymbol symbol="__DEC128_SUBNORMAL_MIN__=0.000000000000000000000000000000001E-6143DL"/>
<definedSymbol symbol="__REGISTER_PREFIX__="/>
<definedSymbol symbol="__USER_LABEL_PREFIX__=_"/>
<definedSymbol symbol="__USER_LABEL_PREFIX__="/>
<definedSymbol symbol="__VERSION__=&quot;4.5.3&quot;"/>
<definedSymbol symbol="__VERSION__=&quot;4.8.3&quot;"/>
<definedSymbol symbol="__GNUC_GNU_INLINE__=1"/>
<definedSymbol symbol="__NO_INLINE__=1"/>
<definedSymbol symbol="__FINITE_MATH_ONLY__=0"/>
<definedSymbol symbol="__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1=1"/>
<definedSymbol symbol="__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2=1"/>
<definedSymbol symbol="__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4=1"/>
<definedSymbol symbol="__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8=1"/>
<definedSymbol symbol="__PRAGMA_REDEFINE_EXTNAME=1"/>
<definedSymbol symbol="__SIZEOF_INT__=4"/>
<definedSymbol symbol="__SIZEOF_LONG__=4"/>
<definedSymbol symbol="__SIZEOF_LONG__=8"/>
<definedSymbol symbol="__SIZEOF_LONG_LONG__=8"/>
<definedSymbol symbol="__SIZEOF_SHORT__=2"/>
<definedSymbol symbol="__SIZEOF_FLOAT__=4"/>
<definedSymbol symbol="__SIZEOF_DOUBLE__=8"/>
<definedSymbol symbol="__SIZEOF_LONG_DOUBLE__=12"/>
<definedSymbol symbol="__SIZEOF_LONG_DOUBLE__=16"/>
<definedSymbol symbol="__SIZEOF_SIZE_T__=4"/>
<definedSymbol symbol="__SIZEOF_SIZE_T__=8"/>
<definedSymbol symbol="__SIZEOF_WCHAR_T__=2"/>
<definedSymbol symbol="__SIZEOF_WINT_T__=4"/>
<definedSymbol symbol="__SIZEOF_PTRDIFF_T__=4"/>
<definedSymbol symbol="__SIZEOF_PTRDIFF_T__=8"/>
<definedSymbol symbol="__SIZEOF_POINTER__=4"/>
<definedSymbol symbol="__SIZEOF_POINTER__=8"/>
<definedSymbol symbol="__i386=1"/>
<definedSymbol symbol="__i386__=1"/>
<definedSymbol symbol="i386=1"/>
<definedSymbol symbol="__i686=1"/>
<definedSymbol symbol="__i686__=1"/>
<definedSymbol symbol="__pentiumpro=1"/>
<definedSymbol symbol="__pentiumpro__=1"/>
<definedSymbol symbol="_X86_=1"/>
<definedSymbol symbol="__stdcall=__attribute__((__stdcall__))"/>
<definedSymbol symbol="__fastcall=__attribute__((__fastcall__))"/>
<definedSymbol symbol="__cdecl=__attribute__((__cdecl__))"/>
<definedSymbol symbol="_stdcall=__attribute__((__stdcall__))"/>
<definedSymbol symbol="_fastcall=__attribute__((__fastcall__))"/>
<definedSymbol symbol="_cdecl=__attribute__((__cdecl__))"/>
<definedSymbol symbol="__GXX_MERGED_TYPEINFO_NAMES=0"/>
<definedSymbol symbol="__GXX_TYPEINFO_EQUALITY_INLINE=0"/>
<definedSymbol symbol="__declspec(x)=__attribute__((x))"/>
<definedSymbol symbol="__BIGGEST_ALIGNMENT__=16"/>
<definedSymbol symbol="__CYGWIN32__=1"/>
<definedSymbol symbol="__CYGWIN__=1"/>
<definedSymbol symbol="unix=1"/>
<definedSymbol symbol="__unix__=1"/>
<definedSymbol symbol="__unix=1"/>
<definedSymbol symbol="SYSTEM_BUS_WIDTH=32"/>
<definedSymbol symbol="__hal__=1"/>
<definedSymbol symbol="ALT_NO_INSTRUCTION_EMULATION=1"/>
<definedSymbol symbol="ALT_SINGLE_THREADED=1"/>
<definedSymbol symbol="__ATOMIC_RELAXED=0"/>
<definedSymbol symbol="__ATOMIC_SEQ_CST=5"/>
<definedSymbol symbol="__ATOMIC_ACQUIRE=2"/>
<definedSymbol symbol="__ATOMIC_RELEASE=3"/>
<definedSymbol symbol="__ATOMIC_ACQ_REL=4"/>
<definedSymbol symbol="__ATOMIC_CONSUME=1"/>
<definedSymbol symbol="__pic__=1"/>
<definedSymbol symbol="__PIC__=1"/>
<definedSymbol symbol="_LP64=1"/>
<definedSymbol symbol="__LP64__=1"/>
<definedSymbol symbol="__ORDER_LITTLE_ENDIAN__=1234"/>
<definedSymbol symbol="__ORDER_BIG_ENDIAN__=4321"/>
<definedSymbol symbol="__ORDER_PDP_ENDIAN__=3412"/>
<definedSymbol symbol="__BYTE_ORDER__=__ORDER_LITTLE_ENDIAN__"/>
<definedSymbol symbol="__FLOAT_WORD_ORDER__=__ORDER_LITTLE_ENDIAN__"/>
<definedSymbol symbol="__FLT_DECIMAL_DIG__=9"/>
<definedSymbol symbol="__DBL_DECIMAL_DIG__=17"/>
<definedSymbol symbol="__GCC_ATOMIC_BOOL_LOCK_FREE=2"/>
<definedSymbol symbol="__GCC_ATOMIC_CHAR_LOCK_FREE=2"/>
<definedSymbol symbol="__GCC_ATOMIC_CHAR16_T_LOCK_FREE=2"/>
<definedSymbol symbol="__GCC_ATOMIC_CHAR32_T_LOCK_FREE=2"/>
<definedSymbol symbol="__GCC_ATOMIC_WCHAR_T_LOCK_FREE=2"/>
<definedSymbol symbol="__GCC_ATOMIC_SHORT_LOCK_FREE=2"/>
<definedSymbol symbol="__GCC_ATOMIC_INT_LOCK_FREE=2"/>
<definedSymbol symbol="__GCC_ATOMIC_LONG_LOCK_FREE=2"/>
<definedSymbol symbol="__GCC_ATOMIC_LLONG_LOCK_FREE=2"/>
<definedSymbol symbol="__GCC_ATOMIC_TEST_AND_SET_TRUEVAL=1"/>
<definedSymbol symbol="__GCC_ATOMIC_POINTER_LOCK_FREE=2"/>
<definedSymbol symbol="__SIZEOF_INT128__=16"/>
<definedSymbol symbol="__amd64=1"/>
<definedSymbol symbol="__amd64__=1"/>
<definedSymbol symbol="__x86_64=1"/>
<definedSymbol symbol="__x86_64__=1"/>
<definedSymbol symbol="__ATOMIC_HLE_ACQUIRE=65536"/>
<definedSymbol symbol="__ATOMIC_HLE_RELEASE=131072"/>
<definedSymbol symbol="__k8=1"/>
<definedSymbol symbol="__k8__=1"/>
<definedSymbol symbol="__code_model_medium__=1"/>
<definedSymbol symbol="__MMX__=1"/>
<definedSymbol symbol="__SSE__=1"/>
<definedSymbol symbol="__SSE2__=1"/>
<definedSymbol symbol="__FXSR__=1"/>
<definedSymbol symbol="__SSE_MATH__=1"/>
<definedSymbol symbol="__SSE2_MATH__=1"/>
<definedSymbol symbol="__SEH__=1"/>
<definedSymbol symbol="__thiscall=__attribute__((__thiscall__))"/>
<definedSymbol symbol="_thiscall=__attribute__((__thiscall__))"/>
<definedSymbol symbol="__DECIMAL_BID_FORMAT__=1"/>
</collector>
</instance>
</scannerInfo>

Eclipse CDT Invalid Project Path

Eclipse BSP-Project uses Nios II extensions

<nature>com.altera.sbtgui.project.SBTGUIBspNature</nature>
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
	<name>hcpp_bsp</name>
	<comment></comment>
	<projects>
	</projects>
	<buildSpec>
		<buildCommand>
			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
			<triggers>clean,full,incremental,</triggers>
			<arguments>
			</arguments>
		</buildCommand>
		<buildCommand>
			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
			<triggers>full,incremental,</triggers>
			<arguments>
			</arguments>
		</buildCommand>
	</buildSpec>
	<natures>
		<nature>org.eclipse.cdt.core.cnature</nature>
		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
		<nature>org.eclipse.cdt.core.ccnature</nature>
		<nature>com.altera.sbtgui.project.SBTGUINature</nature>
		<nature>com.altera.sbtgui.project.SBTGUICustomAppNature</nature>
		<nature>com.altera.sbtgui.project.SBTGUIBspNature</nature>
	</natures>
</projectDescription>

Use Folding / Expand / Collapse

eclipse_keys eclipse_folding

How to collapse blocks of code in Eclipse?
Is there a way to collapse all code blocks in Eclipse?

JTAG on Linux

$ jtagconfig 
1) USB-Blaster variant [6-2]
  Unable to lock chain - Insufficient port permissions

Altera USB-Blaster with Ubuntu 14.04

# For Altera USB-Blaster permissions.
SUBSYSTEM=="usb",\
ENV{DEVTYPE}=="usb_device",\
ATTR{idVendor}=="09fb",\
ATTR{idProduct}=="6010",\
MODE="0666",\
NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}",\
RUN+="/bin/chmod 0666 %c"
$ sudo udevadm control --reload
$ jtagd --foreground --debug
JTAG daemon started
Using config file /etc/jtagd/jtagd.conf
Remote JTAG permitted when password set
No USB device change detection because libudev.so.0 not found
USB-Blaster port (/dev/bus/usb/006/002) open failed (13)
USB-Blaster added "USB-Blaster variant [6-2]"

Ubuntu 13.04 (64 bit) won’t launch Brackets, libudev.so.0
The solution of lacking libudev.so.0

$ sudo ln -s /lib/x86_64-linux-gnu/libudev.so.1 /lib/x86_64-linux-gnu/libudev.so.0

Un-plug and re-plug the USB Blaster!!!

$ jtagd --foreground --debug
JTAG daemon started
Using config file /etc/jtagd/jtagd.conf
Remote JTAG permitted when password set
USB-Blaster "USB-Blaster" firmware version 4.00
USB-Blaster endpoints out=02(64), in=81(64); urb size=1024
USB-Blaster added "USB-Blaster [6-2]"
$ sudo killall -9 jtagd
$ jtagconfig 
1) USB-Blaster [6-2]
  020F70DD   EP3C120/EP4CE115

Reset NIOS by software

Can I perform a software reset on a Nios II embedded processor?

    NIOS2_WRITE_STATUS(0);
    NIOS2_WRITE_IENABLE(0);
    ((void (*) (void)) NIOS2_RESET_ADDR) ();

nRF24L01

Libraries:

Network Layer for RF24 Radios
maniacbug/RF24Network

ST32F4 discovery – Freetos 1.6 – HC-SR04 – DHT11
nRF24L01 library for PIC microcontrollers
AVR-Lib nRF24L01
Arduino nRF24L01
Arduino driver for nRF24L01

Tutorials:

nRF24L01 2.4GHz Radio/Wireless Transceivers How-To
RF24 library revisited
Setup Nordic nRF24L01 RF modules to both Arduino UNO and Raspberry Pi

2.4GHz RF Radio Transceivers and Library
Low-Power Wireless Sensor Node
Getting Started with nRF24L01+ on Arduino
nRF24L01+ Running on Maple
Nordic FOB and nRF24L01+
Getting Started with nRF24L01+ using a Protoshield

nRF24L01 in a star network configuration
nRF24L01+ as MultiCeiver without ACK, is it possible?

AVR Tutorials

Wikibooks: C-Programmierung mit AVR-GCC

mikrocontroller.net: AVR-GCC-Tutorial
mikrocontroller.net: AVR-GCC-Tutorial/LCD-Ansteuerung
mikrocontroller.net: AVR-GCC-Tutorial/Analoge Ein- und Ausgabe
mikrocontroller.net: AVR-ASM-Tutorial
mikrocontroller.net: Bitmanipulation

Pin Change Interrupt (PCINT) mit dem ATMega oder Arduino
Pin-change interrupts on Arduino

Tuxgraphics: AVR C-programming tutorial

RN-Wissen: AVR
RN-Wissen: AVR-Einstieg leicht gemacht
RN-Wissen: AVR-GCC

conelek: AVR C: Softwareentwicklung mit dem AVR Studio 5

ladyada: AVR Tutorial

SiSy avr-cpp: AVR C++ Tutorial

Stepper motor / Schrittmotor

NEMA standard

Umrechnung

Convert oz-in to N-m
Convert Inch ounce-force, Torque
Conversion Calculator
umberfactory: Torque Conversions

In Großbritannien (UK) und in den Vereinigten Staaten von Amerika (US) ist das Avoirdupois-System (avdp-System) gebräuchlich:

1 Pound [lb]      = 16 Ounces [oz] = 256 Drams [dr] = 7000 Grains [gr]
1 Short Ton [tn]  = 2000 Pounds [lb]
1 Long Ton [l.tn] = 2240 Pounds [lb]
1,0 Pound [lb]    = 0,45359237 Kilogramm [kg]

NEMA Toleranzen:

NEMA17
42 mm        = 1.65354 inches
1.7 inches   = 43.18 mm

NEMA 23
57 mm        = 2.24409 inches
2.3 inches   = 58.42 mm

Stepper Motor

Wantai Motor
Longs Motor

Manufacturer Model NEMA Nr. Rate Current (A) Resistance (Ω/phase) Inductance (mH/phase) Holding Torque (g-cm) Holding Torque (kg-cm) Holding Torque (N-cm) Holding Torque (oz-in) Motor Length (mm)
Wantai Motor 42BYGHW208 17 0.4 A 30 Ω 37 mH 2800 2.8 27.458 38.884 34
Wantai Motor 42BYGHW804 17 1.2 A 3 Ω 5 mH 4500 4.5 44.129 62.493 48
Wantai Motor 42BYGHW811 17 2.5 A 1.5 Ω 1.8 mH 4800 4.8 47.072 66.659 48
Wantai Motor 57BYGH115-003 23 3 A 2.1 Ω 30’000 30 294.200 416.622 115
Wantai Motor 57STH115-4204A 23 4.2 A 0.9 Ω 30’000 30 294.200 416.622 115
Longs Motor 17HS0413 17 1.3 A 3.2 Ω 5.5 mH 5302.502 5.302 52 73.638 48
Longs Motor 17HS0417 17 1.7 A 1.8 Ω 3.2 mH 5302.502 5.302 52 73.638 48

eBay

Rattr Motor – infoshine15 (Email: sale2@rattmmotor.com, MSN: tonyswj@hotmail.com) [Longs Motor?]
Longs Motor – longsmotor99 (MSN: marychen1987@hotmail.com, Skype: marychen198711)

Military quality! Nema17 CNC Stepper motor 60mm/95 Oz-in/ 1.8A Military motor
German Ship&Free Ship: 10 pcs Nema 17 stepper motor 2.5A 48mm 48N.CM 3D pinter
10 pcs Nema 17 stepper motor with 68 oz.in, 4 leads 2.5A CNC
10pcs Nema 17 stepper motor 75 oz.in bipolar CNC PLASMA

Stepper Driver

  • TI DRV8824
  • TI DRV8825
  • Allegro A4982
  • Allegro A4983
  • Allegro A4988 (like A4983, overcurrent protection, internal 100k pull-down on MS1 microstep selection pin)
  • Toshiba TB6560AHQ

Spannung

Die Schrittmotor-FAQ

Frage

Warum soll ich die SM-Karte mit 24Volt oder mehr betreiben, wenn auf dem Motor 5,1 Volt steht? Wird der nicht überlastet?

Antwort

Zumindest bei den hier vorgestellten Schaltungen, aber auch bei den meisten anderen Schaltungen mit 1 Ampere oder mehr Wicklungsstrom, handelt es sich um stromgeregelte Schaltungen. Dabei sorgt der Stromregler dafür, das der Motor nur soviel Strom ‘bekommt’, wie eingestellt wurde (in der Regel also der Nennstrom des Motors). Dies wird durch häufiges Ein- und Ausschalten der Motorwicklung erreicht. Der Stromregler arbeitet also wie ein (Abwärts)-Schaltregler. Am Motor stellt sich (nach dem Ohm’schen Gesetz) quasi automatisch die Nennspannung des Motors ein.

Drehmomentkurve

Schrittmotor Schritte pro Sekunde
Super Grobi: Im Datenblatt des Schrittmotors siehst Du die Drehmomentkurve, also welche Kraft der Motor bei welcher Schrittrate leistet. Die Kurve endet irgendwo bei 4000 Schritten/Sekunde. Der Motor hat einen Schrittwinkel von 1,8° also 200 Schritte pro Umdrehung. Daher kannst Du Also maximal 4000/200 = 20 U/sek oder 1200 U/min erreichen. Die maximale Kraft hat der Motor im Bereich von
1000..1500 Schritten pro Sekunde.

Schrittverlust

Schrittmotor Schritte pro Sekunde
Super Grobi: Du must auf jeden Fall eine Anfahr- und eine Bremsrampe fahren die je nach Belstung flacher oder steiler seinen darf. Gibst Du sofort 1500 Schritte drauf, wird der Motor vermutlich nicht drehen. Er brummt dann nur und “verliert” die Schritte. Die Bremsrampe brauchst Du weil der Motor bei ruckartigem Ausschalten der Schritte weiterdrehen würde und Du dann die Schrittposition nicht mehr kennst. Die Bremsrampe kann i.d.R. steiler sein als die Beschleunigungsrampe.
Schrittverlust kann auch beim Fahren auftreten, wenn die Belastung im Grenzbereich ist. Das merkt man nicht unbedingt sofort. Erst wenn der Motor bei z.B. 1000 Schritten vorwärts und 1000 Schritten rückwärts nicht wieder am Ausgangspunkt landet, weist Du das etwas falsch läuft.
Ansonsten kannst Du natürlich auch eine einfache lineare Steigung programmieren.

Überhitzung

Schrittmotor Schritte pro Sekunde
Super Grobi: Beim Schrittverlust wird die zugeführte Energie in Wärme umgewandelt, nicht in Umdrehung. Solange der Motor dadurch nicht überhitzt, geht er auch nicht kaputt.

AVR: avr-libc Internals

pgm_read_byte()

Abstract

The pgm_read_byte() is a macro that reads a byte of data stored in a specified address(PROGMEM area).

Source Code

The pgm_read_byte() is defined in hardware/tools/avr/avr/include/avr/pgmspace.h as below.

#define pgm_read_byte(address_short)    pgm_read_byte_near(address_short)

The input is address_short and calls the pgm_read_byte_near() macro.

pgm_read_byte_near()

Abstract

The pgm_read_byte_near() is a macro that reads a byte of data stored in a specified address(PROGMEM area).

Source Code

The pgm_read_byte_near() is defined in hardware/tools/avr/avr/include/avr/pgmspace.h as below.

#define pgm_read_byte_near(address_short) __LPM((uint16_t)(address_short))

The input is address_short and the macro converts the address_short to uint16_t, then calls __LPM() macro.

__LPM()

Abstract

The __LPM() is a macro that reads a byte of data stored in a specified address(PROGMEM area).

Source Code

The __LPM() is defined in hardware/tools/avr/avr/include/avr/pgmspace.h as below.

#define __LPM(addr)         __LPM_enhanced__(addr)

The input is addr and just calls __LPM_enhanced__().
See Intrinsic Functions

__LPM_enhanced__()

Abstract

The __LPM_enhanced() is an assembler code that reads a byte of data stored in a specified address(PROGMEM area).

Source Code

The __LPM_enhanced() is defined in hardware/tools/avr/avr/include/avr/pgmspace.h as below.

#define __LPM_enhanced__(addr)  \
(__extension__({                \
    uint16_t __addr16 = (uint16_t)(addr); \
    uint8_t __result;           \
    __asm__                     \
    (                           \
        "lpm %0, Z" "\n\t"      \
        : "=r" (__result)       \
        : "z" (__addr16)        \
    );                          \
    __result;                   \
}))

or newer avr-libc

#define __LPM_classic__(addr)   \
(__extension__({                \
    uint16_t __addr16 = (uint16_t)(addr); \
    uint8_t __result;           \
    __asm__                     \
    (                           \
        "lpm" "\n\t"            \
        "mov %0, r0" "\n\t"     \
        : "=r" (__result)       \
        : "z" (__addr16)        \
        : "r0"                  \
    );                          \
    __result;                   \
}))

The lpm, short for Load Program Memory, is a instruction that reads a byte of data from PROGMEM area. It substitue a data at addr for __result, then returns the __result.

Sources:
pgm_read_byte() marco
pgm_read_byte_near() marco
__LPM() marco
__LPM_enhanced__() marco