<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- tidy -im -wrap 110 README.html -->

<html>
<head>
  <meta name="generator" content="HTML Tidy for Linux/x86 (vers 6 November 2007), see www.w3.org">
  <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
  <style type="text/css" media="all">
5px;border-collapse:collapse;}td.confluenceTd{border:1px solid
  4px;background:#f0f0f0;text-align:center;}.wiki-textarea,.wiki-textfield{width:100%;}.preformatted{border:1px
  dashed;font-size:11px;font-family:Courier;margin:10px;line-height:13px;}.preformattedHeader{background-color:#f0f0f0;border-bottom:1px
  dashed;padding:3px;text-align:center;}.preformattedContent{background-color:#f0f0f0;padding:3px;overflow:auto;}.panel{border:1px
  dashed;margin:14px;margin-top:0;}.panelHeader{background-color:#f0f0f0;border-bottom:1pxm
  dashed;padding:3px;text-align:center;}.panelContent{background-color:#f0f0f0;padding:12px;}.code{border:1px
  dashed;font-size:11px;font-family:Courier;margin:14px;line-height:13px;}.codeHeader{background-color:#f0f0f0;border-bottom:1px
  dashed;padding:3px;text-align:center;}.codeContent{text-align:left;background-color:#f0f0f0;padding:6px;overflow:auto;}.code-keyword{color:#000091;background-color:inherit;}.code-object{color:#910091;background-color:inherit;}.code-quote{color:#009100;background-color:inherit;}.code-comment{color:#808080;background-color:inherit;}.code-xml
  .code-keyword{color:inherit;font-weight:bold;}.code-tag{color:#000091;background-color:inherit;}.linkerror{background-color:#fcc;}ul#squaretab{margin-left:0;padding-left:0;white-space:nowrap;font:bold
  8px Verdana,sans-serif;}#squaretab
  li{display:inline;list-style-type:none;}#squaretab a{padding:2px
  6px;border:1px solid #999999;}#squaretab a:link,#squaretab
  a:visited{color:#fff;background-color:#999999;text-decoration:none;}#squaretab
  a:hover{color:#ffffff;background-color:#999999;border-color:#999999;text-decoration:none;}#squaretab
  li a#current{background:white;color:black;}.panel{border:1px
  dashed;margin:10px;margin-top:0;}.panelHeader{background-color:#f0f0f0;border-bottom:1px
  dashed;padding:3px;text-align:center;}.panelContent{background-color:#f0f0f0;padding:5px;}.minitab{padding:3px
  0 3px
  8px;margin-left:0;margin-top:1px;margin-bottom:0;border-bottom:1px
  solid #bbb;font:bold 9px
  Verdana,sans-serif;text-decoration:none;float:none;}
  </style>
  <style type="text/css">
span {
        font-family: Arial;
        color: #000000;
        background: #FFFFFF;
        font-size: 10pt;
  }
  pre {
        font-family: monospace;
        color: #000000;
        background: #FFFFFF;
        font-size: 10pt;
  }
  p.Heading0, li.Heading0, div.Heading0, span.Heading0 {
        font-size:14.0pt;
        font-family:Arial;
        font-weight:bold;
  }
  h1 {
        page-break-after:avoid;
        font-size:14.0pt;
        font-family:Arial;
  }
  h2 {
        page-break-after:avoid;
        font-size:12.0pt;
        font-family:Arial;
  }
  DL, DT, OL, UL, LI, DD {
    list-style-position: outside;
  }
  pre {
    font-family: monospace;
    font-size: 10pt;
  }
  table {
    font-size: 10pt;
  }
  </style>
  <style type="text/css">
ol.c10 {list-style-type: decimal;}
  dl.c9 {font-weight: normal; font-size: 10pt;}
  li.c8 {font-weight: bold;}
  span.c7 {font-style: italic;}
  span.c6 {font-weight: bold;}
  ul.c5 {font-weight: normal; font-size: 10pt; text-align: justify;}
  span.c4 {color: green; font-size: 120%}
  ol.c3 {font-weight: normal; font-size: 10pt; text-align: justify;}
  span.c2 {color: green}
  p.c1 {font-weight: normal; font-size: 10pt; text-align: justify;}
  </style>

  <title>MPLAB C Compiler for PIC32 MCUs v1.05, Release Notes</title>
</head>

<body lang="EN-US">
  <h1 class="formtitle">Release Notes for MPLAB<sup>&reg;</sup> C Compiler for PIC32 MCUs</h1>

  <h2>v1.05<br>
  March 2009</h2>

  <h1 class="formtitle">Table of Contents</h1>

  <ol>
    <li><a href="#Overview">Overview</a></li>

    <li><a href="#GPL">GNU General Public License</a></li>

    <li><a href="#Devices">Devices Supported</a></li>

    <li><a href="#Install">Installation</a></li>

    <li><a href="#Document">Compiler Documentation</a></li>

    <li><a href="#WhatsNew">What's New</a></li>

    <li><a href="#Migration">Migration Issues</a></li>

    <li><a href="#DocUpdate">Documentation Updates</a></li>

    <li><a href="#Fixes">Fixed Issues</a></li>

    <li><a href="#Limits">Limitations</a></li>

    <li><a href="#FeatureLimited">Feature-Limited Versions</a></li>

    <li><a href="#Support">Customer Support</a></li>
  </ol>
  <hr>
  <br>

  <ol class="c10">
    <li class="Heading0">
      <h1><a name="Overview" id="Overview">Overview</a></h1>

      <p class="c1">The 32-Bit language tools consist of a compiler (pic32-gcc.exe), an assembler
      (pic32-as.exe), a linker (pic32-ld.exe), and an archiver/ librarian (pic32-ar.exe). Additional tools
      distributed with this release include a binary to Intel[intl] Hex converter (pic32-bin2hex.exe) and
      miscellaneous binary utilities (pic32-strip.exe, pic32-strings.exe, pic32-readelf.exe, etc). In
      addition, the compiler utilizes a license manager (pic32-lm.exe) as part of the <a href=
      "#FeatureLimited">time-limited evaluation version</a>.</p>

      <p class="c1">As described in the user's guides, all of the language tools are sensitive to case on the
      command line, including the case of file names. In particular, the C compiler shell (pic32-gcc)
      requires that C source files be named on the command-line with a lower-case .c extension. If an
      upper-case .C filename extension is used, the compiler assumes that the file is a C++ file, which is
      not supported. Similarly, the compiler shell passes a file with an upper-case .S filename extension
      through the C preprocessor before passing it to the assembler, but it passes a file with a lower-case
      .s extension directly to the assembler.</p>
    </li>

    <li class="Heading0">
      <h1><a name="GPL" id="GPL">GNU General Public License</a></h1>

      <p class="c1">The <i>MPLAB<sup>&reg;</sup> C Compiler for PIC32 MCUs</i> tools are written and
      distributed under the GNU General Public License (GPL) which means that its source code is freely
      distributed and available to the public.</p>

      <p class="c1">The source for the tools under the GNU GPL may be downloaded separately from the
      Microchip WWW web page. You may read the GNU GPL in the file named COPYING located the docs
      subdirectory of your install directory. A general discussion of principles underlying the GPL may be
      found at <a href="http://www.gnu.org/copyleft">www.gnu.org/copyleft</a>.</p>

      <p class="c1">Support code provided for the header files, linker scripts, and runtime libraries are
      proprietary code and not covered under the GPL. See the full <i>MPLAB C Compiler for PIC32 MCUs</i>
      License Agreement for details.</p>
    </li>

    <li class="Heading0">
      <h1><a name="Devices" id="Devices">Devices Supported</a></h1>

      <p class="c1">The following PIC32MX devices are supported:<br>
      <span class="c2"><!-- New items in green. -->(No new devices for v1.04 or v1.05)</span></p>

      <table align="center" border="2" cellpadding="3" cellspacing="3" summary="Supported Devices">
        <tbody>
          <tr>
            <th>Part Number</th>

            <th>Part Number</th>
          </tr>

          <tr>
            <td align="center">PIC32MX320F032H</td>

            <td align="center">PIC32MX320F064H</td>
          </tr>

          <tr>
            <td align="center">PIC32MX320F128H</td>

            <td align="center">PIC32MX320F128L</td>
          </tr>

          <tr>
            <td align="center">PIC32MX340F128H</td>

            <td align="center">PIC32MX340F128L</td>
          </tr>

          <tr>
            <td align="center">PIC32MX340F256H</td>

            <td align="center">PIC32MX340F512H</td>
          </tr>

          <tr>
            <td align="center">PIC32MX360F256L</td>

            <td align="center">PIC32MX360F512L</td>
          </tr>

          <tr>
            <td align="center">PIC32MX420F032H</td>

            <td align="center">PIC32MX440F128H</td>
          </tr>

          <tr>
            <td align="center">PIC32MX440F128L</td>

            <td align="center">PIC32MX440F256H</td>
          </tr>

          <tr>
            <td align="center">PIC32MX440F512H</td>

            <td align="center">PIC32MX460F256L</td>
          </tr>

          <tr>
            <td align="center">PIC32MX460F512L</td>

            <td align="center">PIC32MXGENERIC</td>
          </tr>
        </tbody>
      </table>

      <p class="c1">The PIC32MXGENERIC device is, as its name implies, a non-specific target that can be used
      to represent a generic core device.</p>
    </li>

    <li class="Heading0">
      <h1><a name="Install" id="Install">Installation</a></h1>

      <p class="c1">If using MPLAB IDE, be sure to install MPLAB IDE v8.10 or later before installing these
      tools.</p>

      <p class="c1">To install the <i>MPLAB C Compiler for PIC32 MCUs</i> tools, perform the following
      steps:</p>

      <ol class="c3">
        <li>Locate the setup program on the 'MPLAB C Compiler for PIC32 MCUs' CD ROM.</li>

        <li>Run the setup program.</li>

        <li>Follow the directions on the screen. To install the evaluation version, leave the
        license-key field blank when prompted. To install the full version, enter your full license key.</li>

        <li>If the installation program indicates that it is necessary, reboot your computer to complete the
        installation.</li>

        <li>When the installation is complete, verify that the executable directory has been correctly added
        to your PATH (i.e., if you chose to install the tools in the default directory, c:\Program
        Files\Microchip\MPLAB C32, then ensure that c:\Program Files\Microchip\MPLAB C32\bin has been added
        to your PATH. On some systems, the default path is c:\Program Files\Microchip\MPLAB C32 Suite.).

          <p>From a Windows command prompt (cmd.exe), type: c:\&gt;PATH</p>
        </li>
      </ol>
    </li>

    <li class="Heading0">
      <h1><a name="Document" id="Document">Compiler Documentation</a></h1>

      <p class="c1">The following documents pertain to the MPLAB C Compiler for PIC32 MCUs. They may be
      installed in the compiler's doc subdirectory, but you should check <a href=
      "http://www.microchip.com/c32">Microchip's website</a> for the latest revisions.</p>

      <ul class="c5">
        <li><cite>MPLAB<sup>&reg;</sup> C Compiler for PIC32 MCUs User's Guide</cite> (DS51686)</li>

        <li><cite>MPLAB<sup>&reg;</sup> 32-Bit Language Tools Libraries</cite> (DS51685)</li>

        <li>Microchip PIC32MX Peripheral Library - Compiled Help (chm)</li>

        <li>MPLAB<sup>&reg;</sup> Assembler/Linker for PIC32 MCUs - Compiled Help (chm)</li>
      </ul>

      <p class="c1">Additional documentation on the GNU Assembler and Linker is available on the <a href=
      "http://sourceware.org/binutils/docs-2.15/">GNU Binutils website</a>.</p>
    </li>

    <li class="Heading0">
      <h1><a name="WhatsNew" id="WhatsNew"></a>What's New</h1>

      <h2>New Features in v1.05</h2>

      <ul class="c5">
        <li><strong>Student Edition renamed Evaluation Version</strong> -- The student edition has been
        renamed the evaluation version. This release also introduces a new academic version. For more
        information on the feature-limited version, see <a href="#FeatureLimited">this section.</a></li>

        <li><strong>Improved 16- and 32-bit FFT functions in the DSP Library</strong> -- The FFT functions
        have been significantly improved and optimized for the PIC32 instruction set. See the 32-bit Language
        Tools Libraries document (DS51685) for more information. Please visit <a href=
        "http://www.microchip.com/c32">Microchip's website</a> for the revision C of this document
        (DS51685C).</li>

        <li><strong>Binary Constants</strong> -- A sequence of binary digits preceded by 0b or 0B (the
        numeral '0' followed by the letter 'b' or 'B') is taken to be a binary integer. The binary digits
        consist of the numerals '0' and '1'. Note that this binary-constant syntax may not be accepted by
        other C compilers.</li>

        <li>
          <strong>Linker Memory-Usage Report</strong> -- This optional, informational report allows you to
          easily determine the program- and data-memory usage of your application. It allows you to see how
          much space is used by the project being linked and how much space is available on the target
          device. The memory-usage report appears on stdout and in the optional map file.

          <ul>
            <li>Using this feature with <strong>MPLAB IDE 8.20 and earlier</strong> -- On the linker's tab of
            the project build options, select to <strong>Use Alternate Settings</strong>. Add the
            <strong><tt>--report-mem</tt></strong> option to the Alternate Settings field. The memory-usage
            report will appear in the output window after a project build. (This option will appear as a
            checkbox in later MPLAB IDE releases.)</li>

            <li>Using this feature on the <strong>command prompt</strong> -- Add the <tt>--report-mem</tt>
            option to the linker's command line. If you are calling the linker via the compilation driver,
            use the driver's <tt>-Wl</tt> option to pass the <tt>--report-mem</tt> option to the linker. The
            memory-usage report will appear on stdout.</li>
          </ul>
        </li>

        <li>
          <strong>Improved malloc implementation</strong> -- This release contains a new malloc/free/realloc
          implementation based on the implementation written by Doug Lea and released to the public domain.

          <ul>
            <li>This is not the fastest, most space-conserving, most portable, or most tunable malloc ever
            written. However it is among the fastest while also being among the most space-conserving,
            portable and tunable. Consistent balance across these factors results in a good general-purpose
            allocator.</li>

            <li>For a high-level description, see <a href=
            "http://g.oswego.edu/dl/html/malloc.html">http://g.oswego.edu/dl/html/malloc.html</a></li>

            <li>This implementation is also provided with the <a href=
            "http://sourceware.org/newlib/">Newlib</a> C Library.</li>
          </ul>
        </li>

        <li><strong>Instruction Macros</strong> -- The p32xxxx.h include file now contains a Nop() macro that
        issues a superscalar SSNOP instruction.</li>

        <li><strong><tt>gettimeofday()</tt> weak stub</strong> -- The time.h <tt>clock()</tt> and
        <tt>time()</tt> functions require a user-provided <tt>gettimeofday()</tt> helper function. The
        compiler's library now provides a weak stub implementation that allows the project link to complete
        without error, but you should provide your own implementation appropriate for your application.</li>

        <li><strong>Microchip DSP Compatibility Wrapper functions</strong> -- This release provides new DSP
        wrapper functions intended to ease the migration from the Microchip DSP library for dsPIC DSCs to the
        general DSP library for PIC32 MCUs. See the 32-Bit Language Tools Libraries (DS51685C) document for
        more information on these new wrapper functions.</li>

        <li><strong>Updated peripheral-library documentation</strong> -- The 32-bit peripheral library
        document is now distributed as a compiled help file (*.chm) rather than a PDF file.</li>

        <li><strong>Support for PWP configuration bits</strong> -- The config pragma now supports enabling
        the Program Write Protect bits. See the <em>PIC32MX Config Settings</em> help file for information on
        the setting name and available values for each device.</li>
      </ul>
    </li>

    <li style="list-style: none; display: inline">
      <h2>New Features in v1.04</h2>

      <ul class="c5">
        <li>
          <strong>General DSP Library</strong> -- The DSP Library supports a variety of signal processing
          functions that have applicability in speech compression, echo cancellation, noise cancellation,
          channel equalization, audio decoding, and many other DSP and media applications. The library is
          highly optimized for the PIC32 MCU instruction set.

          <ul>
            <li>The DSP Library expects Q-type fixed-point arguments and produces Q-type results. The MPLAB C
            Compiler for PIC32 MCUs does not currently support converting float or double types to
            Q-types.</li>

            <li>See the 32-Bit Language Tools Libraries (DS51685) for documentation on the DSP Library
            functions.</li>

            <li>In the near future, a "dsPIC DSC DSP Algorithm Library" compatibility layer will be
            available. This compatibility layer makes the PIC32 DSP Library backwards compatible with the
            existing dsPIC DSC DSP Algorithm Library.</li>
          </ul>
        </li>

        <li>
          <strong>Vector attribute accepts parenthesized list of vector numbers</strong> -- The interrupt
          vector attribute now accepts a parenthesized list of one or more interrupt vector numbers. This
          means that you can now more easily generate multiple dispatch functions that target a single
          interrupt service routine as shown in the example below.

          <div class="code panel" style="border-width: 1px; margin: 10px;">
            <div class="codeContent panelContent">
              <tt>#include &lt;p32xxxx.h&gt;<br>
              #include &lt;sys/attribs.h&gt;<br>
              void __ISR((_TIMER_1_VECTOR,_TIMER_2_VECTOR,_TIMER_3_VECTOR),ipl6) TimerISR(void);</tt>
            </div>
          </div>
        </li>

        <li><strong>Interrupt service routines forced to nomips16</strong> -- The compiler will now force
        functions marked with the interrupt attribute to be nomips16. The compiler will emit a warning if it
        overrides the mips16 attribute or command-line default. Previous compiler releases stopped
        compilation with an error and required users to manually add the nomips16 attribute. Note that you
        should use the __ISR macro from the sys/attribs.h header rather than manually specify the interrupt
        attribute.</li>

        <li><strong>Trigonometric function refactorization</strong> -- A few trigonometric functions have
        been refactored for a smaller code-size footprint.</li>
      </ul>

      <h2>New Features in v1.03</h2>

      <ul class="c5">
        <li><strong>Optimized math library</strong> -- The floating-point math library provided with the
        compiler has been significantly optimized to take full advantage of the PIC32MCU instruction set. The
        improved library provides the greatest benefit for the more complex operations, offering a greater
        than 5x performance improvement over the 1.02 library for many operations and an even more
        significant improvement for some operations. In addition, single-precision math library functions are
        now available, giving users a choice between double- and single-precision operations. See math.h for
        more information.</li>
      </ul>

      <ul class="c5">
        <li><strong>Time-Limited Evaluation Version</strong> -- The new evaluation version provides
        <strong>full functionality for 60 days</strong>. After the evaluation version has expired, the
        compiler becomes feature limited. See <a href="#TimeDemo">this section</a> for further details.</li>
      </ul>

      <ul class="c5">
        <li><strong><tt>__C32_VERSION__</tt> predefined macro</strong> -- The C compiler defines the constant
        <tt>__C32_VERSION__</tt>, giving a numeric value to the version identifier. This macro can be used to
        construct applications that take advantage of new compiler features while still remaining backward
        compatible with older versions. The value is based upon the major and minor version numbers of the
        current release. For example, release version 1.03 will have a <tt>__C32_VERSION__</tt> definition of
        103. This macro can be used, in conjunction with standard preprocessor comparison statements, to
        conditionally include/exclude various code constructs.</li>
      </ul>

      <ul class="c5">
        <li>
          <strong><tt>__ISR_SINGLE__</tt> and <tt>__ISR_SINGLE_AT_VECTOR__</tt> convenience macros</strong>
          -- The sys/attribs.h header file now provides two new macros intended to simplify the use of the
          single-vector interrupt mechanism. See the sys/attribs.h header file for more information.

          <ul>
            <li>The <tt>__ISR_SINGLE__</tt> macro specifies a function as an interrupt-service routine in
            single-vector mode. This will place a jump at the single-vector location to the interrupt
            handler.</li>

            <li>The <tt>__ISR_SINGLE_AT_VECTOR__</tt> macro places the entire single-vector interrupt handler
            at the vector 0 location. The user is responsible for ensuring that the vector spacing is set to
            accommodate the size of the handler.</li>
          </ul>
        </li>
      </ul>
    </li>

    <li class="Heading0">
      <h1><a name="Migration" id="Migration"></a>Migration Issues</h1>

      <p class="c1">The following changes may affect migration from older versions of the compiler.</p>

      <h2>Migrating to Version v1.05</h2>

      <ul class="c5">
        <li class="c8">DSP Library

          <ul class="c5">
            <li><strong>FFT setup functions</strong> -- The FFT setup functions, mips_fft16_setup() and
            mips_fft32_setup(), are now deprecated. The FFT functions now load precalculated coefficients so
            these setup functions are no longer required. Please visit <a href=
            "http://www.microchip.com/c32">Microchip's website</a> for the revision C of the 32-bit Libraries
            document (DS51685C).</li>
          </ul>
        </li>
      </ul>

      <h2>Migrating to Version v1.04</h2>

      <ul class="c5">
        <li class="c8">Device-support files

          <ul class="c5">
            <li><strong>Device specific IRQ macro definitions</strong> -- The IRQ macro definitions, such as
            <tt>_CORE_TIMER_IRQ</tt>, have moved from the ppic32mx.h header file to the device-specific
            header file (e.g. proc/p32mx460f512l.h). This change should not affect most applications because
            they should include the generic p32xxxx.h file.</li>
          </ul>
        </li>
      </ul>

      <h2>Migrating to Version v1.03</h2>

      <ul class="c5">
        <li class="c8">Peripheral Library

          <ul class="c5">
            <li>Modified SYSTEMConfigXXX functions to use revised flash speed of 30 MHz. If you are currently
            using a SYSTEMConfigXXX function, your application will automatically use the new flash-speed
            specification.</li>
          </ul>
        </li>

        <li class="c8">Examples

          <ul class="c5">
            <li>Modified all plib_examples to use SYSTEMConfig() function. This function allows users to
            selectively configure certain parameters only.</li>
          </ul>
        </li>
      </ul>

      <h2>Migrating to Version v1.02</h2>

      <ul class="c5">
        <li>
          <span class="c6">Processor Header files</span>

          <ul>
            <li>Removed Extended Mode (XM bit) in DMA controller</li>
          </ul>
        </li>

        <li class="c8">Peripheral Library - See the <span class="c7">Microchip PIC32MX Peripheral
        Library</span> compiled help (*.chm) for details<br>

          <ul class="c5">
            <li>DMA Extended mode is removed. The maximum transfer length is now 256 bytes, even for memory
            copy and CRC functions.</li>

            <li>Symbols DMA_OPEN_NORM and DMA_OPEN_EXT used in the DmaChnOpen() call were removed. A new
            symbol, DMA_OPEN_DEFAULT was added.<br></li>

            <li>A new function, DmaGetMaxTcferSize() was added, to return the maximum supported size of a
            transfer, variant dependent. Right now, only 256 bytes transfer size supported.<br></li>

            <li>DmaChnSetExtTxfer() was removed, no longer relevant.<br></li>

            <li>DMA_CTL_EXT_EN was removed from the low level access routines</li>

            <li>SYSTEMConfig() function was added to enable user-specified configuration for a given system
            frequency.</li>
          </ul>
        </li>
      </ul>
    </li>

    <li class="Heading0">
      <h1><a name="DocUpdate" id="DocUpdate"></a>Documentation Updates</h1>

      <h2>Compiler documentation updates</h2>

      <p class="c1">This section describes pending updates to the <em>MPLAB C Compiler for PIC32</em>
      documentation. These changes will be incorporated into the next full revision of the documents.</p>

      <ul class="c5">
        <li><strong>Binary Constants</strong> -- A sequence of binary digits preceded by <tt>0b</tt> or
        <tt>0B</tt> (the numeral '0' followed by the letter 'b' or 'B') is taken to be a binary integer. The
        binary digits consist of the numerals '0' and '1'. For example, the (decimal) number 255 can be
        written as <tt>0b11111111</tt>. Like other integer constants, a binary constant may be suffixed by
        the letter 'u' or 'U', to specify that it is unsigned. A binary constant may also be suffixed by the
        letter 'l' or 'L', to specify that it is long. Similarly, the suffix 'll' or 'LL' denotes a long long
        binary constant. Note that this binary-constant syntax may not be accepted by other C compilers.</li>

        <li><strong><tt>__VERSION__</tt> predefined macro</strong> -- The <tt>__VERSION__</tt> macro expands
        to a string constant describing the compiler in use. Do not rely on its contents having any
        particular form, but it should contain at least the release number. Use the <tt>__C32_VERSION__</tt>
        macro for a numeric version number.</li>

        <li><strong>Interrupt-vector macros</strong> -- Each processor-support header file (e.g.
        \pic32mx\include\proc\p32mx360f512l.h) provides a macro for each interrupt-vector number. When used
        in conjunction with the <tt>__ISR()</tt> macro provided by the sys\attribs.h header file, these
        macros help make an interrupt service routine easier to write and maintain. Example: <tt>void __ISR
        (<em>_TIMER_1_VECTOR</em>, ipl7) Timer1Handler (void);</tt></li>
      </ul>

      <h2>Linker documentation updates</h2>

      <p class="c1">This section describes important MPLAB Linker for PIC32 information that will be included
      in future linker documentation</p>

      <ul class="c5">
        <li>
          <strong>Relocating the Interrupt Vector Table</strong> -- In some cases the user may want to move
          the Interrupt Vector Table (IVT) from the default location in the Boot ROM (kseg1) to the
          Application Flash (kseg0). For example, if more space is needed in the Boot ROM. To relocate the
          IVT a minimum of two lines must be changes in the part's <strong>procdefs.ld</strong>. First, the
          location of <tt>ebase</tt> must be changed to point to the area in Application Flash. Here are the
          lines that specify the default <tt>ebase</tt> from the <strong>procdefs.ld</strong> for the
          32MX360F512L

          <div class="code panel" style="border-width: 1px; margin: 5px;">
            <div class="codeContent panelContent">
              <pre class="codeContent">
PROVIDE(_vector_spacing = 0x00000001);
_ebase_address = 0x9FC01000;
</pre>
            </div>
          </div>To place the IVT at the highest possible address set

          <div class="code panel" style="border-width: 1px; margin: 5px;">
            <div class="codeContent panelContent">
              <pre class="codeContent">
_ebase_address = (0x9D080000-64*(_vector_spacing &lt;&lt; 5)) &amp; 0xFFFFF000;
</pre>
            </div>
          </div>where 0x9D080000 is the highest address in the 32MX360F512L part, 64 is the number of
          interrupt vectors and <tt>(_vector_spacing &lt;&lt; 5)</tt> converts the _vector_spacing value to
          the actual number of bytes allocated on the PIC32 MCU. The bit mask at the end, 0xFFFFF000, aligns
          <tt>_ebase_address</tt> on a 4K address boundary, as required. We can simplify the expression to
          <tt>_ebase_address = (0x9D080000-(_vector_spacing &lt;&lt; 11)) &amp; 0xFFFFF000;</tt> For the
          32MX360F512L this gives

          <div class="code panel" style="border-width: 1px; margin: 5px;">
            <div class="codeContent panelContent">
              <pre class="codeContent">
_ebase_address = 0x9D07F000;
</pre>
            </div>
          </div>The second line to change in the <strong>procdefs.ld</strong> specifies the memory region for
          the exception vectors. The default lines from <strong>procdefs.ld</strong> specifying the exception
          memory region are

          <div class="code panel" style="border-width: 1px; margin: 5px;">
            <div class="codeContent panelContent">
              <pre class="codeContent">
MEMORY
{
   kseg0_program_mem (rx) : ORIGIN = 0x9D000000, LENGTH = 0x80000
   kseg0_boot_mem         : ORIGIN = 0x9FC00490, LENGTH = 0x970
   exception_mem          : ORIGIN = 0x9FC01000, LENGTH = 0x1000
</pre>
            </div>
          </div>The value for the ORIGIN of the exception memory must be the same as <tt>ebase</tt>, so the
          line gets changed to

          <div class="code panel" style="border-width: 1px; margin: 5px;">
            <div class="codeContent panelContent">
              <pre class="codeContent">
exception_mem : ORIGIN = 0x9D07F000, LENGTH = 0x1000
</pre>
            </div>
          </div>The linker syntax requires that the value of ORIGIN be a literal constant, so the appealing
          ORIGIN = _ebase_address produces a syntax error. In short, to relocate the IVT from Boot ROM to App
          Flash memory, the user must first set <tt>_ebase_address</tt> to the properly aligned address, and
          then set the ORIGIN of the exception_mem region to the literal value of <tt>_ebase_address</tt>.
        </li>

        <li>
          <strong>Placing Data at a fixed location</strong> -- Users may want to place strings such as
          version numbers at a fixed location in memory. The following section summarises a way to accomplish
          this goal. First the user must declare a section to contain the constant data. For example:

          <div class="code panel" style="border-width: 1px; margin: 5px;">
            <div class="codeContent panelContent">
              <pre class="codeContent">
   const char __attribute__((section(".hellostring"))) absstring[] =
   "Hello, World!\n"; /* Place string in a user-named section. */
</pre>
            </div>
          </div>Once the section gets set up, the linker script must be customized in two ways. First create
          a new memory region to contain the new section:

          <div class="code panel" style="border-width: 1px; margin: 5px;">
            <div class="codeContent panelContent">
              <pre class="codeContent">
   MEMORY
   {
     kseg0_program_mem    (rx)  : ORIGIN = 0x9D000000, LENGTH = 0x80000-0x1000
  
   /* ... */
   /* Create the new region to be used */

     myabspmdata          (rx)  : ORIGIN = 0x9D07F000, LENGTH = 0x1000
   
     kseg0_boot_mem             : ORIGIN = 0x9FC00490, LENGTH = 0x970
     /* ... */
   }
</pre>
            </div>
          </div>Note that the length of the <tt>kseg0_program_mem</tt> gets <strong>decreased</strong> by the
          size of the new region. The linker requires that the regions do not overlap. Secondly, the
          <tt>SECTIONS</tt> must also be modifed to reflect the new section.

          <div class="code panel" style="border-width: 1px; margin: 5px;">
            <div class="codeContent panelContent">
              <pre class="codeContent">
   SECTIONS
   {
     /* Create an output section called .outputmyabspmdata containing
        the user-named section from the source code. Map the output
        section to the memory region created above.
      */

     .outputmyabspmdata : {
             KEEP(*(.hellostring))
     } &gt; myabspmdata
 
     .config_BFC02FF0 : {
       KEEP(*(.config_BFC02FF0))
     } &gt; config3
    
     /* ... */
   }
</pre>
            </div>
          </div>These changes to the source and the linker script allows the user to place data at a fixed
          location. Multiple pieces of data may be placed in other sections.
        </li>
      </ul>
    </li>

    <li class="Heading0">
      <h1><a name="Fixes" id="Fixes">Fixed Issues</a></h1>

      <p class="c1">The following issues have been resolved in this release</p>

      <h2>Fixed in v1.05</h2>

      <dl class="c9">
        <dt>C32-064:</dt>

        <dd>Code generated using -Os -mips16 and a very large number of common subexpressions now compiles
        correctly.</dd>

        <dt>C32-232:</dt>

        <dd>Interrupt context-saving code now preserves the assembler temporary ($at) register. While the
        compiler does not use this register for standard C code, the general DSP library or the optimized
        math library use this register.</dd>

        <dt>Peripheral Library:</dt>

        <dd>
          The peripheral-library source files listed below contain fixes and improvements. See the updated
          peripheral-library documentation for further details.

          <ul>
            <li>pic32mx/include/peripheral/int.h</li>

            <li>pic32mx/include/peripheral/incap.h</li>

            <li>pic32mx/include/peripheral/nvm.h</li>

            <li>pic32mx/include/peripheral/dma.h</li>

            <li>pic32mx/include/peripheral/ports.h</li>

            <li>pic32mx/include/peripheral/uart.h</li>

            <li>pic32mx/include/peripheral/i2c.h</li>

            <li>pic32mx/include/peripheral/outcompare.h</li>

            <li>pic32mx/include/peripheral/cmp.h</li>

            <li>pic32mx/include/peripheral/timer.h</li>

            <li>pic32mx/include/peripheral/reset.h</li>

            <li>pic32mx/include/peripheral/pcache.h</li>

            <li>pic32mx/include/peripheral/system.h</li>

            <li>pic32mx/include/peripheral/bmx.h</li>

            <li>pic32-libs/peripheral/nvm/source/nvm_operation_lib.c</li>

            <li>pic32-libs/peripheral/i2c/source/idle_i2c2_lib.c</li>
          </ul>
        </dd>

        <dt>C32-42:</dt>

        <dd>The compiler now emits a more useful diagnostic message when multiple -mprocessor options appear
        on the command line.</dd>
      </dl>

      <h2>Fixed in v1.04</h2>

      <dl class="c9">
        <dd>No significant fixed issues for this release</dd>
      </dl>

      <h2>Fixed in v1.03</h2>

      <dl class="c9">
        <dt>BIN32-30:</dt>

        <dd>Assertion statements in the linker scripts now correctly compare the size of an exception vector
        to the vector spacing.</dd>

        <dt>C32-179:</dt>

        <dd>The gmtime() library function now links without error. In previous releases, the linker would
        complain about an undefined reference to 'offtime_r'</dd>

        <dt>C32-172:</dt>

        <dd>The config pragma now defaults the DEVCFG0 MSb to zero.</dd>

        <dt>C32-171:</dt>

        <dd>The first call to getchar() now calls _mon_getc(). The previous implementation treated the
        initial STDIN character as an ungetc() pushed-back character.</dd>

        <dt>C32-164:</dt>

        <dd>The device-specific header files now use '__asm__' rather than 'asm' when mapping each SFR struct
        to it's symbol name. Previous versions of these files did not compile when building with the
        compiler's -ansi option.</dd>

        <dt>C32-147:</dt>

        <dd>The interrupt attribute now properly accepts an uppercase IPLx value. Earlier compiler versions
        could reject the uppercase IPLx with an internal error.</dd>
      </dl>

      <h2>Fixed in v1.02</h2>

      <dl class="c9">
        <dt>C32-119:</dt>

        <dd>Removed pipeline interlock in ISR handling</dd>

        <dt>C32-141:</dt>

        <dd>Large <tt>malloc()</tt> calls no longer generate a general exception vector instead of returning
        a NULL pointer.</dd>

        <dt>C32-144:</dt>

        <dd>Interrupt macro now sets <tt>nomips16</tt></dd>

        <dt>C32-145:</dt>

        <dd>Include C startup code source is now provided in the standard distribution</dd>

        <dt>C32-151:</dt>

        <dd>IPL7 prologue code now sets incorrect bits in status register</dd>
      </dl>
    </li>

    <li class="Heading0">
      <h1><a name="Limits" id="Limits">Limitations</a></h1>

      <p class="c1">The current limitations are as follows.</p>

      <h2>Compiler</h2>

      <dl class="c9">
        <dt>DAYHLD-10:</dt>

        <dd>For PIC32MX USB devices, such as the PIC32MX440F512H, the USB PLL Input (UPLLIDIV) config pragma
        setting has values DIV_10 and DIV_12 incorrectly named DIV_7 and DIV_8 respectively.</dd>
      </dl>

      <h2>Assembler</h2>

      <p class="c1">None reported.</p>
    </li>

    <li class="Heading0">
      <h1><a name="FeatureLimited" id="FeatureLimited">Feature-Limited Versions</a></h1>

      <h2>Time-Limited Evaluation Version</h2>

      <p class="c1"><strong>Feature Limitations</strong> - Microchip provides a <em>free</em> time-limited
      evaluation version of the <em>MPLAB C Compiler for PIC32 MCUs</em>. The evaluation version of the
      compiler provides <strong>full functionality for 60 days</strong>. After the evaluation period has
      expired, the compiler becomes feature limited, and optimization features associated with levels -O2,
      -O3, and -Os are disabled. In addition, MIPS16 code generation is disabled. The compiler continues to
      accept the -O1 and -O0 optimization levels indefinitely.</p>

      <p class="c1"><strong>Installing the evaluation version</strong> - To install the time-limited
      evaluation version of the compiler, run the evaluation version installer and follow the on-screen
      instructions. If the installer asks for a license key, leave the field blank and continue.</p>

      <p class="c1"><strong>Upgrading to a full version license</strong> - For applications requiring
      additional code efficiency, as well as full support via <a target="external" href=
      "http://support.microchip.com">http://support.microchip.com</a>, users are encouraged to upgrade to a
      full-version compiler license. For further information on upgrading to a full-version license (Part
      Number: SW006015), visit <a target="external" href=
      "http://microchipdirect.com/productsearch.aspx?Keywords=SW006015">http://www.microchipdirect.com</a> or
      contact your preferred Microchip distributor.</p>

      <p class="c1">Once you've obtained a full-version license key, run the Upgrader tool
      (pic32-upgrader\upgrader.exe) as a Windows administrator. After you enter your license key and press
      the Upgrade button, the license manager should then report the license upgrade status.</p>

      <h2>Academic Version</h2>

      <p class="c1"><strong>Feature Limitations</strong> - Microchip provides a <em>free</em> academic
      version of the <em>MPLAB C Compiler for PIC32 MCUs</em> intended for use in academic projects. This
      version of the compiler does not support optimization features associated with levels -O2, -O3, and
      -Os. In addition, this version does not support MIPS16 code generation.</p>

      <p class="c1"><strong>Upgrading to a full or evaluation version</strong> - To take advantage of
      the advanced optimization and MIPS16 code generation features, you can upgrade to a full or 60-day
      evaluation version. To upgrade to a full or 60-day evaluation version, uninstall the academic version
      using the standard Windows Add/Remove Programs feature. Next, install the full or evaluation version by
      running the appropriate installer and following the on-screen instructions.</p>
    </li>

    <li class="Heading0">
      <h1><a name="Support" id="Support">Customer Support</a></h1>

      <p class="c1">Microchip provides online support via our home page at:<br>
      <a target="external" href="http://www.microchip.com">http://www.microchip.com</a></p>

      <p class="c1">Technical support is available through the web site at:<br>
      <a target="external" href="http://support.microchip.com">http://support.microchip.com</a></p>

      <p class="c1">A forum for discussion of Microchip products and tools is available at:<br>
      <a target="external" href="http://forum.microchip.com">http://forum.microchip.com</a></p>

      <p class="c1">Microchip PIC32 documentation and product info is available at:<br>
      <a target="external" href="http://www.microchip.com/pic32">http://www.microchip.com/pic32</a></p>

      <p class="c1">MPLAB<sup>&reg;</sup> C Compiler for PIC32 MCUs updates and information are available
      at:<br>
      <a target="external" href="http://www.microchip.com/c32">http://www.microchip.com/c32</a></p>
    </li>
  </ol>
</body>
</html>
