sys1a

Download: sys1a.zip.

This project consists of the following NIOS II System:

A small-library C++ application (hello_world_small) was created.

Contents

Source
Shell script
Size
Section Headers
Symbols
Binary dump

Source: hello_world_small.c

/* 
 * "Small Hello World" example. 
 * 
 * This example prints 'Hello from Nios II' to the STDOUT stream. It runs on
 * the Nios II 'standard', 'full_featured', 'fast', and 'low_cost' example 
 * designs. It requires a STDOUT  device in your system's hardware. 
 *
 * The purpose of this example is to demonstrate the smallest possible Hello 
 * World application, using the Nios II HAL library.  The memory footprint
 * of this hosted application is ~3124 bytes by default using the standard 
 * reference design.  For a more fully featured Hello World application
 * example, see the example titled "Hello World".
 *
 * The memory footprint of this example has been reduced by making the
 * following changes to the normal "Hello World" example.
 * Check in the Nios II Software Developers Manual for a more complete 
 * description.
 * 
 * In the SW Application project (small_hello_world):
 *
 *  - In the C/C++ Build page
 * 
 *    - Set the Optimization Level to -Os
 * 
 * In System Library project (small_hello_world_syslib):
 *  - In the C/C++ Build page
 * 
 *    - Set the Optimization Level to -Os
 * 
 *    - Define the preprocessor option ALT_NO_INSTRUCTION_EMULATION 
 *      This removes software exception handling, which means that you cannot 
 *      run code compiled for Nios II cpu with a hardware multiplier on a core 
 *      without a the multiply unit. Check the Nios II Software Developers 
 *      Manual for more details.
 *
 *  - In the System Library page:
 *    - Set Periodic system timer and Timestamp timer to none
 *      This prevents the automatic inclusion of the timer driver.
 *
 *    - Set Max file descriptors to 4
 *      This reduces the size of the file handle pool.
 *
 *    - Uncheck Clean exit (flush buffers)
 *      This removes the call to exit, and when main is exitted instead of 
 *      calling exit the software will just spin in a loop.
 *
 *    - Check Small C library
 *      This uses a reduced functionality C library, which lacks  
 *      support for buffering, file IO, floating point and getch(), etc. 
 *      Check the Nios II Software Developers Manual for a complete list.
 *
 *    - Check Reduced device drivers
 *      This uses reduced functionality drivers if they're available. For the
 *      standard design this means you get polled UART and JTAG UART drivers,
 *      no support for the LCD driver and you lose the ability to program 
 *      CFI compliant flash devices.
 *
 *      
 *
 */

#include <stdio.h>

int main()
{ 
  printf("Hello from Nios II!\n");
  printf("University of Dayton\n");

  return 0;
}

Shell script

The offset in the od command was taken from the headers file (.rodata).

#!/bin/sh
nios2-elf-size hello_world_small_1.elf > hello.size.txt
nios2-elf-objdump -dS hello_world_small_1.elf > hello.disassemble.txt
nios2-elf-objdump -h hello_world_small_1.elf > hello.headers.txt
nios2-elf-nm hello_world_small_1.elf > hello.symbols.txt
nios2-elf-objcopy -S -O binary hello_world_small_1.elf hello.bin
# dump from .rodata
od -Ax -j0xab8 -txz hello.bin > hello.od.txt

Size

   text	   data	    bss	    dec	    hex	filename
   2824	    256	      4	   3084	    c0c	hello_world_small_1.elf
 

Section Headers


