2090 lines
		
	
	
	
		
			69 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			2090 lines
		
	
	
	
		
			69 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
 | |
|     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
 | |
| <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 | |
| <head>
 | |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 | |
| <meta name="generator" content="AsciiDoc 8.2.7" />
 | |
| <style type="text/css">
 | |
| /* Debug borders */
 | |
| p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {
 | |
| /*
 | |
|   border: 1px solid red;
 | |
| */
 | |
| }
 | |
| 
 | |
| body {
 | |
|   margin: 1em 5% 1em 5%;
 | |
| }
 | |
| 
 | |
| a {
 | |
|   color: blue;
 | |
|   text-decoration: underline;
 | |
| }
 | |
| a:visited {
 | |
|   color: fuchsia;
 | |
| }
 | |
| 
 | |
| em {
 | |
|   font-style: italic;
 | |
|   color: navy;
 | |
| }
 | |
| 
 | |
| strong {
 | |
|   font-weight: bold;
 | |
|   color: #083194;
 | |
| }
 | |
| 
 | |
| tt {
 | |
|   color: navy;
 | |
| }
 | |
| 
 | |
| h1, h2, h3, h4, h5, h6 {
 | |
|   color: #527bbd;
 | |
|   font-family: sans-serif;
 | |
|   margin-top: 1.2em;
 | |
|   margin-bottom: 0.5em;
 | |
|   line-height: 1.3;
 | |
| }
 | |
| 
 | |
| h1, h2, h3 {
 | |
|   border-bottom: 2px solid silver;
 | |
| }
 | |
| h2 {
 | |
|   padding-top: 0.5em;
 | |
| }
 | |
| h3 {
 | |
|   float: left;
 | |
| }
 | |
| h3 + * {
 | |
|   clear: left;
 | |
| }
 | |
| 
 | |
| div.sectionbody {
 | |
|   font-family: serif;
 | |
|   margin-left: 0;
 | |
| }
 | |
| 
 | |
| hr {
 | |
|   border: 1px solid silver;
 | |
| }
 | |
| 
 | |
| p {
 | |
|   margin-top: 0.5em;
 | |
|   margin-bottom: 0.5em;
 | |
| }
 | |
| 
 | |
| ul, ol, li > p {
 | |
|   margin-top: 0;
 | |
| }
 | |
| 
 | |
| pre {
 | |
|   padding: 0;
 | |
|   margin: 0;
 | |
| }
 | |
| 
 | |
| span#author {
 | |
|   color: #527bbd;
 | |
|   font-family: sans-serif;
 | |
|   font-weight: bold;
 | |
|   font-size: 1.1em;
 | |
| }
 | |
| span#email {
 | |
| }
 | |
| span#revision {
 | |
|   font-family: sans-serif;
 | |
| }
 | |
| 
 | |
| div#footer {
 | |
|   font-family: sans-serif;
 | |
|   font-size: small;
 | |
|   border-top: 2px solid silver;
 | |
|   padding-top: 0.5em;
 | |
|   margin-top: 4.0em;
 | |
| }
 | |
| div#footer-text {
 | |
|   float: left;
 | |
|   padding-bottom: 0.5em;
 | |
| }
 | |
| div#footer-badges {
 | |
|   float: right;
 | |
|   padding-bottom: 0.5em;
 | |
| }
 | |
| 
 | |
| div#preamble,
 | |
| div.tableblock, div.imageblock, div.exampleblock, div.verseblock,
 | |
| div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
 | |
| div.admonitionblock {
 | |
|   margin-right: 10%;
 | |
|   margin-top: 1.5em;
 | |
|   margin-bottom: 1.5em;
 | |
| }
 | |
| div.admonitionblock {
 | |
|   margin-top: 2.5em;
 | |
|   margin-bottom: 2.5em;
 | |
| }
 | |
| 
 | |
| div.content { /* Block element content. */
 | |
|   padding: 0;
 | |
| }
 | |
| 
 | |
| /* Block element titles. */
 | |
| div.title, caption.title {
 | |
|   color: #527bbd;
 | |
|   font-family: sans-serif;
 | |
|   font-weight: bold;
 | |
|   text-align: left;
 | |
|   margin-top: 1.0em;
 | |
|   margin-bottom: 0.5em;
 | |
| }
 | |
| div.title + * {
 | |
|   margin-top: 0;
 | |
| }
 | |
| 
 | |
| td div.title:first-child {
 | |
|   margin-top: 0.0em;
 | |
| }
 | |
| div.content div.title:first-child {
 | |
|   margin-top: 0.0em;
 | |
| }
 | |
| div.content + div.title {
 | |
|   margin-top: 0.0em;
 | |
| }
 | |
| 
 | |
| div.sidebarblock > div.content {
 | |
|   background: #ffffee;
 | |
|   border: 1px solid silver;
 | |
|   padding: 0.5em;
 | |
| }
 | |
| 
 | |
| div.listingblock {
 | |
|   margin-right: 0%;
 | |
| }
 | |
| div.listingblock > div.content {
 | |
|   border: 1px solid silver;
 | |
|   background: #f4f4f4;
 | |
|   padding: 0.5em;
 | |
| }
 | |
| 
 | |
| div.quoteblock {
 | |
|   padding-left: 2.0em;
 | |
| }
 | |
| div.quoteblock > div.attribution {
 | |
|   padding-top: 0.5em;
 | |
|   text-align: right;
 | |
| }
 | |
| 
 | |
| div.verseblock {
 | |
|   padding-left: 2.0em;
 | |
| }
 | |
| div.verseblock > div.content {
 | |
|   white-space: pre;
 | |
| }
 | |
| div.verseblock > div.attribution {
 | |
|   padding-top: 0.75em;
 | |
|   text-align: left;
 | |
| }
 | |
| /* DEPRECATED: Pre version 8.2.7 verse style literal block. */
 | |
| div.verseblock + div.attribution {
 | |
|   text-align: left;
 | |
| }
 | |
| 
 | |
| div.admonitionblock .icon {
 | |
|   vertical-align: top;
 | |
|   font-size: 1.1em;
 | |
|   font-weight: bold;
 | |
|   text-decoration: underline;
 | |
|   color: #527bbd;
 | |
|   padding-right: 0.5em;
 | |
| }
 | |
| div.admonitionblock td.content {
 | |
|   padding-left: 0.5em;
 | |
|   border-left: 2px solid silver;
 | |
| }
 | |
| 
 | |
| div.exampleblock > div.content {
 | |
|   border-left: 2px solid silver;
 | |
|   padding: 0.5em;
 | |
| }
 | |
| 
 | |
| div.imageblock div.content { padding-left: 0; }
 | |
| div.imageblock img { border: 1px solid silver; }
 | |
| span.image img { border-style: none; }
 | |
| 
 | |
| dl {
 | |
|   margin-top: 0.8em;
 | |
|   margin-bottom: 0.8em;
 | |
| }
 | |
| dt {
 | |
|   margin-top: 0.5em;
 | |
|   margin-bottom: 0;
 | |
|   font-style: normal;
 | |
| }
 | |
| dd > *:first-child {
 | |
|   margin-top: 0.1em;
 | |
| }
 | |
| 
 | |
| ul, ol {
 | |
|     list-style-position: outside;
 | |
| }
 | |
| div.olist > ol {
 | |
|   list-style-type: decimal;
 | |
| }
 | |
| div.olist2 > ol {
 | |
|   list-style-type: lower-alpha;
 | |
| }
 | |
| 
 | |
| div.tableblock > table {
 | |
|   border: 3px solid #527bbd;
 | |
| }
 | |
| thead {
 | |
|   font-family: sans-serif;
 | |
|   font-weight: bold;
 | |
| }
 | |
| tfoot {
 | |
|   font-weight: bold;
 | |
| }
 | |
| 
 | |
| div.hlist {
 | |
|   margin-top: 0.8em;
 | |
|   margin-bottom: 0.8em;
 | |
| }
 | |
| div.hlist td {
 | |
|   padding-bottom: 15px;
 | |
| }
 | |
| td.hlist1 {
 | |
|   vertical-align: top;
 | |
|   font-style: normal;
 | |
|   padding-right: 0.8em;
 | |
| }
 | |
| td.hlist2 {
 | |
|   vertical-align: top;
 | |
| }
 | |
| 
 | |
| @media print {
 | |
|   div#footer-badges { display: none; }
 | |
| }
 | |
| 
 | |
| div#toctitle {
 | |
|   color: #527bbd;
 | |
|   font-family: sans-serif;
 | |
|   font-size: 1.1em;
 | |
|   font-weight: bold;
 | |
|   margin-top: 1.0em;
 | |
|   margin-bottom: 0.1em;
 | |
| }
 | |
| 
 | |
| div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
 | |
|   margin-top: 0;
 | |
|   margin-bottom: 0;
 | |
| }
 | |
| div.toclevel2 {
 | |
|   margin-left: 2em;
 | |
|   font-size: 0.9em;
 | |
| }
 | |
| div.toclevel3 {
 | |
|   margin-left: 4em;
 | |
|   font-size: 0.9em;
 | |
| }
 | |
| div.toclevel4 {
 | |
|   margin-left: 6em;
 | |
|   font-size: 0.9em;
 | |
| }
 | |
| /* Workarounds for IE6's broken and incomplete CSS2. */
 | |
| 
 | |
| div.sidebar-content {
 | |
|   background: #ffffee;
 | |
|   border: 1px solid silver;
 | |
|   padding: 0.5em;
 | |
| }
 | |
| div.sidebar-title, div.image-title {
 | |
|   color: #527bbd;
 | |
|   font-family: sans-serif;
 | |
|   font-weight: bold;
 | |
|   margin-top: 0.0em;
 | |
|   margin-bottom: 0.5em;
 | |
| }
 | |
| 
 | |
| div.listingblock div.content {
 | |
|   border: 1px solid silver;
 | |
|   background: #f4f4f4;
 | |
|   padding: 0.5em;
 | |
| }
 | |
| 
 | |
| div.quoteblock-attribution {
 | |
|   padding-top: 0.5em;
 | |
|   text-align: right;
 | |
| }
 | |
| 
 | |
| div.verseblock-content {
 | |
|   white-space: pre;
 | |
| }
 | |
| div.verseblock-attribution {
 | |
|   padding-top: 0.75em;
 | |
|   text-align: left;
 | |
| }
 | |
| 
 | |
