lwIP internals

lwipopts.h
Native API (RAW) (see also lwip-1.4.1/doc/rawapi.txt)
IPv6
LwIP IPv4/IPv6 stacks
Available device drivers
LwIP with or without an operating system
Porting For Bare Metal
Porting for an OS

Nios updated port and demo for NiosEDS 11.0 and up (includes LwIP)
Using Lightweight IP with the Nios II Processor Tutorial

Commiter

http://git.savannah.gnu.org/cgit/lwip.git
http://git.savannah.gnu.org/cgit/lwip/lwip-contrib.git

The Big eCommerce Conference: Simon Goldschmidt
Facebook: Simon Goldschmidt

VLAN

Mailinglist

Add support for outgoing VLAN tags?
from Simon Goldschmidt
from address@hidden
from Dance, Brian
from web

Tasks

task #9033 Support IEEE 802.1q tagged frame (VLAN) (Commited: 21.012.2009, Done: 25.08.2009)
task #11620 Add outgoing VLAN PCP support for Ethernet level QoS (Commited: 01.12.2011, Done: 01.12.2011)

Patches

patch #7993 Add support for transmitting packets with VLAN headers (Commited: 03.04.2013, Done: 20.02.2014)

Code

/**
 * ETHARP_SUPPORT_VLAN==1: support receiving and sending ethernet packets with
 * VLAN header. See the description of LWIP_HOOK_VLAN_CHECK and
 * LWIP_HOOK_VLAN_SET hooks to check/set VLAN headers.
 * Additionally, you can define ETHARP_VLAN_CHECK to an u16_t VLAN ID to check.
 * If ETHARP_VLAN_CHECK is defined, only VLAN-traffic for this VLAN is accepted.
 * If ETHARP_VLAN_CHECK is not defined, all traffic is accepted.
 * Alternatively, define a function/define ETHARP_VLAN_CHECK_FN(eth_hdr, vlan)
 * that returns 1 to accept a packet or 0 to drop a packet.
 */
#ifndef ETHARP_SUPPORT_VLAN
#define ETHARP_SUPPORT_VLAN             1
#endif

/**
 * LWIP_HOOK_VLAN_CHECK(netif, eth_hdr, vlan_hdr):
 * - called from ethernet_input() if VLAN support is enabled
 * - netif: struct netif on which the packet has been received
 * - eth_hdr: struct eth_hdr of the packet
 * - vlan_hdr: struct eth_vlan_hdr of the packet
 * Return values:
 * - 0: Packet must be dropped.
 * - != 0: Packet must be accepted.
 */

/**
 * LWIP_HOOK_VLAN_SET(netif, eth_hdr, vlan_hdr):
 * - called from etharp_raw() and etharp_send_ip() if VLAN support is enabled
 * - netif: struct netif that the packet will be sent through
 * - eth_hdr: struct eth_hdr of the packet
 * - vlan_hdr: struct eth_vlan_hdr of the packet
 * Return values:
 * - 0: Packet shall not contain VLAN header.
 * - != 0: Packet shall contain VLAN header.
 * Hook can be used to set prio_vid field of vlan_hdr.
 */