hello_world_small_1.elf:     file format elf32-littlenios2

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .entry        00000020  00000000  00000000  00000074  2**5
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .exceptions   00000000  00000020  00000020  00000c7c  2**0
                  CONTENTS
  2 .text         00000a98  00000020  00000020  00000094  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  3 .rodata       00000050  00000ab8  00000ab8  00000b2c  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  4 .rwdata       00000100  00000b08  00000b08  00000b7c  2**2
                  CONTENTS, ALLOC, LOAD, DATA, SMALL_DATA
  5 .bss          00000004  00000c08  00000c08  00000c7c  2**2
                  ALLOC, SMALL_DATA
  6 .onchip_memory_0 00000000  00000c0c  00000c0c  00000c7c  2**0
                  CONTENTS
  7 .comment      00000408  00000000  00000000  00000c7c  2**0
                  CONTENTS, READONLY
  8 .debug_aranges 000002c8  00000000  00000000  00001088  2**3
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_pubnames 000003ab  00000000  00000000  00001350  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_info   00004ee9  00000000  00000000  000016fb  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_abbrev 00001662  00000000  00000000  000065e4  2**0
                  CONTENTS, READONLY, DEBUGGING
 12 .debug_line   0000412f  00000000  00000000  00007c46  2**0
                  CONTENTS, READONLY, DEBUGGING
 13 .debug_frame  00000394  00000000  00000000  0000bd78  2**2
                  CONTENTS, READONLY, DEBUGGING
 14 .debug_str    00000ebe  00000000  00000000  0000c10c  2**0
                  CONTENTS, READONLY, DEBUGGING
 15 .debug_alt_sim_info 00000030  00000000  00000000  0000cfcc  2**2
                  CONTENTS, READONLY, DEBUGGING
 16 .debug_ranges 00000048  00000030  00000030  0000cffc  2**0
                  CONTENTS, READONLY, DEBUGGING

Symbols

00000ab8 A __CTOR_END__
00000ab8 A __CTOR_LIST__
00008000 A __alt_data_end
00000000 A __alt_mem_onchip_memory_0
00008000 A __alt_stack_pointer
00000c0c A __bss_end
00000c08 A __bss_start
         w __errno
00000000 T __reset
0000016c T __sfvwrite_small_dev
00000504 T _do_ctors
00000c08 A _edata
00000c0c A _end
00000aa8 T _exit
00008be0 A _gp
00000be0 G _impure_ptr
00000094 T _puts_r
00000020 T _start
00000240 T _write_r
00000bec G alt_argc
00000be8 G alt_argv
000003d4 T alt_avalon_jtag_uart_read
00000450 T alt_avalon_jtag_uart_write
00000bf4 G alt_dev_list
00000490 T alt_dev_llist_insert
00000bb8 G alt_dev_null
00000488 t alt_dev_null_write
00000be4 G alt_envp
00000c04 G alt_errno
00000b88 G alt_fd_list
000007f8 T alt_find_dev
00000884 T alt_find_file
00000bfc G alt_fs_list
0000094c T alt_get_fd
000005c4 T alt_io_redirect
000002a4 T alt_main
00000bf0 G alt_max_fd
0000054c t alt_open_fd
000007d4 T alt_release_fd
000002ec T alt_sys_init
00000c0c A end
00000c08 B errno
00000aa8 T exit
00000b08 g impure_data
00000b5c g jtag_uart_0
00000064 T main
00000a6c T memcmp
00000658 T open
00000138 T puts
0000014c T strlen
00000304 T write

Binary dump

000ab8 6c6c6548 7266206f 4e206d6f 20736f69  >Hello from Nios <
000ac8 00214949 76696e55 69737265 6f207974  >II!.University o<
000ad8 61442066 6e6f7479 00000000 0000000a  >f Dayton........<
000ae8 7665642f 61746a2f 61755f67 305f7472  >/dev/jtag_uart_0<
000af8 00000000 7665642f 6c756e2f 0000006c  >..../dev/null...<
000b08 00000b3c 00000b44 00000b4c 00000000  ><...D...L.......<
000b18 00000000 00000000 00000000 00000000  >................<
*
000b38 00000000 00000004 00000000 0001000a  >................<
000b48 00000000 0002000a 00000000 00000000  >................<
000b58 00000000 00000000 00000000 00000ae8  >................<
000b68 00000000 00000000 000003d4 00000450  >............P...<
000b78 00000000 00000000 00000000 00008830  >............0...<
000b88 00000bb8 00000000 00000000 00000bb8  >................<
000b98 00000000 00000000 00000bb8 00000000  >................<
000ba8 00000000 00000000 00000000 00000000  >................<
000bb8 00000bf4 00000bf4 00000afc 00000000  >................<
000bc8 00000000 00000000 00000488 00000000  >................<
000bd8 00000000 00000000 00000b08 00000000  >................<
000be8 00000000 00000000 ffffffff 00000bb8  >................<
000bf8 00000bb8 00000bfc 00000bfc 00000000  >................<
000c08


Maintained by John Loomis, last updated 29 May 2007