| div.exampleblock-content {
 | |
|   border-left: 2px solid silver;
 | |
|   padding-left: 0.5em;
 | |
| }
 | |
| 
 | |
| /* IE6 sets dynamically generated links as visited. */
 | |
| div#toc a:visited { color: blue; }
 | |
| 
 | |
| /* Because IE6 child selector is broken. */
 | |
| div.olist2 ol {
 | |
|   list-style-type: lower-alpha;
 | |
| }
 | |
| div.olist2 div.olist ol {
 | |
|   list-style-type: decimal;
 | |
| }
 | |
| </style>
 | |
| <title>WinAVR User Manual - 20081205</title>
 | |
| </head>
 | |
| <body>
 | |
| <div id="header">
 | |
| <h1>WinAVR User Manual - 20081205</h1>
 | |
| <span id="author">Eric B. Weddington</span><br />
 | |
| <span id="email"><tt><<a href="mailto:arcanum@users.sf.net">arcanum@users.sf.net</a>></tt></span><br />
 | |
| </div>
 | |
| <div id="preamble">
 | |
| <div class="sectionbody">
 | |
| <div class="para"><p>WinAVR is a suite of executable, open source software
 | |
| development tools for the Atmel AVR series of RISC microprocessors hosted on
 | |
| the Windows platform. It includes the GNU GCC compiler for C and C++.</p></div>
 | |
| </div>
 | |
| </div>
 | |
| <h2 id="_1_0_what_s_new">1.0 What's New</h2>
 | |
| <div class="sectionbody">
 | |
| <div class="para"><p>Below is just a sample of what's new.</p></div>
 | |
| <div class="ilist"><ul>
 | |
| <li>
 | |
| <p>
 | |
| New version of GNU Binutils: 2.19
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| New version of GCC: 4.3.2
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| New version of AVR-LibC: 1.6.4
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| New version of Programmers Notepad: 2.0.8.718
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| New devices supported:
 | |
| </p>
 | |
| <div class="ilist"><ul>
 | |
| <li>
 | |
| <p>
 | |
| ATxmega64A3
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| ATxmega128A3
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| ATxmega256A3
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| ATxmega256A3B
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| ATmega32U6
 | |
| </p>
 | |
| </li>
 | |
| </ul></div>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Various bugs fixed.
 | |
| </p>
 | |
| </li>
 | |
| </ul></div>
 | |
| </div>
 | |
| <h2 id="_2_0_winavr_installation">2.0 WinAVR Installation</h2>
 | |
| <div class="sectionbody">
 | |
| <div class="para"><p>This section describes various information and notes about the installation of
 | |
| WinAVR.</p></div>
 | |
| <h3 id="_2_1_manifest">2.1 Manifest</h3><div style="clear:left"></div>
 | |
| <div class="olist"><ol>
 | |
| <li>
 | |
| <p>
 | |
| GNU Binutils 2.19
 | |
| </p>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>Binary utilities for AVR target (including assembler, linker, etc.).</tt></pre>
 | |
| </div></div>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| GNU Compiler Collection (GCC) 4.3.2
 | |
| </p>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>C language and C++ language compiler for AVR target. There are
 | |
| caveats for using the C++ compiler. See the installed avr-libc
 | |
| User Manual in the <InstallDir>\doc directory.</tt></pre>
 | |
| </div></div>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| avr-libc 1.6.4
 | |
| </p>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>C Standard Library for AVR.</tt></pre>
 | |
| </div></div>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| AVR-Ada 0.5.2
 | |
| </p>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>Run Time System for the Ada compiler.</tt></pre>
 | |
| </div></div>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>(Removed temporarily)</tt></pre>
 | |
| </div></div>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| AVRDUDE 5.5
 | |
| </p>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>avrdude is an open source programmer software that is user extensible.</tt></pre>
 | |
| </div></div>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| GNU Debugger (GDB) / Insight 6.8
 | |
| </p>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>GDB is a command-line debugger. Insight is GDB with a GUI!</tt></pre>
 | |
| </div></div>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| AVaRICE 2.7
 | |
| </p>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>avarice is a program for interfacing the Atmel JTAG ICE to GDB and users
 | |
| can debug their AVR. Use it in conjunction with GDB.</tt></pre>
 | |
| </div></div>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| SimulAVR 0.1.2.5
 | |
| </p>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>simulavr is used in conjunction with GDB to provide AVR simulation.</tt></pre>
 | |
| </div></div>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| SRecord 1.38
 | |
| </p>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>SRecord is a collection of powerful tools for manipulating EPROM load files.
 | |
| It reads and writes numerous EPROM file formats, and can perform many
 | |
| different manipulations.</tt></pre>
 | |
| </div></div>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| MFile
 | |
| </p>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>An automatic makefile generator for AVR GCC.</tt></pre>
 | |
| </div></div>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Programmers Notepad 2.0.8.718
 | |
| </p>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>Programming editor and IDE. This editor includes the Scintilla editor
 | |
| component.</tt></pre>
 | |
| </div></div>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| LibUSB 0.1.12.1 and device drivers
 | |
| </p>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>This is a USB library that is linked into AVRDUDE and AVaRICE to allow them
 | |
| to connect to the Atmel JTAG ICE mkII and the Atmel AVRISP mkII. Drivers
 | |
| for these devices are also included.</tt></pre>
 | |
| </div></div>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Cygwin DLLs
 | |
| </p>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>Certain DLLs from the Cygwin project are required for specific included
 | |
| packages. See the Build Notes section for which packages require which DLL.</tt></pre>
 | |
| </div></div>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>NOTE: Not all executables require these Cygwin DLLs.</tt></pre>
 | |
| </div></div>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Many native Win32 GNU programs and utilities including make and bash.
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Tofrodos 1.6
 | |
| </p>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>A command-line text file line-ending convertor.</tt></pre>
 | |
| </div></div>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| A Makefile Template for you to use in your projects.
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Documentation for the various projects.
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Source code patches used to build the various projects.
 | |
| </p>
 | |
| </li>
 | |
| </ol></div>
 | |
| <h3 id="_2_2_layout">2.2 Layout</h3><div style="clear:left"></div>
 | |
| <div class="para"><p>Listed below are some directories you might want to know about.</p></div>
 | |
| <div class="para"><p><tt><install></tt> = The directory where you installed WinAVR.</p></div>
 | |
| <div class="vlist"><dl>
 | |
| <dt>
 | |
| <strong><tt><install>\bin</tt></strong>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     The AVR software development programs. This directory should be in your
 | |
|     <tt>PATH</tt> environment variable. This includes:
 | |
| </p>
 | |
| <div class="ilist"><ul>
 | |
| <li>
 | |
| <p>
 | |
| GNU Binutils
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| GCC
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| avrdude
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| GNU Debugger (GDB)
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Insight
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| AVaRICE
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| SimulAVR
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| SRecord
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Various required DLLs
 | |
| </p>
 | |
| </li>
 | |
| </ul></div>
 | |
| </dd>
 | |
| <dt>
 | |
| <strong><tt><install>\utils\bin</tt></strong>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     A collection of Unix programs built for the Windows
 | |
|     platform. The programs make and sh (bash) reside here. This directory
 | |
|     should be in your PATH environment variable.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <strong><tt><install>\avr\lib</tt></strong>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     avr-libc libraries, startup files, linker scripts,
 | |
|     and stuff.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <strong><tt><install>\avr\include</tt></strong>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     avr-libc header files. This is where, for
 | |
|     example, #include <string.h> comes from.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <strong><tt><install>\avr\include\avr</tt></strong>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     avr-libc header files specific to the AVR
 | |
|     microprocessor. This is where, for example, #include <avr/io.h> comes
 | |
|     from.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <strong><tt><install>\lib</tt></strong>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     GCC libraries, other libraries,headers and stuff.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <strong><tt><install>\libexec</tt></strong>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     GCC program components
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <strong><tt><install>\doc</tt></strong>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     Various documentation. Before asking, RTFM! :-)
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <strong><tt><install>\doc\avr-libc\examples</tt></strong>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     Example projects with source code. Have fun!
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <strong><tt><install>\sample</tt></strong>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     Sample makefile (see below). Batch files to use in
 | |
|     compiling from AVR Studio 3.x (see below).
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <strong><tt><install>\pn</tt></strong>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     Programmers Notepad
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <strong><tt><install>\mfile</tt></strong>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     MFile
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <strong><tt><install>\source</tt></strong>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     Documentation on where to find the source code for the
 | |
|     various projects and source code patches that were used to build the tools.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <strong><tt><install>\utils\bin</tt></strong>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     Utility programs, mainly from Unix-land that are used in building the
 | |
|     software, such as the shell (sh.exe), make.exe, and other programs called
 | |
|     from a Makefile.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <strong><tt><install>\utils\libusb\bin</tt></strong>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     LibUSB programs and drivers.
 | |
| </p>
 | |
| </dd>
 | |
| </dl></div>
 | |
| <h3 id="_2_3_tt_path_tt_environment_variable">2.3 <tt>PATH</tt> Environment Variable</h3><div style="clear:left"></div>
 | |
| <div class="para"><p>There are two directories in WinAVR that contain executable programs.
 | |
| If <tt><install></tt> is your install directory then these two directories are:</p></div>
 | |
| <div class="para"><p><tt><install>\bin</tt><br />
 | |
| <tt><install>\utils\bin</tt></p></div>
 | |
| <div class="para"><p>The <tt><install>\bin</tt> directory contains the software development toolset
 | |
| proper. This includes GNU binutils, GCC, and other programs.</p></div>
 | |
| <div class="para"><p>The <tt><install>\utils\bin</tt> contains many miscellaneous Unix or GNU programs
 | |
| that are built for Windows. This includes sh (bash) and make among a host of
 | |
| other things.</p></div>
 | |
| <div class="para"><p>For your operating system to easily locate these directories, they must be put
 | |
| at the <strong>beginning</strong> of the <tt>PATH</tt> environment variable. WinAVR can do this
 | |
| automatically upon installation, if you selected this option. The reason for
 | |
| putting these directories at the beginning of the <tt>PATH</tt> environment variable
 | |
| is for the correct make program to be called. There have been reports from
 | |
| users that have Borland tools installed and the Borland make program is started
 | |
| rather than GNU make correctly started.</p></div>
 | |
| <div class="para"><p>These programs are put into two seperate directories in case you want to use
 | |
| a different set of utility programs than the set that comes with WinAVR.</p></div>
 | |
