Using objdump with Avrora
Avrora currently does not include a disassembler. Therefore it cannot load binary machine code
and relies on an external disassembler. If you write your programs using Atmel's AVR assembly
syntax, Avrora can load it from the source. However, if you write your programs in any other
language and compile them to binary AVR code, you will need to use a disassembler on your
binary in order to load it into Avrora. These steps are easy and can easily be integrated into
your build process with make.
The GNU utility objdump can disassemble ELF files and other
executable formats into source assembly. Avrora can parse the output of this utility to
load binary programs.
Step 1 - Compile the Program
Now let's suppose that we have a C program that we would like to compile to a binary and
simulate in Avrora. The first step is to compile the program to a binary format such as
ELF. This is shown for
avr-gcc.
If you are compiling a TinyOS program such as Blink, you can simply use
make mica2.
Note: the resulting file in build/mica2/main.exe
is an ELF file that can be used in the next step.
Step 2 - Disassemble the Program
Now that we have compiled our program to an ELF binary, we can use
avr-objdump to create a text file that contains the
disassembled code to load into Avrora. The options specify to disassemble zeroes
(need to get NOP instructions), print the header sections (relocation information),
and disassemble each section.
- Note: the .od extension for the filename is important:
Avrora assumes that filenames that end in this extension contain objdump output.
Step 3 - Run Avrora
Now that we have a text file that contains the disassembled code of our program,
we can load it into Avrora to simulate, analyze, or create a control flow graph.
For more information, see the sections on
simulating,
analyzing, or
visualizing your programs.