#if ETHARP_SUPPORT_VLAN
  if (type == PP_HTONS(ETHTYPE_VLAN)) {
    struct eth_vlan_hdr *vlan = (struct eth_vlan_hdr*)(((char*)ethhdr) + SIZEOF_ETH_HDR);
    if (p->len <= SIZEOF_ETH_HDR + SIZEOF_VLAN_HDR) {
      /* a packet with only an ethernet/vlan header (or less) is not valid for us */
      ETHARP_STATS_INC(etharp.proterr);
      ETHARP_STATS_INC(etharp.drop);
      goto free_and_return;
    }
#if defined(LWIP_HOOK_VLAN_CHECK) || defined(ETHARP_VLAN_CHECK) || defined(ETHARP_VLAN_CHECK_FN) /* if not, allow all VLANs */
#ifdef LWIP_HOOK_VLAN_CHECK
    if (!LWIP_HOOK_VLAN_CHECK(netif, ethhdr, vlan)) {
#elif defined(ETHARP_VLAN_CHECK_FN)
    if (!ETHARP_VLAN_CHECK_FN(ethhdr, vlan)) {
#elif defined(ETHARP_VLAN_CHECK)
    if (VLAN_ID(vlan) != ETHARP_VLAN_CHECK) {
#endif
      /* silently ignore this packet: not for our VLAN */
      pbuf_free(p);
      return ERR_OK;
    }
#endif /* defined(LWIP_HOOK_VLAN_CHECK) || defined(ETHARP_VLAN_CHECK) || defined(ETHARP_VLAN_CHECK_FN) */
    type = vlan->tpid;
    ip_hdr_offset = SIZEOF_ETH_HDR + SIZEOF_VLAN_HDR;
  }
#endif /* ETHARP_SUPPORT_VLAN */

STM32 & FreeRTOS

lwIP replies ping request with reply of an earlier request (packages out off sync)

Nios II

Nios II + LWIP_RAND() + IGMP

IPv4 (deprecated)

IPv4

/* This is the aligned version of ip_addr_t,
   used as local variable, on the stack, etc. */
struct ip_addr {
  u32_t addr;
};

/* This is the packed version of ip_addr_t,
   used in network headers that are itself packed */
struct ip_addr_packed {
  PACK_STRUCT_FIELD(u32_t addr);
};

/*
 * struct ipaddr2 is used in the definition of the ARP packet format in
 * order to support compilers that don't have structure packing.
 */
struct ip_addr2 {
  PACK_STRUCT_FIELD(u16_t addrw[2]);
};

/** ip_addr_t uses a struct for convenience only, so that the same defines can
 * operate both on ip_addr_t as well as on ip_addr_p_t. */
typedef struct ip_addr ip_addr_t;
typedef struct ip_addr_packed ip_addr_p_t;
/**
 * This function is called by the network interface device driver when
 * an IP packet is received. The function does the basic checks of the
 * IP header such as packet size being at least larger than the header
 * size etc. If the packet was not destined for us, the packet is
 * forwarded (using ip_forward). The IP checksum is always checked.
 *
 * Finally, the packet is sent to the upper layer protocol input function.
 * 
 * @param p the received IP packet (p->payload points to IP header)
 * @param inp the netif on which this packet was received
 * @return ERR_OK if the packet was processed (could return ERR_* if it wasn't
 *         processed, but currently always returns ERR_OK)
 */
err_t
ip_input(struct pbuf *p, struct netif *inp)
{
    [...]
}

IPv6

Neighbor Discovery Protocol (NDP)

/** Router advertisement message header. */
struct ra_header {
  PACK_STRUCT_FIELD(u8_t         type);
  PACK_STRUCT_FIELD(u8_t         code);
  PACK_STRUCT_FIELD(u16_t        chksum);
  PACK_STRUCT_FIELD(u8_t         current_hop_limit);
  PACK_STRUCT_FIELD(u8_t         flags);
  PACK_STRUCT_FIELD(u16_t        router_lifetime);
  PACK_STRUCT_FIELD(u32_t        reachable_time);
  PACK_STRUCT_FIELD(u32_t        retrans_timer);
  /* Options follow. */
} PACK_STRUCT_STRUCT;

#define ND6_OPTION_TYPE_SOURCE_LLADDR <--
#define ND6_OPTION_TYPE_MTU
#define ND6_OPTION_TYPE_PREFIX_INFO   <--
#define ND6_OPTION_TYPE_ROUTE_INFO

#define ND6_PREFIX_FLAG_ON_LINK        (0x80)
#define ND6_PREFIX_FLAG_AUTONOMOUS     (0x40)
#define ND6_PREFIX_FLAG_ROUTER_ADDRESS (0x20)
#define ND6_PREFIX_FLAG_SITE_PREFIX    (0x10)

struct prefix_option {
  PACK_STRUCT_FIELD(u8_t         type);
  PACK_STRUCT_FIELD(u8_t         length);
  PACK_STRUCT_FIELD(u8_t         prefix_length);
  PACK_STRUCT_FIELD(u8_t         flags);
  PACK_STRUCT_FIELD(u32_t        valid_lifetime);
  PACK_STRUCT_FIELD(u32_t        preferred_lifetime);
  PACK_STRUCT_FIELD(u8_t         reserved2[3]);
  PACK_STRUCT_FIELD(u8_t         site_prefix_length);
  PACK_STRUCT_FIELD(ip6_addr_p_t prefix);
} PACK_STRUCT_STRUCT;

struct lladdr_option {
  PACK_STRUCT_FIELD(u8_t         type);
  PACK_STRUCT_FIELD(u8_t         length);
  PACK_STRUCT_FIELD(u8_t         addr[NETIF_MAX_HWADDR_LEN]);
} PACK_STRUCT_STRUCT;

enum nd6_neighbor_cache_entry_state {
  ND6_NO_ENTRY = 0,
  ND6_INCOMPLETE,
  ND6_REACHABLE,
  ND6_STALE,
  ND6_DELAY,
  ND6_PROBE
};

/* Struct for tables. */
struct nd6_neighbor_cache_entry {
  ip6_addr_t           next_hop_address;
  struct netif        *netif;
  u8_t                 lladdr[NETIF_MAX_HWADDR_LEN];
  /** Pointer to queue of pending outgoing packets on this entry. */
  struct nd6_q_entry  *q;
  u8_t                 state;
  u8_t                 isrouter;
  union {
    u32_t              reachable_time;
    u32_t              delay_time;
    u32_t              probes_sent;
    u32_t              stale_time;
  }                    counter;
};

default_router_list[i];
prefix_list[i];
neighbor_cache[i];
neighbor_cache[neighbor_index];

static void nd6_send_q(s8_t i)
Thread [1] (Suspended)	
	12 nd6_new_onlink_prefix() nd6.c:1401 0x100277c8	
	11 nd6_input() nd6.c:466 0x10024570
           [...]

Thread [1] (Suspended)	
	12 nd6_new_router() nd6.c:1333 0x10027464	
	11 nd6_input() nd6.c:386 0x1002413c	
	10 icmp6_input() icmp6.c:116 0x1001dd40	
	9 ip6_input() ip6.c:689 0x1001f9b0	
	8 ethernet_input() etharp.c:1465 0x1003da38	
	7 lwip_enet_input() lwip_enet.c:74 0x10015d48	
	6 ptp2_port_receive() ptp2_port.c:315 0x10011f90	
	5 ptp2_port_task_rx() ptp2_port.c:239 0x10011bf8	
	4 ptp2_master_mainloop() ptp2_master.c:142 0x1000d6b4	
	3 main() main.c:73 0x1003dbfc	
	2 alt_main() alt_main.c:154 0x1004f77c	
	1 _start() crt0.S:437 0x10000204	

Ping / ICMP

ICMP
Is there and ‘ping’ function?
ICMP ping send/receive

ARP

ARP
RFC 826: An Ethernet Address Resolution Protocol

/**
 * LWIP_ARP==1: Enable ARP functionality.
 */
#ifndef LWIP_ARP
#define LWIP_ARP                        1
#endif

/**
 * ARP_TABLE_SIZE: Number of active MAC-IP address pairs cached.
 */
#ifndef ARP_TABLE_SIZE
#define ARP_TABLE_SIZE                  10
#endif

/**
 * ARP_QUEUEING==1: Multiple outgoing packets are queued during hardware address
 * resolution. By default, only the most recent packet is queued per IP address.
 * This is sufficient for most protocols and mainly reduces TCP connection
 * startup time. Set this to 1 if you know your application sends more than one
 * packet in a row to an IP address that is not in the ARP cache.
 */
#ifndef ARP_QUEUEING
#define ARP_QUEUEING                    1
#endif

/**
 * ETHARP_TRUST_IP_MAC==1: Incoming IP packets cause the ARP table to be
 * updated with the source MAC and IP addresses supplied in the packet.
 * You may want to disable this if you do not trust LAN peers to have the
 * correct addresses, or as a limited approach to attempt to handle
 * spoofing. If disabled, lwIP will need to make a new ARP request if
 * the peer is not already in the ARP table, adding a little latency.
 * The peer *is* in the ARP table if it requested our address before.
 * Also notice that this slows down input processing of every IP packet!
 */
#ifndef ETHARP_TRUST_IP_MAC
#define ETHARP_TRUST_IP_MAC             1
#endif

/**
 * ETHARP_SUPPORT_VLAN==1: support receiving ethernet packets with VLAN header.
 * Additionally, you can define ETHARP_VLAN_CHECK to an u16_t VLAN ID to check.
 * If ETHARP_VLAN_CHECK is defined, only VLAN-traffic for this VLAN is accepted.
 * If ETHARP_VLAN_CHECK is not defined, all traffic is accepted.
 * Alternatively, define a function/define ETHARP_VLAN_CHECK_FN(eth_hdr, vlan)
 * that returns 1 to accept a packet or 0 to drop a packet.
 */
#ifndef ETHARP_SUPPORT_VLAN
#define ETHARP_SUPPORT_VLAN             0
#endif
/** the ARP message, see RFC 826 ("Packet format") */
struct etharp_hdr {
  PACK_STRUCT_FIELD(u16_t hwtype);
  PACK_STRUCT_FIELD(u16_t proto);
  PACK_STRUCT_FIELD(u8_t  hwlen);
  PACK_STRUCT_FIELD(u8_t  protolen);
  PACK_STRUCT_FIELD(u16_t opcode);
  PACK_STRUCT_FIELD(struct eth_addr shwaddr);
  PACK_STRUCT_FIELD(struct ip_addr2 sipaddr);
  PACK_STRUCT_FIELD(struct eth_addr dhwaddr);
  PACK_STRUCT_FIELD(struct ip_addr2 dipaddr);
} PACK_STRUCT_STRUCT;
/**
 * Update (or insert) a IP/MAC address pair in the ARP cache.
 *
 * If a pending entry is resolved, any queued packets will be sent
 * at this point.
 * 
 * @param netif netif related to this entry (used for NETIF_ADDRHINT)
 * @param ipaddr IP address of the inserted ARP entry.
 * @param ethaddr Ethernet address of the inserted ARP entry.
 * @param flags @see definition of ETHARP_FLAG_*
 *
 * @return
 * - ERR_OK Succesfully updated ARP cache.
 * - ERR_MEM If we could not add a new ARP entry when ETHARP_FLAG_TRY_HARD was set.
 * - ERR_ARG Non-unicast address given, those will not appear in ARP cache.
 *
 * @see pbuf_free()
 */
static err_t
etharp_update_arp_entry(struct netif *netif, ip_addr_t *ipaddr, struct eth_addr *ethaddr, u8_t flags)
{
    [...]
}
  /* ARP message directed to us?
      -> add IP address in ARP cache; assume requester wants to talk to us,
         can result in directly sending the queued packets for this host.
     ARP message not directed to us?
      ->  update the source IP address in the cache, if present */
  etharp_update_arp_entry(netif, &sipaddr, &(hdr->shwaddr),
                   for_us ? ETHARP_FLAG_TRY_HARD : ETHARP_FLAG_FIND_ONLY);
Thread [1] (Suspended)	
	10 lwip_enet_low_level_output() lwip_enet.c:131 0x1002e640 [via netif->linkoutput()]
	9 etharp_arp_input() etharp.c:807 0x1002d374	
	8 ethernet_input() etharp.c:1372 0x1002e38c [via netif->input()]
	7 lwip_enet_input() lwip_enet.c:74 0x1002e4d0	
	6 ptp2_port_receive() ptp2_port.c:301 0x10011f48	
	5 ptp2_port_task_rx() ptp2_port.c:214 0x10011bac	
	4 ptp2_master_mainloop() ptp2_master.c:142 0x1000d6f8	
	3 main() main.c:73 0x1002e92c	
	2 alt_main() alt_main.c:154 0x10040340	
	1 _start() crt0.S:437 0x10000204	

Memory Pools – Dynamic pool memory manager

lwIP has dedicated pools for many structures (netconn, protocol control blocks, packet buffers, …). All these pools are managed here.

/**
 * MEM_LIBC_MALLOC==1: Use malloc/free/realloc provided by your C-library
 * instead of the lwip internal allocator. Can save code size if you
 * already use it.
 */
#ifndef MEM_LIBC_MALLOC
#define MEM_LIBC_MALLOC                 0
#endif

/**
* MEMP_MEM_MALLOC==1: Use mem_malloc/mem_free instead of the lwip pool allocator.
* Especially useful with MEM_LIBC_MALLOC but handle with care regarding execution
* speed and usage from interrupts!
*/
#ifndef MEMP_MEM_MALLOC
#define MEMP_MEM_MALLOC                 0
#endif

/**
 * MEMP_SEPARATE_POOLS: if defined to 1, each pool is placed in its own array.
 * This can be used to individually change the location of each pool.
 * Default is one big array for all pools
 */
#ifndef MEMP_SEPARATE_POOLS
#define MEMP_SEPARATE_POOLS             0
#endif
/**
 * MEM_USE_POOLS==1: Use an alternative to malloc() by allocating from a set
 * of memory pools of various sizes. When mem_malloc is called, an element of
 * the smallest pool that can provide the length needed is returned.
 * To use this, MEMP_USE_CUSTOM_POOLS also has to be enabled.
 */
#ifndef MEM_USE_POOLS
#define MEM_USE_POOLS                   0
#endif

On the fly enum memp_t { MEMP_ARP_QUEUE, […] }


/* Create the list of all memory pools managed by memp. MEMP_MAX represents a NULL pool at the end */
typedef enum {
#define LWIP_MEMPOOL(name,num,size,desc)  MEMP_##name,
#include "lwip/memp_std.h"
  MEMP_MAX
} memp_t;

/* it not defines macros, but uses it */
LWIP_MEMPOOL(RAW_PCB,        MEMP_NUM_RAW_PCB,         sizeof(struct raw_pcb),        "RAW_PCB")
LWIP_MEMPOOL(UDP_PCB,        MEMP_NUM_UDP_PCB,         sizeof(struct udp_pcb),        "UDP_PCB")
LWIP_MEMPOOL(TCP_PCB,        MEMP_NUM_TCP_PCB,         sizeof(struct tcp_pcb),        "TCP_PCB")
LWIP_MEMPOOL(TCP_PCB_LISTEN, MEMP_NUM_TCP_PCB_LISTEN,  sizeof(struct tcp_pcb_listen), "TCP_PCB_LISTEN")
LWIP_MEMPOOL(TCP_SEG,        MEMP_NUM_TCP_SEG,         sizeof(struct tcp_seg),        "TCP_SEG")
LWIP_MEMPOOL(REASSDATA,      MEMP_NUM_REASSDATA,       sizeof(struct ip_reassdata),   "REASSDATA")
LWIP_MEMPOOL(ARP_QUEUE,      MEMP_NUM_ARP_QUEUE,       sizeof(struct etharp_q_entry), "ARP_QUEUE")
LWIP_MEMPOOL(SYS_TIMEOUT,    MEMP_NUM_SYS_TIMEOUT,     sizeof(struct sys_timeo),      "SYS_TIMEOUT")
/*
 * A list of pools of pbuf's used by LWIP.
 *
 * LWIP_PBUF_MEMPOOL(pool_name, number_elements, pbuf_payload_size, pool_description)
 *     creates a pool name MEMP_pool_name. description is used in stats.c
 *     This allocates enough space for the pbuf struct and a payload.
 *     (Example: pbuf_payload_size=0 allocates only size for the struct)
 */
LWIP_PBUF_MEMPOOL(PBUF,      MEMP_NUM_PBUF,            0,                             "PBUF_REF/ROM")
LWIP_PBUF_MEMPOOL(PBUF_POOL, PBUF_POOL_SIZE,           PBUF_POOL_BUFSIZE,             "PBUF_POOL")

#if !MEMP_MEM_MALLOC /* don't build if not configured for use in lwipopts.h */

struct memp {
  struct memp *next;
};

/*====== re-defines LWIP_MEMPOOL each time  ======*/

/** This array holds the first free element of each pool.
 *  Elements form a linked list. */
static struct memp *memp_tab[MEMP_MAX];

/** This array holds the element sizes of each pool. */
static const u16_t memp_sizes[MEMP_MAX] = {
#define LWIP_MEMPOOL(name,num,size,desc)  LWIP_MEM_ALIGN_SIZE(size),
#include "lwip/memp_std.h"
};

/** This array holds the number of elements in each pool. */
static const u16_t memp_num[MEMP_MAX] = {
#define LWIP_MEMPOOL(name,num,size,desc)  (num),
#include "lwip/memp_std.h"
};

/** This is the actual memory used by the pools (all pools in one big block). */
static u8_t memp_memory[MEM_ALIGNMENT - 1 
#define LWIP_MEMPOOL(name,num,size,desc) + ( (num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size) ) )
#include "lwip/memp_std.h"
];

/**
 * Get an element from a specific pool.
 *
 * @param type the pool to get an element from
 *
 * @return a pointer to the allocated memory or a NULL pointer on error
 */
void *
memp_malloc(memp_t type)
{
    [...]
}

Mutexes and Semaphores

/**
 * SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain
 * critical regions during buffer allocation, deallocation and memory
 * allocation and deallocation.
 */
#ifndef SYS_LIGHTWEIGHT_PROT
#define SYS_LIGHTWEIGHT_PROT            0
#endif
#if SYS_LIGHTWEIGHT_PROT

/** SYS_ARCH_DECL_PROTECT
 * declare a protection variable. This macro will default to defining a variable of
 * type sys_prot_t. If a particular port needs a different implementation, then
 * this macro may be defined in sys_arch.h.
 */
#define SYS_ARCH_DECL_PROTECT(lev) sys_prot_t lev
/** SYS_ARCH_PROTECT
 * Perform a "fast" protect. This could be implemented by
 * disabling interrupts for an embedded system or by using a semaphore or
 * mutex. The implementation should allow calling SYS_ARCH_PROTECT when
 * already protected. The old protection level is returned in the variable
 * "lev". This macro will default to calling the sys_arch_protect() function
 * which should be implemented in sys_arch.c. If a particular port needs a
 * different implementation, then this macro may be defined in sys_arch.h
 */
#define SYS_ARCH_PROTECT(lev) lev = sys_arch_protect()
/** SYS_ARCH_UNPROTECT
 * Perform a "fast" set of the protection level to "lev". This could be
 * implemented by setting the interrupt level to "lev" within the MACRO or by
 * using a semaphore or mutex.  This macro will default to calling the
 * sys_arch_unprotect() function which should be implemented in
 * sys_arch.c. If a particular port needs a different implementation, then
 * this macro may be defined in sys_arch.h
 */
#define SYS_ARCH_UNPROTECT(lev) sys_arch_unprotect(lev)

#else

#define SYS_ARCH_DECL_PROTECT(lev)
#define SYS_ARCH_PROTECT(lev)
#define SYS_ARCH_UNPROTECT(lev)

#endif /* SYS_LIGHTWEIGHT_PROT */

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) ();

IEEE1588 PTPv2

Standards

wiki.hevs.ch: Standards/Ethernet PTP/frames
National Institute of Standards and Technology: IEEE 1588

Articles

Why is IEEE 1588 so accurate?
End-to-End Versus Peer-to-Peer
IEEE 1588, Standard for a Precision Clock Synchronization Protocol (PDF)
Precision Time Protocol (PTP/IEEE-1588) (PDF)
Evaluation of 1588v2 for Deployment (PDF)

PTPv2 Simulator

Similiar programs

Windows Based Pcap Editor

Companies

Symmetricom, Inc.
Microsemi (Symmetricom): TimeProvider 5000 (PTP IEEE 1588 v2 Grandmaster Clock)
Meinberg Funkuhren GmbH & Co. KG

Do-it-yourself

Time server using 1PPS GPS receiver

Wireshark

Bug 6126 – 1588-2008 does not decode tlvType in Signaling Message

TI Voyage 200: Cheatsheet

TIGCC

Programming for TI Calculator | TIGCC Tutorial #1
CAVERUSH by HeroQbe #GPPCC6 (source code)

Screenshots

List/Vector operations List append
Array/Matrix operations
List of lists: use comma!!

TIEdit

dnorm

YouTube Programming Tutorial

  • If
  • For
  • Disp

Programación Voyage 200 #1
Programación Voyage 200 #2
Programación Voyage 200 #3 (If)
Programación Voyage 200 #4 (Ejemplo)
Programación Voyage 200 #5 Entrada y Salida de datos

Linux

TI-Basic Developer

[   50.007217] usb 2-1.7: new full-speed USB device number 5 using ehci-pci
[   50.117451] usb 2-1.7: New USB device found, idVendor=0451, idProduct=e001
[   50.117456] usb 2-1.7: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[   50.117459] usb 2-1.7: Product: TI-GRAPH LINK USB
[   50.117462] usb 2-1.7: Manufacturer: Texas Instruments

TiLP Project at SourceForge.net
ubuntuusers.de: TiLP

$ sudo apt-get install tilp2 
[sudo] password for andreas: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libticables2-6 libticalcs2-11 libticonv7 libtifiles2-9
The following NEW packages will be installed:
  libticables2-6 libticalcs2-11 libticonv7 libtifiles2-9 tilp2

TiEmu
TiEmu
TiEmu is a multi-platform emulator for TI89 / TI89 Titanium / TI92 / TI92+ / V200PLT hand-helds.

TilEm
TilEm
TilEm is an emulator and debugger for Texas Instruments Z80-based graphing calculators.

Basic Function Graphing

  • Finding y(x) at a Specified Point
  • Finding a Zero, Minimum, or Maximum within an Interval
  • Finding the Intersection of Two Functions within an Interval
  • Finding the Derivative (Differenzial) at a Point
  • Finding the Numerical Integral over an Interval
  • Finding an Inflection Point (Wendepunkt) within an Interval
  • Finding the Distance between Two Points
  • Drawing a Tangent Line

Units and Constants

List of Predefined Constants on the Voyage 200 Graphing Calculators
The Stefan-Boltzmann Constant Not Displaying as Listed in the Voyage 200 Guidebook

Serial Port Access Control

Problem:

Cannot open /dev/ttyS0: Permission denied

Answer:

$ ls -la /dev/ttyUSB0 
crw-rw---- 1 root dialout 188, 0 Sep 29 17:59 /dev/ttyUSB0

$ groups $USER
andreas : andreas adm cdrom sudo dip plugdev lpadmin sambashare wireshark

$ sudo gpasswd --add $USER dialout
Adding user andreas to group dialout

$ groups $USER
andreas : andreas adm dialout cdrom sudo dip plugdev lpadmin sambashare wireshark

Source: Serial port terminal > Cannot open /dev/ttyS0: Permission denied