| <div class="para"><p>If you do not wish to use the utilities that comes with WinAVR, remove the
 | |
| <tt><install>\utils\bin</tt> directory from your PATH environment variable.</p></div>
 | |
| <div class="para"><p>For Windows 95 and 98 users, see the autoexec.bat file in the root drive
 | |
| where your OS is installed. This is usually in C:\.</p></div>
 | |
| <div class="para"><p>For all other Windows users, the WinAVR installer modifies this registry key:
 | |
| <tt>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path</tt></p></div>
 | |
| <div class="admonitionblock">
 | |
| <table><tr>
 | |
| <td class="icon">
 | |
| <div class="title">Important</div>
 | |
| </td>
 | |
| <td class="content">On Windows NT/2K/XP you must have Administrator priviledges for
 | |
| the installer to automatically put these directories in your <tt>PATH</tt> environment
 | |
| variable.</td>
 | |
| </tr></table>
 | |
| </div>
 | |
| <h3 id="_2_4_registry_keys">2.4 Registry Keys</h3><div style="clear:left"></div>
 | |
| <div class="para"><p>WinAVR installs a minimal amount of registry keys. These keys are installed
 | |
| to inform of the installation path, the uninstaller, and for GCC to find
 | |
| other parts of the compiler as needed. Below are the specific keys that are
 | |
| installed.</p></div>
 | |
| <div class="ilist"><ul>
 | |
| <li>
 | |
| <p>
 | |
| Installation Location::
 | |
|     This registry key will be added to provide the location of the WinAVR
 | |
|     installation:
 | |
| </p>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>`HKEY_LOCAL_MACHINE\SOFTWARE\WinAVR\{VERSION}`</tt></pre>
 | |
| </div></div>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>with {VERSION} being replaced by the version number of WinAVR. Formerly,
 | |
| the key above without {VERSION} was equal to the install location.</tt></pre>
 | |
| </div></div>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| GCC Component Paths::
 | |
|     There are some keys that are installed that are used to help GCC find installed component programs:
 | |
| </p>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>`HKEY_LOCAL_MACHINE\Software\Free Software Foundation\WinAVR-{VERSION}\GCC`</tt></pre>
 | |
| </div></div>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>`HKEY_LOCAL_MACHINE\Software\Free Software Foundation\WinAVR-{VERSION}\BINUTILS`</tt></pre>
 | |
| </div></div>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>`HKEY_LOCAL_MACHINE\Software\Free Software Foundation\WinAVR-{VERSION}\G++`</tt></pre>
 | |
| </div></div>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>with {VERSION} being replaced by the version number of WinAVR.
 | |
| Each of these keys points to the WinAVR install location for that version
 | |
| of WinAVR.</tt></pre>
 | |
| </div></div>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| PATH Environment Variable::
 | |
|     The registry key:
 | |
| </p>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path`</tt></pre>
 | |
| </div></div>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>may be modified (if selected at installation time) to add two directories to the
 | |
| PATH environment variable.</tt></pre>
 | |
| </div></div>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Uninstaller::
 | |
|     There are several registry keys written under:
 | |
| </p>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>`HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\WinAVR-{VERSION}`</tt></pre>
 | |
| </div></div>
 | |
| <div class="literalblock">
 | |
| <div class="content">
 | |
| <pre><tt>with {VERSION} being replaced by the version number of WinAVR.
 | |
| These registry keys are used to register the uninstaller with Windows.</tt></pre>
 | |
| </div></div>
 | |
| </li>
 | |
| </ul></div>
 | |
| <h3 id="_2_5_libusb_win32">2.5 LibUSB-Win32</h3><div style="clear:left"></div>
 | |
| <div class="para"><p>LibUSB-Win32 is a USB library that is linked into AVRDUDE and AVaRICE to allow
 | |
| them to connect to the Atmel JTAG ICE mkII and the Atmel AVRISP mkII. Drivers
 | |
| for these devices are also included. LibUSB is installed under:</p></div>
 | |
| <div class="para"><p><tt><install>\utils\libusb\bin</tt></p></div>
 | |
| <div class="para"><p>The drivers for the JTAG ICE mkII and the AVRISP mkII are also located in the
 | |
| above directory.</p></div>
 | |
| <div class="para"><p>To install the LibUSB-Win32 drivers (when AVR Studio is not installed):
 | |
| - Plug in your Atmel device (JTAG ICE mkII or AVRISP mkII).
 | |
| - When Windows asks to locate drivers for this device, select "Install from
 | |
| a list or specific location". Press Next.
 | |
| - Uncheck the checkbox, "Search removable media".
 | |
| - Check the checkbox "Include this location in the search" and select the
 | |
| location of the drivers in the directory specified above. Press Next.
 | |
| The driver will then be installed.</p></div>
 | |
| <div class="para"><p>AVR Studio can install and use the USB drivers from Jungo (which is included as
 | |
| part of the AVR Studio installation). However, the Jungo drivers and the
 | |
| LibUSB-Win32 drivers are mutually exclusive; if one set is installed the other
 | |
| set will not work.</p></div>
 | |
| <div class="para"><p>You can uninstall the driver by plugging in the device (and making sure it is
 | |
| powered on), use the Device Manager to find and select the device (under Jungo
 | |
| or LibUSB-Win32, depending on which driver is installed), right click and select
 | |
| "Uninstall". Then, install the other driver according to the correct procedures.</p></div>
 | |
| <div class="para"><p>LibUSB also has a "filter" driver that is available, however, using this is
 | |
| not recommended by the LibUSB author.</p></div>
 | |
| </div>
 | |
| <h2 id="_3_0_toolset_background">3.0 Toolset Background</h2>
 | |
| <div class="sectionbody">
 | |
| <div class="para"><p>WinAVR is a collection of executable software development tools for the
 | |
| Atmel AVR processor hosted on Windows.</p></div>
 | |
| <div class="para"><p>These software development tools include:</p></div>
 | |
| <div class="ilist"><ul>
 | |
| <li>
 | |
| <p>
 | |
| Compilers
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Assembler
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Linker
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Librarian
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| File converter
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Other file utilities
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| C Library
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Programmer software
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Debugger
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| In-Circuit Emulator software
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Editor / IDE
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Many support utilities
 | |
| </p>
 | |
| </li>
 | |
| </ul></div>
 | |
| <h3 id="_3_1_the_toolset_and_open_source">3.1 The Toolset and Open Source</h3><div style="clear:left"></div>
 | |
| <div class="para"><p>Each of the tools included in WinAVR is Open Source and/or Free Software. Each
 | |
| tool has it's own project, usually hosted on
 | |
| <a href="http://sourceforge.net/">SourceForge</a> or <a href="http://savannah.gnu.org/">Savannah</a>,
 | |
| with their own project maintainers and developers who all volunteer their time
 | |
| and energy to creating these tools. Look in the Links section below to find out
 | |
| the websites of each of these projects.</p></div>
 | |
| <div class="para"><p>Especially note many of these programs come from the Unix and Linux
 | |
| platforms. These programs have been ported to the Windows platform but
 | |
| generally behave for a Unix-like environment. If you are not used to a
 | |
| Unix-like environment it can possibly be frustrating. Read as much
 | |
| documentation as you can. Look at examples. Search the Internet. Many links
 | |
| are also provided in this manual.</p></div>
 | |
| <div class="para"><p>Also remember that this software is updated and improved continually by many
 | |
| people who volunteer their precious time to provide some of the best software
 | |
| for absolutely no cost or obligation to you. Volunteers are always welcome in
 | |
| furthering any of these projects!</p></div>
 | |
| <h3 id="_3_2_compiler">3.2 Compiler</h3><div style="clear:left"></div>
 | |
| <div class="para"><p>The compiler in WinAVR is the GNU Compiler Collection, or
 | |
| <a href="http://gcc.gnu.org/">GCC</a>. This compiler is incredibly flexible and can be
 | |
| hosted on many platforms, it can target many different different processors /
 | |
| operating systems (back-ends), and can be configured for multiple different
 | |
| languages (front-ends).</p></div>
 | |
| <div class="para"><p>The GCC included in WinAVR is targeted for the AVR processor, is built to
 | |
| execute on the Windows platform, and is configured to compile C, or C++.</p></div>
 | |
| <div class="admonitionblock">
 | |
| <table><tr>
 | |
| <td class="icon">
 | |
| <div class="title">Caution</div>
 | |
| </td>
 | |
| <td class="content">There are caveats on using C++. See the avr-libc FAQ.</td>
 | |
| </tr></table>
 | |
| </div>
 | |
| <div class="para"><p>Because this GCC is targeted for the AVR, the main executable that is
 | |
| created is prefixed with the target name: <tt>avr-gcc.exe</tt>. It is also referred to
 | |
| as AVR GCC.</p></div>
 | |
| <div class="para"><p><tt>avr-gcc</tt> is just a "driver" program only. The compiler itself is called
 | |
| <tt>cc1.exe</tt> for C, or <tt>cc1plus.exe</tt> for C++.  Also, the preprocessor <tt>cpp.exe</tt>
 | |
| will usually automatically be prepended with the target name: <tt>avr-cpp.exe</tt>.
 | |
| The actual set of component programs called is usually derived from the suffix
 | |
| of each source code file being processed.</p></div>
 | |
| <div class="para"><p>GCC compiles a high-level computer language into assembly, and that is all. It
 | |
| cannot work alone. GCC is coupled with another project, GNU Binutils, which
 | |
| provides the assembler, linker, librarian and more. Since GCC is just a "driver"
 | |
| program, it can automatically call the assembler and linker directly to build
 | |
| the final program.</p></div>
 | |
| <h3 id="_3_3_assembler_linker_librarian_and_more">3.3 Assembler, Linker, Librarian and More</h3><div style="clear:left"></div>
 | |
| <div class="para"><p><a href="http://sources.redhat.com/binutils/">GNU Binutils</a> is a collection of binary
 | |
| utilities. This also includes the assembler, as. Sometimes you will see it
 | |
| referenced as GNU as or gas. Binutils includes the linker, ld; the librarian
 | |
| or archiver, ar. There are many other programs included that provide various
 | |
| functionality.</p></div>
 | |
| <div class="para"><p>Note that while the assembler uses the same mnemonics as proposed by
 | |
| Atmel, the "glue" (pseudo-ops, operators, expression syntax) is derived from
 | |
| the common assembler syntax used in Unix assemblers, so it is not directly
 | |
| compatible to Atmel assembler source files.</p></div>
 | |
| <div class="para"><p>Binutils is configured for the AVR target and each of the programs is prefixed
 | |
| with the target name. So you have programs such as:</p></div>
 | |
| <div class="vlist"><dl>
 | |
| <dt>
 | |
| <tt>avr-as</tt>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     The Assembler.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <tt>avr-ld</tt>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     The Linker.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <tt>avr-ar</tt>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     Create, modify, and extract from archives (libraries).
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <tt>avr-ranlib</tt>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     Generate index to archive (library) contents.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <tt>avr-objcopy</tt>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     Copy and translate object files.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <tt>avr-objdump</tt>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     Display information from object files including disassembly.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <tt>avr-size</tt>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     List section sizes and total size.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <tt>avr-nm</tt>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     List symbols from object files.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <tt>avr-strings</tt>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     List printable strings from files.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <tt>avr-strip</tt>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     Discard symbols.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <tt>avr-readelf</tt>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     Display the contents of ELF format files.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <tt>avr-addr2line</tt>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     Convert addresses to file and line.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <tt>avr-c++filt</tt>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     Filter to demangle encoded C++ symbols.
 | |
| </p>
 | |
| </dd>
 | |
| </dl></div>
 | |
| <div class="para"><p>See the binutils user manual for more information on what each program can do.</p></div>
 | |
| <h3 id="_3_4_c_library">3.4 C Library</h3><div style="clear:left"></div>
 | |
| <div class="para"><p><a href="http://www.nongnu.org/avr-libc/">avr-libc</a> is the Standard C Library for
 | |
| AVR GCC. It contains many of the standard C routines, and many non-standard
 | |
| routines that are specific and useful for the AVR processor.</p></div>
 | |
| <div class="admonitionblock">
 | |
| <table><tr>
 | |
| <td class="icon">
 | |
| <div class="title">Note</div>
 | |
| </td>
 | |
| <td class="content">The actual library is currently split into two main parts, libc.a and
 | |
| libm.a, where the latter contains mathematical functions (everything mentioned
 | |
| in <math.h>, and a bit more). Thus it is a good idea to always include the
 | |
| <tt>-lm</tt> linker option. The WinAVR Makefile Template automatically includes the
 | |
| <tt>-lm</tt> linker option. Also, there are additional libraries which allow a
 | |
| customization of the printf and scanf function families.</td>
 | |
| </tr></table>
 | |
| </div>
 | |
| <div class="para"><p>avr-libc also contains the most documentation on how to use (and build) the
 | |
| entire toolset, including code examples. The avr-libc user manual also
 | |
| contains the FAQ on using the toolset.</p></div>
 | |
| <h3 id="_3_5_making_your_software">3.5 Making Your Software</h3><div style="clear:left"></div>
 | |
| <div class="para"><p>There is one program that brings all of this together. This program is
 | |
| <tt>GNU make</tt>. The <tt>make</tt> program reads and interprets a makefile. A makefile is a
 | |
| text file that you write that lists and controls how something is made. It is
 | |
| most often used to control how software is made.</p></div>
 | |
| <div class="para"><p>Each of these programs are Command Line Interface (CLI) tools. They are
 | |
| controlled by parameters or switches that are added to the command line. Or,
 | |
| in the case of make, by text files that are written and used as input.</p></div>
 | |
| <div class="para"><p>Most commercial software development toolsets have an Integrated
 | |
| Development Environment (IDE). This consists of a graphical user-interface
 | |
| (GUI) that contains a programming editor and graphical front-ends to
 | |
| compiler, assembler, linker, standard C library, and librarian programs. These
 | |
| front-ends consist of dialog boxes which allow you to set build options and a
 | |
| way of creating a list of files that are in a "project". These graphical
 | |
| front-ends hide and encapsulate the real command-line compiler, assembler,
 | |
| linker, and standard library that are in the background of any software
 | |
| development toolset.</p></div>
 | |
| <div class="para"><p>WinAVR is a collection of open-source, software development tools from various
 | |
| projects. WinAVR does not have a complete graphical IDE like a commerical
 | |
| toolset, yet. Because of this, learning to build software under GCC means that
 | |
| it would be best to learn how to use the <tt>make</tt> program and learn how to write
 | |
| makefiles. Learn the common flags that are used to control GCC which in turn
 | |
| can control <tt>gas</tt> and <tt>ld</tt>. You can learn a lot by looking at the Makefile
 | |
| Template that comes with WinAVR and looking up all the programs and flags in the
 | |
| included user manuals.</p></div>
 | |
| <h3 id="_3_6_programming">3.6 Programming</h3><div style="clear:left"></div>
 | |
| <div class="para"><p>After creating your software, you'll want to program your device. You can do
 | |
| this by using the program <tt>avrdude</tt> which can interface with various hardware
 | |
| devices to program your processor.</p></div>
 | |
| <div class="para"><p><tt>avrdude</tt> is a very flexible package. All the information about AVR processors
 | |
| and various hardware programmers is stored in a text database. This database
 | |
| can be modified by any user to add new hardware or to add an AVR processor
 | |
| if it is not already listed.</p></div>
 | |
| <h3 id="_3_7_debugging">3.7 Debugging</h3><div style="clear:left"></div>
 | |
| <div class="para"><p>Debugging encompasses both simulation and emulation. Both are available in
 | |
| WinAVR.</p></div>
 | |
| <div class="para"><p>The GNU Debugger (<tt>GDB</tt>) is the main package that can be used for general
 | |
| debugging. <tt>GDB</tt> is a command-line program only. <tt>Insight</tt> is GDB plus a GUI
 | |
| written in Tcl/Tk. Both <tt>GDB</tt> and <tt>Insight</tt> are configured for the AVR and the
 | |
| main executables are prefixed with the target name: <tt>avr-gdb</tt>, and
 | |
| <tt>avr-insight</tt>. There is now also a "text mode" GUI for GDB: <tt>avr-gdbtui</tt>.</p></div>
 | |
| <div class="para"><p>To do emulation with the JTAG ICE, GDB / Insight requires a "helper" program
 | |
| called <tt>avarice</tt> which is also included.</p></div>
 | |
| <div class="para"><p>To do simulation, GDB / Insight requires a different "helper" program called
 | |
| <tt>simulavr</tt> which is also included.</p></div>
 | |
| <div class="para"><p>There are also alternatives for simulation. Atmel offers a free package called
 | |
| <tt>AVR Studio</tt> which can also do simulation. The latest version of <tt>AVR Studio</tt>
 | |
| is 4.13. Note that <tt>AVR Studio</tt> is currently free to the public, but it is not
 | |
| Open Source.</p></div>
 | |
| <div class="para"><p>See the section, 5.0 Debugging, Simulating, and Emulating, for detailed
 | |
| information on debugging.</p></div>
 | |
| </div>
 | |
| <h2 id="_4_0_setting_up_a_project">4.0 Setting Up a Project</h2>
 | |
| <div class="sectionbody">
 | |
| <h3 id="_4_1_where_s_the_gui_ide">4.1 Where's the GUI / IDE?</h3><div style="clear:left"></div>
 | |
| <div class="para"><p>You won't find a typical GUI / IDE like you might be used to with other
 | |
| commercial cross-compilers, or like native compilers on Windows. Each of the
 | |
| tools in WinAVR are from their own projects. In this case, an editor or IDE
 | |
| is just another component in the toolset. And, everybody has their own
 | |
| favourite they want to use. WinAVR allows flexibility.</p></div>
 | |
| <div class="para"><p>WinAVR comes with an editor / IDE called Programmers Notepad. This is an
 | |
| Open Source editor with some IDE capabilites. Because the compiler and
 | |
| associated utilities are all command-line driven, you are free to use
 | |
| whatever editor / IDE you want to provided it can call command-line
 | |
| programs. See below for more information on Programmers Notepad.</p></div>
 | |
| <div class="para"><p>There is current work going on to continually improve the IDE capabilities
 | |
| of Programmers Notepad. Let us know if you're interested in volunteering
 | |
| to help on these projects.</p></div>
 | |
| <h3 id="_4_2_programmers_notepad">4.2 Programmers Notepad</h3><div style="clear:left"></div>
 | |
| <div class="para"><p><a href="http://www.pnotepad.org/">Programmers Notepad (PN)</a> is an Open Source editor
 | |
| with some IDE features. Version 2.x is is a complete rewrite of version 1.
 | |
| Many new features are still being added.</p></div>
 | |
| <div class="para"><p>PN contains the Open Source <a href="http://www.scintilla.org/">Scintilla</a> editor
 | |
| component as the basis for its editor.</p></div>
 | |
| <div class="para"><p>PN can call any command-line tool and capture it's output. This is ideal for
 | |
| calling the make utility, which executes your makefile, which in turn calls
 | |
| the compiler, linker, and other utilities used to build your software. PN will
 | |
| then capture the output and display it in a window. You can also click on any
 | |
| GCC warning or error and PN will automatically open the file and go to the
 | |
| line where the warning or error occurred.</p></div>
 | |
| <div class="para"><p>To set up tools, go to the Tools menu up top, select Options, then select Tools
 | |
| on the left side menu. The best Scheme to add tools is under
 | |
| "(None - Global Tools)". After you add your tool, it will appear in the
 | |
| Main Menu under Tools.</p></div>
 | |
| <h3 id="_4_3_make_makefiles_and_the_makefile_template">4.3 Make, Makefiles, and the Makefile Template</h3><div style="clear:left"></div>
 | |
| <div class="para"><p>make is a program that is widely used to build software. make reads and
 | |
| executes makefiles, which are descriptions of how to build something.
 | |
| Makefiles typical do things such as group files together, set lists of
 | |
| compiler and linker flags, list rules of how to compile source code to
 | |
| object code, how to link object files, how to convert files from one
 | |
| type to another, and many other things.</p></div>
 | |
| <div class="para"><p>When you set up your project, add a makefile to control how to build your
 | |
| software. When you use Programmers Notepad, or other IDE, set it up to
 | |
| call make and have it execute your project's makefile.</p></div>
 | |
| <div class="para"><p>Three Makefile Templates are included in WinAVR, which provides a lot of
 | |
| functionality already written for you. There is the standard Makefile Template
 | |
| (Makefile) that has always been included with WinAVR. And there are two new
 | |
| Makefile Templates, one to generate a library instead of an application
 | |
| (Makefile.lib) and another Makefile Template that enables whole program
 | |
| optimization (Makefile.wpo). You can can copy any of these templates to your
 | |
| project's directory and easily modify it to fit your project.
 | |
| These Makefile Templates can be found in the
 | |
| <tt><install>\sample</tt> directory. Copy any of these templates and rename them to
 | |
| <tt>Makefile</tt>.</p></div>
 | |
| <div class="para"><p>WinAVR also includes the <a href="http://www.sax.de/~joerg/mfile/">MFile</a> utility.
 | |
| MFile is a automatic makefile generator for AVR GCC written in Tcl/Tk and can
 | |
| run on various platforms including Windows, FreeBSD, Linux, etc. You can
 | |
| use this utility to help you quickly generate a makefile for your project
 | |
| based on some simple menu input. MFile for the Windows platform uses the WinAVR
 | |
| Makefile Template for it's template.</p></div>
 | |
| <div class="admonitionblock">
 | |
| <table><tr>
 | |
| <td class="icon">
 | |
| <div class="title">Note</div>
 | |
| </td>
 | |
| <td class="content">I HIGHLY RECOMMEND THAT YOU BECOME FAMILIAR WITH THE MAKE PROGRAM
 | |
| AND WRITING MAKEFILES! PLEASE READ THE MAKE USER MANUAL!</td>
 | |
| </tr></table>
 | |
| </div>
 | |
| <div class="para"><p>For more information on the make program and writing makefiles, see the make
 | |
| user manual that is included or see Links below for GNU Manuals Online.</p></div>
 | |
| </div>
 | |
| <h2 id="_5_0_debugging_simulating_and_emulating">5.0 Debugging, Simulating, and Emulating</h2>
 | |
| <div class="sectionbody">
 | |
| <div class="admonitionblock">
 | |
| <table><tr>
 | |
| <td class="icon">
 | |
| <div class="title">Note</div>
 | |
| </td>
 | |
| <td class="content">The term "debugging" is a generic term and can mean either simulation or
 | |
| emulation below.</td>
 | |
| </tr></table>
 | |
| </div>
 | |
| <div class="para"><p>There are several different ways to go about debugging, simulating, and
 | |
| emulating. Each solution has their own requirements and may involve various
 | |
| tradeoffs.</p></div>
 | |
| <div class="para"><p>There are open source applications that can be used for simulation and
 | |
| emulation, and they are included with WinAVR. Use <tt>GDB</tt> or <tt>Insight</tt>, with the
 | |
| <tt>simulavr</tt> back-end for simulating, or with the <tt>avarice</tt> back-end to emulate
 | |
| using the Atmel JTAG ICE.</p></div>
 | |
| <div class="para"><p>There is a free application from Atmel that can be used for simulation or
 | |
| emulation: AVR Studio. The latest version as of this writing is 4.11. AVR Studio
 | |
| can be downloaded from the Atmel web site.</p></div>
 | |
| <div class="para"><p>There are also a number of commercial simulators, such as VMLab or Proteus VSM.</p></div>
 | |
| <div class="para"><p>In general, debugging is dependent upon:</p></div>
 | |
| <div class="olist"><ol>
 | |
| <li>
 | |
| <p>
 | |
| The application used to debug.
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| The file format used.
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| The type of debugging information generated in the object code.
 | |
| </p>
 | |
| </li>
 | |
| </ol></div>
 | |
| <div class="para"><p>Many times the application that is being used, determines the file format, and
 | |
| the type of debugging information that needs to be generated.</p></div>
 | |
| <div class="para"><p>This version of the compiler can generate both <strong>DWARF2</strong> and <strong>stabs</strong> debugging
 | |
| information.</p></div>
 | |
| <div class="admonitionblock">
 | |
| <table><tr>
 | |
| <td class="icon">
 | |
| <div class="title">Note</div>
 | |
| </td>
 | |
| <td class="content">The compiler will currently default to generating DWARF2 debugging info.</td>
 | |
| </tr></table>
 | |
| </div>
 | |
| <div class="para"><p>If you are using the WinAVR Makefile Template, or using MFile, there is a line
 | |
| in the makefile that controls the type of debug information that is generated:</p></div>
 | |
| <div class="listingblock">
 | |
| <div class="content">
 | |
| <pre><tt>DEBUG = dwarf-2</tt></pre>
 | |
| </div></div>
 | |
| <div class="para"><p>To generate stabs information change this line to:</p></div>
 | |
| <div class="listingblock">
 | |
| <div class="content">
 | |
| <pre><tt>DEBUG = stabs</tt></pre>
 | |
| </div></div>
 | |
| <div class="admonitionblock">
 | |
| <table><tr>
 | |
| <td class="icon">
 | |
| <div class="title">Tip</div>
 | |
| </td>
 | |
| <td class="content">MFile can change this setting automatically through a menu option.</td>
 | |
| </tr></table>
 | |
| </div>
 | |
| <div class="para"><p>This line in the makefile changes the <tt>-g</tt> compiler switch that is sent to GCC.
 | |
| See the GCC user manual for more information.</p></div>
 | |
| <div class="para"><p>The compiler will build your software and automatically output an ELF file.</p></div>
 | |
| <h3 id="_5_1_gdb_insight_simulavr_or_avarice">5.1 GDB/Insight + simulavr or avarice</h3><div style="clear:left"></div>
 | |
| <div class="para"><p>The GNU Debugger (GDB) can be used, with other programs, to simulate or
 | |
| emulate your AVR program. Insight is GDB with a GUI (written in Tcl/Tk).
 | |
| Insight also has a console window which provides the traditional
 | |
| command-line interface to GDB. The terms <em>GDB</em> and <em>Insight</em> will be used
 | |
| interchangably.</p></div>
 | |
| <div class="para"><p>Use <tt>avarice</tt> with GDB for use with your JTAG In-Circuit Emulator (ICE).</p></div>
 | |
| <div class="para"><p>Use <tt>simulavr</tt> with GDB for simulation.</p></div>
 | |
| <div class="para"><p>See each of the package's documentation for more information on usage.</p></div>
 | |
| <div class="para"><div class="title">Requirements</div><p>File Format: ELF<br />
 | |
| Debugging Information: DWARF-2 (preferred) or stabs</p></div>
 | |
| <div class="admonitionblock">
 | |
| <table><tr>
 | |
| <td class="icon">
 | |
| <div class="title">Tip</div>
 | |
| </td>
 | |
| <td class="content">There is a <a href="http://winavr.sourceforge.net/document.html">tutorial on how to use GDB and avarice</a>
 | |
| at the WinAVR web site.</td>
 | |
| </tr></table>
 | |
| </div>
 | |
| <div class="admonitionblock">
 | |
| <table><tr>
 | |
| <td class="icon">
 | |
| <div class="title">Tip</div>
 | |
| </td>
 | |
| <td class="content">If you use <tt>avarice</tt>, when you specify a serial port to use with the —jtag
 | |
| flag, you must specify it in the form of:</td>
 | |
| </tr></table>
 | |
| </div>
 | |
| <div class="listingblock">
 | |
| <div class="content">
 | |
| <pre><tt>--jtag /dev/comX</tt></pre>
 | |
| </div></div>
 | |
| <div class="para"><p>where <strong>X</strong> is the COM port number you are using. This is due to the fact that
 | |
| avarice is linked to the Cygwin DLL, which requires a Unix-type format for
 | |
| the COM port number.</p></div>
 | |
| <h3 id="_5_2_avr_studio">5.2 AVR Studio</h3><div style="clear:left"></div>
 | |
| <div class="para"><p>AVR Studio 4.10 and above has a new parser component that can read ELF files
 | |
| natively. These ELF files must contain DWARF2 debugging information.</p></div>
 | |
| <div class="para"><div class="title">Requirements (for AVR Studio version 4.10 and greater)</div><p>File Format: ELF<br />
 | |
| Debugging Information: DWARF-2</p></div>
 | |
| <h3 id="_5_3_commercial_simulators">5.3 Commercial Simulators</h3><div style="clear:left"></div>
 | |
| <div class="para"><p>Certain commercial simulators have more requirements to use their products.
 | |
| Namely, you must compile your software with the <tt>stabs</tt> debugging information,
 | |
| and you must convert your ELF file to either the <strong>COFF</strong> format or to the
 | |
| <strong>Atmel Extended COFF</strong> format.</p></div>
 | |
| <div class="para"><div class="title">Requirements (dependent upon application used)</div><p>File Format: COFF / Atmel Extended COFF<br />
 | |
| Debugging Information: stabs</p></div>
 | |
| <div class="para"><p>The GNU Binutils program objcopy (avr-objcopy) has been patched where it can
 | |
| now convert from ELF to either of these formats. Note that the converter is
 | |
| a beta release.</p></div>
 | |
| <div class="para"><p>The usage of avr-objcopy to convert ELF/stabs debugging
 | |
| information into AVR COFF debugging information is (long lines wrapped
 | |
| with backslashes):</p></div>
 | |
| <div class="listingblock">
 | |
| <div class="content">
 | |
| <pre><tt>avr-objcopy \
 | |
|         --debugging \
 | |
|         -O $(FORMAT) \
 | |
|         --change-section-address .data-0x800000 \
 | |
|         --change-section-address .bss-0x800000 \
 | |
|         --change-section-address .noinit-0x800000 \
 | |
|         --change-section-address .eeprom-0x810000 \
 | |
|         $(filename).elf $(filename).cof</tt></pre>
 | |
| </div></div>
 | |
| <div class="para"><p>where <tt>$(FORMAT)</tt> should either be <tt>coff-avr</tt> (COFF format that matches
 | |
| the older Atmel AVR COFF documentation, as understood by AVR Studio 3,
 | |
| early versions of AVR Studio 4, and also by VMLab), or <tt>coff-ext-avr</tt>
 | |
| (current AVR Extended COFF specification, as understood by AVR
 | |
| Studio 4.07+; adds long filenames and structure debugging).</p></div>
 | |
| <div class="para"><p>There might be some warnings when you run the above, like</p></div>
 | |
| <div class="listingblock">
 | |
| <div class="content">
 | |
| <pre><tt>Warning: file {standard input} not found in symbol table, ignoring
 | |
| Warning: ignoring function __vectors() outside any compilation unit
 | |
| Warning: ignoring function __bad_interrupt() outside any compilation unit</tt></pre>
 | |
| </div></div>
 | |
| <div class="para"><p>Perhaps more of them if your avr-libc has been installed with
 | |
| debugging symbols (the default WinAVR installation strips debugging
 | |
| symbols from the installed library files). There should be no other
 | |
| warning normally.</p></div>
 | |
| <div class="admonitionblock">
 | |
| <table><tr>
 | |
| <td class="icon">
 | |
| <div class="title">Note</div>
 | |
| </td>
 | |
| <td class="content">The avr-objcopy usage describe above is in the Makefile Template that is
 | |
| included with WinAVR and in the MFile template. You should only have to call
 | |
| <em>make coff</em> to convert to AVR COFF, or call <em>make extcoff</em> to convert to
 | |
| AVR Extended COFF.</td>
 | |
| </tr></table>
 | |
| </div>
 | |
| <div class="para"><p>As Atmel has now moved towards the ELF file format with DWARF-2 debugging
 | |
| information, the (E)COFF conversion is deprecated. Thus, there is currently no
 | |
| ongoing development on the COFF converter. There are a few known bugs in it, in
 | |
| particular it is known that using forward struct references can crash
 | |
| the converter. Unfortunately, fixing this bug would be close to a
 | |
| whole rewrite of it. As a workaround, just avoid forward struct references.</p></div>
 | |
| <div class="para"><p>Instead of writing:</p></div>
 | |
| <div class="listingblock">
 | |
| <div class="content">
 | |
| <pre><tt>typedef struct foo *foo_p;
 | |
| struct foo {
 | |
|     foo_p next;
 | |
|     int something;
 | |
| };</tt></pre>
 | |
| </div></div>
 | |
| <div class="para"><p>reorder it to:</p></div>
 | |
| <div class="listingblock">
 | |
| <div class="content">
 | |
| <pre><tt>struct foo {
 | |
|     struct foo *next;
 | |
|     int something;
 | |
| };
 | |
| typedef struct foo *foo_p;</tt></pre>
 | |
| </div></div>
 | |
| <div class="para"><p>That strategy is known to work around that particular bug.</p></div>
 | |
| </div>
 | |
| <h2 id="_6_0_useful_additions">6.0 Useful Additions</h2>
 | |
| <div class="sectionbody">
 | |
| <h3 id="_6_1_operating_systems">6.1 Operating Systems</h3><div style="clear:left"></div>
 | |
| <div class="para"><p>While an Operating System, or RTOS, isn't necessary to write software for
 | |
| the AVR, there may be times when it is desirable. Below, are some links for
 | |
| free or open source operating systems / kernels for the AVR. Note that this
 | |
| may not be a complete list.</p></div>
 | |
| <div class="vlist"><dl>
 | |
| <dt>
 | |
| <a href="http://www.barello.net/avrx/">AvrX</a>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     AvrX is a Real-Time Multitasking Kernel.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <a href="http://www.ethernut.de/en/">EtherNut - Nut/OS</a>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     Ethernut is an Open Source Hardware and Software Project for building
 | |
|     Embedded Ethernet Devices. It contains Nut/OS which is an intentionally
 | |
|     simple RTOS for the ATmega128, which provides a minimum of services to run
 | |
|     Nut/Net, the TCP/IP stack.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <a href="http://www.freertos.org/">FreeRTOS</a>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     FreeRTOS is a portable, open source, mini Real Time Scheduler (or mini
 | |
|     RTOS kernel).
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <a href="http://webs.cs.berkeley.edu/tos/">TinyOS</a>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     TinyOS is a component-based runtime environment designed to provide
 | |
|     support for deeply embedded systems which require concurrency intensive
 | |
|     operations while constrained by minimal hardware resources.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <a href="http://www.sics.se/~adam/contiki/">Contiki</a>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     Contiki is an Internet-enabled operating system and desktop environment
 | |
|     for a number of smallish systems.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <a href="http://www.shift-right.com/xmk/index.html">XMK - eXtreme Minimal Kernel</a>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     XMK is a preemptive multitasking scheduler/kernel for 8bit
 | |
|     microcontrollers. Its goal is to provide a bare bones RTOS with a small
 | |
|     enough footprint (RAM+ROM) to run on 8bit microcontrollers.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <a href="http://picoos.sourceforge.net/">pico OS</a>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     pico OS is a highly configurable and very fast real time operating system
 | |
|     (RTOS). It targets a wide range of architectures, from very small 8 bit
 | |
|     processors and microcontrollers up to very huge platforms. An AVR port is
 | |
|     available.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <a href="http://usmartx.sourceforge.net/">uSmartX</a>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     uSmartX is a non-preemptive, multitasking, priority based RTOS. It features
 | |
|     mechanisms for inter-task communication and basic task and time control
 | |
|     functions.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <a href="http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_type=project&item_id=725">Super Simple Tasker (SST)</a>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     This is an implementation of a lightweight scheduler so called "Super
 | |
|     Simple Tasker" - SST. The idea is taken from the Robert Ward's article -
 | |
|     "Practical Real-Time Techniques" <a href="http://www.quantum-leaps.com/resources/Ward03.pdf">http://www.quantum-leaps.com/resources/Ward03.pdf</a>.
 | |
|     The SST allows to significantly reduce needs for precious RAM and ROM and
 | |
|     still allows to keep a real time characteristic of the scheduler (e.g.
 | |
|     tasks prioritization and preemption).
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <a href="http://sourceforge.net/projects/chibios/">ChibiOS/RT</a>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     ChibiOS/RT is a compact and fast RTOS designed for embedded applications.
 | |
|     It offers threads, mutexes, semaphores, messages, events, timers, flexible
 | |
|     I/O with timeout capability.
 | |
| </p>
 | |
| </dd>
 | |
| </dl></div>
 | |
| <h3 id="_6_2_other">6.2 Other</h3><div style="clear:left"></div>
 | |
| <div class="para"><p>Here are some links to free or open source components that may be useful.</p></div>
 | |
| <div class="vlist"><dl>
 | |
| <dt>
 | |
| <a href="http://www.sics.se/~adam/uip/">uIP - TCP/IP Stack for Embedded Microcontrollers</a>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     uIP is an implementation of the TCP/IP protocol stack intended for small
 | |
|     8-bit and 16-bit microcontrollers. It provides the necessary protocols for
 | |
|     Internet communication, with a very small code footprint and RAM
 | |
|     requirements - the uIP code size is on the order of a few kilobytes and RAM
 | |
|     usage is on the order of a few hundred bytes.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <a href="http://www.sics.se/~adam/pt/">Protothreads</a>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     Protothreads are extremely lightweight stackless threads designed for
 | |
|     severely memory constrained systems such as small embedded systems or
 | |
|     sensor network nodes. Protothreads provide linear code execution for
 | |
|     event-driven systems implemented in C. Protothreads can be used with or
 | |
|     without an underlying operating system.
 | |
| </p>
 | |
| </dd>
 | |
| </dl></div>
 | |
| </div>
 | |
| <h2 id="_7_0_finding_help">7.0 Finding Help</h2>
 | |
| <div class="sectionbody">
 | |
| <div class="para"><p>WinAVR is a packaged collection of software devlopment tools built from open
 | |
| source projects.</p></div>
 | |
| <div class="para"><p>There is a large community of people who use these tools. There are a number
 | |
| of these people who volunteer their time to help other people with problems
 | |
| or questions. And then there are other people who also volunteer their time
 | |
| to contribute to these open source projects.</p></div>
 | |
| <div class="para"><p>The main places to find help is the Documenation and Online Sources. Please
 | |
| try and find the answer in the documentation first before asking for help
 | |
| online.</p></div>
 | |
| <div class="admonitionblock">
 | |
| <table><tr>
 | |
| <td class="icon">
 | |
| <div class="title">Tip</div>
 | |
| </td>
 | |
| <td class="content">If you need to ask for help online, please read this first:
 | |
| <a href="http://catb.org/~esr/faqs/smart-questions.html">How To Ask Questions The Smart Way</a></td>
 | |
| </tr></table>
 | |
| </div>
 | |
| <h3 id="_7_1_documentation">7.1 Documentation</h3><div style="clear:left"></div>
 | |
| <div class="para"><p>The first and best place to find help is in the documentation! WinAVR includes
 | |
| the user manuals for many of the software tools that are shipped in the
 | |
| package.</p></div>
 | |
| <div class="para"><p>The documentation for any particular package may come in different formats
 | |
| depending upon what is available from that package and available space
 | |
| in the WinAVR installation. The different documentation formats that you'll
 | |
| find in WinAVR are:</p></div>
 | |
| <div class="olist"><ol>
 | |
| <li>
 | |
| <p>
 | |
| HTML - Hyper Text Markup Language. Requires a web browser to view.
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| PDF - Portable Document Format. Requires a PDF viewer such as Acrobat.
 | |
| </p>
 | |
| </li>
 | |
| </ol></div>
 | |
| <div class="para"><p>Additionally many user manuals can also be found online, especially packages
 | |
| that are part of the GNU project. You can find links to many of these in the
 | |
| Links section below.</p></div>
 | |
| <div class="para"><p>For packages that have HTML, and PDF documentation, look in your
 | |
| <tt><install>\doc</tt> directory.</p></div>
 | |
| <div class="para"><p>WinAVR installs on your desktop two shortcuts. One is to the HTML
 | |
| documentation on avr-libc that is installed locally. The other shortcut is
 | |
| to the GNU Manuals online (which requires Internet connection).</p></div>
 | |
| <h3 id="_7_2_online_sources">7.2 Online Sources</h3><div style="clear:left"></div>
 | |
| <div class="para"><p>I'll say it again:</p></div>
 | |
| <div class="para"><p>Please try and find the answer in the documentation first before asking for
 | |
| help online.</p></div>
 | |
| <div class="admonitionblock">
 | |
| <table><tr>
 | |
| <td class="icon">
 | |
| <div class="title">Tip</div>
 | |
| </td>
 | |
| <td class="content">If you need to ask for help online, please read this first:
 | |
| <a href="http://catb.org/~esr/faqs/smart-questions.html">How To Ask Questions The Smart Way</a></td>
 | |
| </tr></table>
 | |
| </div>
 | |
| <div class="para"><p>Help for the AVR software development toolset (and specifically AVR GCC) can
 | |
| be found at:</p></div>
 | |
| <div class="vlist"><dl>
 | |
| <dt>
 | |
| <a href="http://www.avrfreaks.net">AVR Freaks</a>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     All AVR, all the time! This site has several forums including a general
 | |
|     AVR Forum and an AVR GCC Forum specifically for discussion of the GCC
 | |
|     compiler for the AVR. They also have an Academy which contains user's
 | |
|     projects. This gives you access to a lot of sample code, libraries, and
 | |
|     various AVR projects.
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <a href="http://savannah.nongnu.org/mail/?group=avr">avr-gcc mailing list</a>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     The avr-gcc list is intended as a forum for dicussion about the following:
 | |
|     Bugs, Programming technique, Installation and distributions, Hints and
 | |
|     tips, Other avr-gcc related stuff. Note that all of the developers of the
 | |
|     toolset are subscribed to this list!
 | |
| </p>
 | |
| </dd>
 | |
| <dt>
 | |
| <a href="http://www.mikrocontroller.net/">Mikrocontroller.net</a>
 | |
| </dt>
 | |
| <dd>
 | |
| <p>
 | |
|     For native German speakers. They have a forum for the AVR GCC compiler.
 | |
| </p>
 | |
| </dd>
 | |
| </dl></div>
 | |
| <div class="para"><p>Help for other projects and tools included in WinAVR can usually be found at
 | |
| the individual project's web page which usually includes links to their
 | |
| mailing lists.</p></div>
 | |
| <div class="para"><p>If you need help, do not contact the WinAVR developers personally! Use these
 | |
| web sites and mailing lists first!</p></div>
 | |
| </div>
 | |
| <h2 id="_8_0_toolset_bugs">8.0 Toolset Bugs</h2>
 | |
| <div class="sectionbody">
 | |
| <div class="para"><p>You can fill out a relevant tracker on the
 | |
| <a href="http://sourceforge.net/projects/winavr/">WinAVR SourceForge project page</a>, if you
 | |
| have one of the following:</p></div>
 | |
| <div class="ilist"><ul>
 | |
| <li>
 | |
| <p>
 | |
| a bug in the packaging
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| a bug in the installation
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| any suggestions for a new tool to be added
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| any suggestions for improvements to the overall package
 | |
| </p>
 | |
| </li>
 | |
| </ul></div>
 | |
| <div class="admonitionblock">
 | |
| <table><tr>
 | |
| <td class="icon">
 | |
| <div class="title">Important</div>
 | |
| </td>
 | |
| <td class="content">IF THERE ARE BUGS IN THE SOFTWARE TOOLS THEMSELVES, THE MAINTAINERS
 | |
| OF THE INDIVIDUAL SOFTWARE PROJECTS SHOULD BE NOTIFIED IN THE APPROPRIATE
 | |
| MANNER, NOT ME, OR THE WINAVR PROJECT!!!!</td>
 | |
| </tr></table>
 | |
| </div>
 | |
| <div class="para"><p>Generally, if you encounter a bug with a library routine or a bug with a
 | |
| specifc AVR processor or header file, notify the avr-libc project first
 | |
| (see Links below). They will let you know if the bug is truly in the avr-libc
 | |
| project, or if it should be passed on to the GCC project. If the bug is in
 | |
| GCC, go to their web page (see Links below) on how to report bugs to GCC.</p></div>
 | |
| <div class="para"><p>For bugs with Programmer's Notepad 2, see it's SourceForge web site
 | |
| (see Links) to issue a Bug Tracker, or email it's author (see Credits).</p></div>
 | |
| <div class="para"><p>For bugs with avrdude, see it's Project page (see Links).</p></div>
 | |
| <div class="para"><p>For bugs with simulavr, see it's Project page (see Links).</p></div>
 | |
| <div class="para"><p>For bugs with avarice, see it's Project page (see Links).</p></div>
 | |
| <div class="para"><p>For bugs with GDB, see it's web page (see Links).</p></div>
 | |
| <div class="para"><p>For bugs with Insight, see it's web page (see Links).</p></div>
 | |
| <div class="para"><p>For bugs with SRecord, see it's Home page (see Links).</p></div>
 | |
| </div>
 | |
| <h2 id="_9_0_winavr_faq">9.0 WinAVR FAQ</h2>
 | |
| <div class="sectionbody">
 | |
| <div class="para"><p>This FAQ is specific to the WinAVR package and installation. For a programming
 | |
| issues, see the avr-libc FAQ in the avr-libc documentation included in the
 | |
| WinAVR package or the
 | |
| <a href="http://www.nongnu.org/avr-libc/user-manual/">avr-libc user manual online</a>.</p></div>
 | |
| <div class="para"><p>#1) <em>When I run a program, why do I get the error "You have multiple copies of cygwin1.dll on your system."?</em></p></div>
 | |
| <div class="para"><p>Certain packages in WinAVR are built with Cygwin and are linked to their
 | |
| emulation library: cygwin1.dll. If you also have Cygwin installed seperately,
 | |
| these programs will find the cygwin1.dll that is shipped and included with
 | |
| WinAVR, and will also find the cygwin1.dll in your Cygwin installation. If
 | |
| these versions are different, you will get this error.</p></div>
 | |
| <div class="para"><p>WinAVR must ship the cygwin1.dll file to support it's packages, as most people
 | |
| do not have Cygwin installed on their system and it's not fair to ask people to
 | |
| install such a huge package as a prerequisite.</p></div>
 | |
| <div class="para"><p>Unfortunately, the <a href="http://cygwin.com/faq.html">Cygwin FAQ</a> says that the only
 | |
| way around this is to remove other copies of cygwin1.dll. This would mean
 | |
| either uninstalling Cygwin so the WinAVR programs work, or perhaps renaming
 | |
| the cygwin1.dll found in the <tt><install>\bin</tt> directory so the WinAVR programs
 | |
| will use the cygwin1.dll that is in the Cygwin installation. However, if you do
 | |
| the latter, note that the version of cygwin1.dll you have in your Cygwin
 | |
| installation is probably different than the version of cygwin1.dll that was
 | |
| used to build the WinAVR programs. In this case, use at your own risk.</p></div>
 | |
| <div class="para"><p>#2) <em>I have any of the following warnings when I create a COFF file, what should I do?</em></p></div>
 | |
| <div class="listingblock">
 | |
| <div class="content">
 | |
| <pre><tt>Warning: file {standard input} not found in symbol table, ignoring
 | |
| Warning: ignoring function __vectors() outside any compilation unit
 | |
| Warning: ignoring function __bad_interrupt() outside any compilation unit
 | |
| Discarding local symbol outside any compilation unit: .__do_copy_data_start
 | |
| Discarding local symbol outside any compilation unit: .__do_copy_data_loop</tt></pre>
 | |
| </div></div>
 | |
| <div class="para"><p>Nothing. These warnings can be ignored.</p></div>
 | |
| <div class="para"><p>#3) <em>I use WinAVR with AVR Studio. I get an error when avr-objcopy is creating the load file for the EEPROM. It says there are no sections to be copied.</em></p></div>
 | |
| <div class="para"><p>avr-objcopy is a part of GNU Binutils. In GNU Binutils 2.17 or later, the objcopy
 | |
| program was changed to return an error when there are no sections to be copied.
 | |
| This is different than previous versions of the objcopy program. This is not
 | |
| really an error, as it is ok if there are no sections to be copied.</p></div>
 | |
| <div class="para"><p>The Makefile has to be aware of this new behaviour and to not accept this as
 | |
| a real error. Use the WinAVR Makefile Template as the basis of your Makefile, or
 | |
| use AVR Studio 4.13 (soon to be released, if not already) which has changed how
 | |
| it generates its internal Makefile on GCC projects to correctly account for this.</p></div>
 | |
| </div>
 | |
| <h2 id="_10_0_winavr_project">10.0 WinAVR Project</h2>
 | |
| <div class="sectionbody">
 | |
| <h3 id="_10_1_build_notes">10.1 Build Notes</h3><div style="clear:left"></div>
 | |
| <div class="para"><p>The contained packages are built either in the Cygwin environment, or the
 | |
| MinGW environment. Some, but not all, packages are dependendent upon one or
 | |
| more Cygwin DLLs, which are included in WinAVR.</p></div>
 | |
| <div class="olist"><ol>
 | |
| <li>
 | |
| <p>
 | |
| GNU Binutils: MinGW.
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| GCC: MinGW.
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| avr-libc: MinGW.
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| avrdude: Cygwin.
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| GDB/Insight: MinGW.
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| AVaRICE: Cygwin. Requires: cygwin1.dll,
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| SimulAVR: Cygwin. Requires: cygwin1.dll.
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| SRecord: MinGW.
 | |
| </p>
 | |
| </li>
 | |
| </ol></div>
 | |
| <div class="para"><p>DLL Versions:</p></div>
 | |
| <div class="ilist"><ul>
 | |
| <li>
 | |
| <p>
 | |
| cygwin1.dll: 1.5.23-2
 | |
| </p>
 | |
| </li>
 | |
| </ul></div>
 | |
| <div class="para"><p>Programmer's Notepad 2 was built by the author, Simon Steele (see Credits).
 | |
| Tofrodos was built by the author, Christopher Heng (see Credits).</p></div>
 | |
| <h3 id="_10_2_credits">10.2 Credits</h3><div style="clear:left"></div>
 | |
| <div class="para"><p>Thank you to everyone who uses WinAVR!</p></div>
 | |
| <div class="ilist"><ul>
 | |
| <li>
 | |
| <p>
 | |
| WinAVR software devleopment toolset distribution built by
 | |
| </p>
 | |
| </li>
 | |
| </ul></div>
 | |
| <div class="para"><p>Eric B. Weddington<br />
 | |
| <a href="mailto:arcanum@users.sourceforge.net">email</a></p></div>
 | |
| <div class="para"><p>One person cannot do all of this alone. There are many, many people involved
 | |
| in making this package what it is. I am deeply indebted to those people. Below
 | |
| is an attempt at a list of credits. Any omissions are my fault and corrections
 | |
| are solicited.</p></div>
 | |
| <div class="ilist"><ul>
 | |
| <li>
 | |
| <p>
 | |
| Very Special Thanks to Joerg Wunsch for helping this project in
 | |
|   innummerable ways including writing the AVR COFF patch for binutils; patches
 | |
|   for GCC to help with debugging and binary constants; being the resident guru
 | |
|   on AVR Freaks; writing portions of this manual; reviewing all of my wacky
 | |
|   ideas; building SRecord; getting me in contact with the right people at the
 | |
|   right time ;-) ; spending the time to take me on a beautiful hike near his
 | |
|   home town; and for tolerating me over the years.
 | |
|   I don't know why he does it, but I am eternally grateful. :-)
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Very Special Thanks to major contributers to the AVR toolset: Denis Chertykov,
 | |
|   Marek Michalkiewicz, Theodore (Ted) A. Roth, Joerg Wunsch, Michael Stumpf,
 | |
|   Reiner Patommel, Brian S. Dean, Scott Finneran, David Gay, Jason Kyle,
 | |
|   Bjoern Haase, Anatoly Sokolov, Dmitry Xmelkov.
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Thanks to Brian Dessent and Dave Murphy (wintermute) for help in getting
 | |
|   the toolchain to work on Windows Vista. Thanks to Dave Murphy for the patch
 | |
|   for Insight.
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Very Special Thanks to Bjoern Haase for taking the time and effort to put
 | |
|   together the patches to add support for the ATmega256x devices and for the
 | |
|   last minute phone call with Joerg to resolve the last problem!
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Very Special Thanks to Colin O'Flynn for writing a tutorial on how to install
 | |
|   and configure WinAVR, writing a tutorial on how to use Insight, for testing
 | |
|   WinAVR, all around assistance, and helping on avrdude.
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Very Special Thanks to Torleif Sandnes for all his help in getting WinAVR
 | |
|   to work in AVR Studio in all its various ways.
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Thanks to SourceForge for hosting the WinAVR project.
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Very Special Thanks to Simon Steele for permission to include Programmers
 | |
|   Notepad in WinAVR. Programmer's Notepad is written and built by Simon Steele.
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Native Win32 Unix programs from:
 | |
| </p>
 | |
| <div class="ilist"><ul>
 | |
| <li>
 | |
| <p>
 | |
| Karl M. Syring <a href="http://www.weihenstephan.de/~syring/win32/UnxUtils.html">http://www.weihenstephan.de/~syring/win32/UnxUtils.html</a>
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| <a href="http://www.morpheus.demon.co.uk/">http://www.morpheus.demon.co.uk/</a> (bison and flex)
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| <a href="http://www.mingw.org/">MinGW</a>
 | |
| </p>
 | |
| </li>
 | |
| </ul></div>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Tofrodos 1.6 is written and built by Chistopher Heng
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Thanks to the following people for additional material for the
 | |
|   Makefile Template: Tim Henigan, Peter Fleury, Joerg Wunsch, Reiner Patommel,
 | |
|   Sander Pool, Frederik Rouleau, Markus Pfaff, and Carlos Lamas.
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Special Thanks to Markus Assfalg for all his input in doing AVR COFF
 | |
|   pre-alpha tests and to Svenn-Ivar Svendsen from Atmel Norway, who
 | |
|   willingly answered questions regarding Atmel's COFF specs.
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Very Special Thanks to Torleif Sandness of Atmel, the principal developer of
 | |
|   Atmel's ELF parser for AVR Studio, for really pioneering that area.
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Thanks to members of the AVR COFF Alpha Testing team, which include:
 | |
|   Wallace White, Markus Assfalg, Volkmar Dierkes, Marc Wetzel, Andrew Ghali,
 | |
|   Omer Sinan KAYA, Eric Weddington.
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Thanks to Atmel and to Advanced Micro Tools (AMTools), makers of
 | |
|   the VMLAB debugger tool, for assistance in the endeavour of writing
 | |
|   the AVR COFF patch.
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Special thanks to Nick Moore for designing the WinAVR logos!
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Special thanks to <a href="http://www.tulsawebdev.com">Brian Brill</a> for helping
 | |
|   to move around some large files for the first release; to Ted Roth
 | |
|   for hosting the first WinAVR release on the avr-libc web site.
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| Very Special Thanks to <strong>Ted Roth</strong> and <strong>Joerg Wunsch</strong> for putting up with me
 | |
|   when I was starting out.
 | |
| </p>
 | |
| </li>
 | |
| <li>
 | |
| <p>
 | |
| And a Very Special Thank You to Atmel Corporation.
 | |
| </p>
 | |
| </li>
 | |
| </ul></div>
 | |
| </div>
 | |
| <h2 id="_11_0_links">11.0 Links</h2>
 | |
| <div class="sectionbody">
 | |
| <div class="para"><p><a href="http://sourceforge.net/projects/winavr">WinAVR Project</a><br />
 | |
| <a href="http://winavr.sourceforge.net/">WinAVR Home Page</a></p></div>
 | |
| <div class="para"><p><a href="http://sourceforge.net">SourceForge</a></p></div>
 | |
| <div class="para"><p><a href="http://www.avrfreaks.net">AVR Freaks</a></p></div>
 | |
| <div class="para"><p><a href="http://savannah.nongnu.org/mail/?group=avr">avr-gcc mailing list</a><br />
 | |
| <a href="http://savannah.nongnu.org/mail/?group=avr">avr-chat mailing list</a></p></div>
 | |
| <div class="para"><p><a href="http://www.atmel.com">Atmel</a> <tt>
 | |
| <a href="http://www.atmel.com/products/avr/">Atmel AVR microcontrollers</a> </tt>
 | |
| <a href="http://www.atmel.com/dyn/products/tools.asp?family_id=607">Atmel's AVR Tools and Software</a><br />
 | |
| <a href="http://www.atmel.no/beta_ware/">Atmel Norway's AVR Tools Beta Site</a></p></div>
 | |
| <div class="para"><p><a href="http://www.gnu.org/">GNU Project</a></p></div>
 | |
| <div class="para"><p><a href="http://www.gnu.org/manual/">GNU Manuals Online</a></p></div>
 | |
| <div class="para"><p><a href="http://sources.redhat.com/binutils/">GNU Binutils</a></p></div>
 | |
| <div class="para"><p><a href="http://www.gnu.org/software/gcc/">GNU Compiler Collection (GCC)</a></p></div>
 | |
| <div class="para"><p><a href="http://www.gnu.org/software/gcc/onlinedocs/">GCC Manuals Online</a></p></div>
 | |
| <div class="para"><p><a href="http://savannah.nongnu.org/projects/avr-libc/">avr-libc</a></p></div>
 | |
| <div class="para"><p><a href="http://savannah.nongnu.org/projects/avrdude/">avrdude</a></p></div>
 | |
| <div class="para"><p><a href="http://sourceforge.net/projects/avrdude-gui">avrdude-gui</a></p></div>
 | |
| <div class="para"><p><a href="http://savannah.nongnu.org/projects/uisp/">uisp</a></p></div>
 | |
| <div class="para"><p><a href="http://sources.redhat.com/gdb/">GNU Debugger (GDB)</a></p></div>
 | |
| <div class="para"><p><a href="http://sources.redhat.com/insight/">Insight</a></p></div>
 | |
| <div class="para"><p><a href="http://sourceforge.net/projects/avarice">avarice</a></p></div>
 | |
| <div class="para"><p><a href="http://savannah.nongnu.org/projects/simulavr/">simulavr</a></p></div>
 | |
| <div class="para"><p><a href="http://avr-ada.sourceforge.net/">AVR-Ada</a></p></div>
 | |
| <div class="para"><p><a href="http://www.sax.de/~joerg/mfile/">MFile</a></p></div>
 | |
| <div class="para"><p><a href="http://www.pnotepad.org/">Programmers Notepad</a><br />
 | |
| <a href="http://www.scintilla.org/">Scintilla</a></p></div>
 | |
| <div class="para"><p><a href="http://srecord.sourceforge.net/">SRecord</a></p></div>
 | |
| <div class="para"><p><a href="http://www.splint.org/">Splint</a></p></div>
 | |
| <div class="para"><p><a href="http://libusb-win32.sourceforge.net/">LibUSB-Win32</a></p></div>
 | |
| <div class="para"><p><a href="http://reality.sgiweb.org/davea/dwarf.html">dwarfdump</a></p></div>
 | |
| <div class="para"><p><a href="http://www.cs.utah.edu/~regehr/stacktool/">stacktool</a></p></div>
 | |
| <div class="para"><p><a href="http://www.barello.net/avrx/">AvrX</a></p></div>
 | |
| <div class="para"><p><a href="http://www.ethernut.de/en/">EtherNut - Nut/OS</a></p></div>
 | |
| <div class="para"><p><a href="http://www.freertos.org/">FreeRTOS</a></p></div>
 | |
| <div class="para"><p><a href="http://webs.cs.berkeley.edu/tos/">TinyOS</a></p></div>
 | |
| <div class="para"><p><a href="http://www.sics.se/~adam/contiki/">Contiki</a></p></div>
 | |
| <div class="para"><p><a href="http://sourceforge.net/projects/xmk">XMK - eXtreme Minimal Kernel</a></p></div>
 | |
| <div class="para"><p><a href="http://picoos.sourceforge.net/">Pico OS</a></p></div>
 | |
| <div class="para"><p><a href="http://usmartx.sourceforge.net/">uSmartX</a></p></div>
 | |
| <div class="para"><p><a href="http://libtom.org/?page=features&newsitems=5&whatfile=crypt">LibTomCrypt</a></p></div>
 | |
| <div class="para"><p><a href="http://www.sics.se/~adam/uip/">uIP - TCP/IP Stack for Embedded Microcontrollers</a></p></div>
 | |
| <div class="para"><p><a href="http://www.sics.se/~adam/pt/">Protothreads</a></p></div>
 | |
| <div class="para"><p><a href="http://www.thefreecountry.com/">Tofrodos</a></p></div>
 | |
| <div class="para"><p><a href="http://www.gnu.org/software/make/">GNU Make</a></p></div>
 | |
| <div class="para"><p><a href="http://www.mingw.org/">MinGW</a></p></div>
 | |
| <div class="para"><p><a href="http://www.cygwin.com/">Cygwin</a></p></div>
 | |
| <div class="para"><p><a href="http://savannah.nongnu.org/projects/freeice">Free ICE</a></p></div>
 | |
| <div class="para"><p><a href="http://pymite.python-hosting.com/">Pymite</a></p></div>
 | |
| <div class="para"><p><a href="http://sourceforge.net/projects/nanovm">NanoVM</a></p></div>
 | |
| <div class="para"><p><a href="http://www.catb.org/~esr/jargon/">Jargon</a></p></div>
 | |
| </div>
 | |
| <div id="footer">
 | |
| <div id="footer-text">
 | |
| Last updated 2008-12-04 12:43:29 MDT
 | |
| </div>
 | |
| </div>
 | |
| </body>
 | |
| </html>
 |