Release Notes for 16-Bit Language Tools for MPLAB® IDE
v3.23b
15 April 2010

Table of Contents
  1. Overview
  2. GNU General Public License
  3. Devices Supported
  4. Installation and Upgrades
  5. 16-bit Language Tools Documentation
  6. What's New in this Release
  7. Migration Issues
  8. Documentation Updates
  9. Fixed Issues
  10. Limitations
  11. Environment Variables Modified
  12. Customer Support


  1. Overview

  2. The 16-bit language tools consist of a compiler (pic30-gcc.exe), an assembler (pic29-as.exe), a linker (pic30-ld.exe), and an archiver/ librarian (pic30-ar.exe). Additional tools distributed with this release include a binary to Intel Hex converter (pic30-bin2hex.exe) and a command-line simulator (sim30.exe).

    The 16-bit language tool official names are:

    • MPLAB Assembler for PIC24 MCUs and dsPIC DSCs
    • MPLAB Object Linker for PIC24 MCUs and dsPIC DSCs
    • MPLAB Object Archiver/Librarian for PIC24 MCUs and dsPIC DSCs

  3. GNU General Public License

  4. With the exceptions noted below, the 16-bit 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.

    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 top level of your install directory. A general discussion of principles underlying the GPL may be found at www.gnu.org/copyleft.

    Exceptions to the GNU GPL:

    • pic30-lm
    • pic30-pa
    • sim30

    Support code provided for the header files, linker scripts, and runtime libraries are also exceptions to the GPL, and therefore not covered under the GPL.

  5. Devices Supported

  6. Devices listed in bold are new for the current release.

    The following PIC24 F KA devices are supported:

    4K devices 8K devices 16K devices 32K devices
    PIC24F08KA101 PIC24F16KA101
    PIC24F08KA102 PIC24F16KA102
    PIC24F04KA200
    PIC24F04KA201
    PIC24F16KA301 PIC24F32KA301
    PIC24F16KA302 PIC24F32KA302
    PIC24F16KA304 PIC24F32KA304

    The following PIC24 LF KA devices are supported:

    16K devices 32K devices
    PIC24LF16KA301 PIC24LF32KA301
    PIC24LF16KA302 PIC24LF32KA302
    PIC24LF16KA304 PIC24LF32KA304

    The following PIC24 F GA devices are supported:

    16K devices 32K devices 48K devices 64K devices 96K devices 128K devices 192K devices 256K devices
    PIC24FJ16GA002 PIC24FJ32GA002 PIC24FJ48GA002 PIC24FJ64GA002
    PIC24FJ16GA004 PIC24FJ32GA004 PIC24FJ48GA004 PIC24FJ64GA004
    PIC24FJ64GA006 PIC24FJ96GA006 PIC24FJ128GA006
    PIC24FJ64GA008 PIC24FJ96GA008 PIC24FJ128GA008
    PIC24FJ64GA010 PIC24FJ96GA010 PIC24FJ128GA010
    PIC24FJ32GA102 PIC24FJ64GA102
    PIC24FJ32GA104 PIC24FJ64GA104
    PIC24FJ128GA106 PIC24FJ192GA106 PIC24FJ256GA106
    PIC24FJ128GA108 PIC24FJ192GA108 PIC24FJ256GA108
    PIC24FJ128GA110 PIC24FJ192GA110 PIC24FJ256GA110

    The following PIC24 F GB devices are supported:

    32K devices 64K devices 128K devices 192K devices 256K devices
    PIC24FJ32GB002 PIC24FJ64GB002
    PIC24FJ32GB004 PIC24FJ64GB004
    PIC24FJ64GB106 PIC24FJ128GB106 PIC24FJ192GB106 PIC24FJ256GB106
    PIC24FJ64GB108 PIC24FJ128GB108 PIC24FJ192GB108 PIC24FJ256GB108
    PIC24FJ64GB110 PIC24FJ128GB110 PIC24FJ192GB110 PIC24FJ256GB110
    PIC24FJ128GB206 PIC24FJ256GB206
    PIC24FJ128GB210 PIC24FJ256GB210

    The following PIC24 F DA devices are supported:

    128K devices 256K devices
    PIC24FJ128DA106 PIC24FJ256DA106
    PIC24FJ128DA110 PIC24FJ256DA110
    PIC24FJ128DA206 PIC24FJ256DA206
    PIC24FJ128DA210 PIC24FJ256DA210

    The following PIC24 H GP devices are supported:

    12K devices 16K devices 32K devices 64K devices 128K devices 256K devices
    PIC24HJ12GP201
    PIC24HJ12GP202 PIC24HJ32GP202 PIC24HJ64GP202 PIC24HJ128GP202
    PIC24HJ32GP204 PIC24HJ64GP204 PIC24HJ128GP204
    PIC24HJ64GP206[A] PIC24HJ128GP206[A] PIC24HJ256GP206[A]
    PIC24HJ64GP210[A] PIC24HJ128GP210[A] PIC24HJ256GP210[A]
    PIC24HJ32GP302
    PIC24HJ16GP304 PIC24HJ32GP304
    PIC24HJ128GP306[A]
    PIC24HJ128GP310[A]
    PIC24HJ64GP502 PIC24HJ128GP502
    PIC24HJ64GP504 PIC24HJ128GP504
    PIC24HJ64GP506[A] PIC24HJ128GP506[A]
    PIC24HJ64GP510[A] PIC24HJ128GP510[A]
    PIC24HJ256GP610[A]

    The following dsPIC30 devices are supported:

    30F10xx 30F20xx 30F30xx 30F40xx 30F50xx 30F60xx
    dsPIC30F1010 dsPIC30F2010 dsPIC30F3010 dsPIC30F6010[A]
    dsPIC30F2011 dsPIC30F3011 dsPIC30F4011 dsPIC30F5011 dsPIC30F6011[A]
    dsPIC30F2012 dsPIC30F3012 dsPIC30F4012 dsPIC30F6012[A]
    dsPIC30F3013 dsPIC30F4013 dsPIC30F5013 dsPIC30F6013[A]
    dsPIC30F3014 dsPIC30F6014[A]
    dsPIC30F5015 dsPIC30F6015
    dsPIC30F5016
    dsPIC30F2020
    dsPIC30F2023

    The following dsPIC33F GP devices are supported:

    12K devices 16K devices 32K devices 64K devices 128K devices 256K devices
    dsPIC33FJ12GP201
    dsPIC33FJ12GP202 dsPIC33FJ32GP202 dsPIC33FJ64GP202 dsPIC33FJ128GP202
    dsPIC33FJ32GP204 dsPIC33FJ64GP204 dsPIC33FJ128GP204
    dsPIC33FJ64GP206[A] dsPIC33FJ128GP206[A]
    dsPIC33FJ32GP302
    dsPIC33FJ16GP304 dsPIC33FJ32GP304
    dsPIC33FJ64GP306[A] dsPIC33FJ128GP306[A]
    dsPIC33FJ64GP310[A] dsPIC33FJ128GP310[A]
    dsPIC33FJ256GP506[A]
    dsPIC33FJ256GP510[A]
    dsPIC33FJ64GP706[A] dsPIC33FJ128GP706[A]
    dsPIC33FJ64GP708[A] dsPIC33FJ128GP708[A]
    dsPIC33FJ64GP710[A] dsPIC33FJ128GP710[A] dsPIC33FJ256GP710[A]
    dsPIC33FJ64GP802 dsPIC33FJ128GP802
    dsPIC33FJ64GP804 dsPIC33FJ128GP804

    The following dsPIC33F GS devices are supported:

    6K devices 16K devices 32K devices 64K devices
    dsPIC33FJ06GS101
    dsPIC33FJ06GS102
    dsPIC33FJ06GS202
    dsPIC33FJ16GS402
    dsPIC33FJ16GS404
    dsPIC33FJ32GS406 dsPIC33FJ64GS406
    dsPIC33FJ16GS502
    dsPIC33FJ16GS504
    dsPIC33FJ32GS606 dsPIC33FJ64GS606
    dsPIC33FJ32GS608 dsPIC33FJ64GS608
    dsPIC33FJ32GS610 dsPIC33FJ64GS610

    The following dsPIC33F MC devices are supported:

    12K devices 16K devices 32K devices 64K devices 128K devices 256K devices
    dsPIC33FJ12MC201
    dsPIC33FJ12MC202 dsPIC33FJ32MC202 dsPIC33FJ64MC202 dsPIC33FJ128MC202
    dsPIC33FJ32MC204 dsPIC33FJ64MC204 dsPIC33FJ128MC204
    dsPIC33FJ32MC302
    dsPIC33FJ16MC304 dsPIC33FJ32MC304
    dsPIC33FJ64MC506[A] dsPIC33FJ128MC506[A]
    dsPIC33FJ64MC508[A]
    dsPIC33FJ64MC510[A] dsPIC33FJ128MC510[A] dsPIC33FJ256MC510[A]
    dsPIC33FJ64MC706[A] dsPIC33FJ128MC706[A]
    dsPIC33FJ128MC708[A]
    dsPIC33FJ64MC710[A] dsPIC33FJ128MC710[A] dsPIC33FJ256MC710[A]
    dsPIC33FJ64MC802 dsPIC33FJ128MC802
    dsPIC33FJ64MC804 dsPIC33FJ128MC804

    The following 'virtual' devices are supported:

    • generic-16bit - this device can be used to represent a generic core device (no peripherals of any kind)
  7. Installation and Upgrades

  8. The 16-bit language tools are installed with the MPLAB IDE installer.

  9. 16-bit Language Tools Documentation

  10. The following documents pertain to the 16-bit C compiler, these may be installed as part of the full product or downloaded from Microchip's Website:

    • MPLAB Assembler, Linker and Utilities for PIC24 MCUs and dsPIC DSCs User's Guide (DS51317)

    We refer to these documents throughout this README in somewhat familiar terms.

    Updates to these manuals, that have not made it into (virtual) print, can be found later in this README.

    In addition to these manuals, a set of HTML documentation for peripheral and DSP libraries is also included. This documentation covers all supported devices, even if only a subset product is installed.

  11. What's New in this Release.

  12. v3.23b

    v3.23b is a part support fix release.

    v3.23

    v3.23 is a bug fix release.

    v3.22

    v3.22 is released in this form to keep in sync with the full language suite release.

    v3.21

    v3.21 is released in this form to keep in sync with the full language suite release.

    v3.20

    Assembler

    • New section attributes for creating heap or stack allocations in source code. For example:

        .section mystack,stack
        .space 512
      
        .section myheap,heap
        .space 256
      

      The stack attribute defines a section type, and is compatible with attribute modifiers address() and align().

      The heap attribute defines a section type, and is compatible with attribute modifiers address(), xmemory, ymemory, and align().

    • New section attribute eds for allocating memory in extended data space on some future devices. The eds attribute modifies sections of type bss, data, and persist.

    • New section attribute page to indicate that a section must not cross a natural page boundary. It ensures that a single setting of the page register is sufficient to access the entire section. The page attribute modifies sections of type bss, data, persist, code, psv, and eedata. In the case of psv, the page attribute is redundant, since by definition sections of type psv avoid page boundaries.

    • New operator edspage() can be applied to symbols in data memory or program memory. It returns the page value that can be used to make the object visible in the extended data space window. edspage() always returns a 10-bit result.

    • New operator edsoffset() can be applied to symbols in data memory or program memory. It returns a 16-bit offset that can be used in combination with an object's page value. For objects located in the first 32K of data memory, edsoffset() returns the object's true address. For all other objects, it returns an address in the PSV or extended data space window.

    • Feature preprocessor definitions which can be used to identify special properties of the different 16-bit devices. Definitions such as __HAS_DSP can be tested by assembler preprocessor directives. A complete list of definitions may be found in chapter 5.9, "Predefined Symbols", in the Assembler manual.

    Linker

    • The linker allocates variables in space(eds) on any page where memory is available. However, the linker will use extended RAM first, in order to preserve memory for the stack.

    • New linker script commands specify startup files. On some future devices PSVPAG is no longer used to access constants stored in program memory. On such devices the standard startup files can not be used. In order to support multiple startup files, new commands specify files appropriate for the target device. For example:

        CRT0_STARTUP(crt0_standard.o)
        CRT1_STARTUP(crt1_standard.o)
      

      These commands replace the EXTERN() commands which previously appeared near the top of linker scripts. See Migration Issues for more information.

    • Linker scripts are now pre-processed using the standard C pre-processor. Macros can be defined in the Build Options dialog of MPLAB IDE.

    • To accomodate future devices with extended data memory, the data initialization template has been modified to encode page numbers. For more information, see chapter 10.8, "Initialized Data", in the Linker manual.

    • Object files now contain signatures for the purpose of matching objects created with different compiler options. In the current release, objects loaded from libraries are selected to ensure consistent setting of the -mlarge-arrays option. Two new linker options have been added to control this feature:

        --select-objects     Select library objects based on options (default)
        --no-select-objects  Don't select library objects based on options
      

    v3.12

    Linker

    • The memory usage report (which appears in the map file as well as console output) has changed in two ways. First, sections marked noload will now appear in the report, and will count towards the total memory used. In the unusual case where two noload sections have been declared at the same address, the total memory value will be distorted.

      Second, the Program Memory report will only show sections actually defined in memory region "program". Previously, the reset vector and interrupt vector tables were included in this section of the report. However, these sections are defined in separate memory regions, and their appearance in the report can be confusing since these sections are not really part of the application code, which is otherwise variable in size.

      To clarify the second change, headings in the usage report now include the origin and length as defined in the linker script. For example:

        Program Memory  [Origin = 0x100, Length = 0x3ff00] 
      
        section                    address   length (PC units)   length (bytes) (dec) 
        -------                    -------   -----------------   -------------------- 
        .text                        0x100               0x56e           0x825  (2085) 
        .const                       0x66e                 0x6             0x9  (9) 
        .dinit                       0x674                0x82            0xc3  (195) 
        .text                        0x6f6                 0xa             0xf  (15) 
        .isr                         0x700                 0x2             0x3  (3) 
      
                             Total program memory used (bytes):          0x903  (2307) <1% 
      

    Disassembler

    • The disassembly listing generated by pic30-objdump has been improved. Instead of representing the target address of branch and DO instructions as a PC-relative offset (using a "dot expression"), the absolute target address will be displayed. If a label at the target address can be identified, it will be displayed also. For example, a previous listing:

        f8 ff 3a        bra       NZ, . + 0xFFFFFFF2
        b8 ff 07        rcall     . + 0xFFFFFF72
      

      is now displayed as:

        f8 ff 3a        bra       NZ, 0x4F4 <.L26>
        b8 ff 07        rcall     0x46C <_fclose>
      

    v3.11

    The default stack guard band has been increased from 8 to 16 bytes, to adequately handle stack overflow exceptions that may occur from certain instruction sequences. The size of the guard band can also be specified with a new linker option. See Migration Issues for details.

    v3.10 (C) Support Update

    This support update to version 3.10 includes updates to the following device files:
    dsPIC33FJ06GS101, dsPIC33FJ06GS102, dsPIC33FJ06GS202, dsPIC33FJ16GS402, dsPIC33FJ16GS404, dsPIC33FJ16GS502, and dsPIC33FJ16GS504

    See Fixed Issues for additional updates.

    v3.10

    This version includes support for 5 new devices: PIC24F04KA201, PIC24F08KA101, PIC24F08KA102, PIC24F16KA101, and PIC24F16KA102.

    See Migration Issues for information about how existing projects may be affected.

    Assembler

    • A new directive .memory can be used to define external memory regions. Sections may be assigned to memory regions by using the memory section attribute. See chapter 6 of MPLAB Assembler, Linker and Utilities for PIC24 MCUs and dsPIC DSCs User's Guide for details.

    Linker

    • Several improvements to the linker memory allocator, especially with regards to absolute sections and psv sections. For example, absolute sections may be defined in source code to reside at any address. The sequential memory allocator will avoid absolute sections, if necessary.
    • The linker allocates external memory regions as defined in C or assembly language. Each memory region includes a unique address space into which sections may be allocated. See chapter 10 of MPLAB Assembler, Linker and Utilities for PIC24 MCUs and dsPIC DSCs User's Guide for details.
    • The definition of output section .text in linker scripts includes a new input section named .user_init. This section is used by the compiler to generate activation code for user_init sections. The expression *(.text) has been removed, allowing application code to flow around psv sections as necessary, instead of always being allocated in a single large block. The new definition is:
        .text :
        {
              *(.init);
              *(.user_init);
              *(.handle);
              *(.libc) *(.libm) *(.libdsp);  /* keep together in this order */
              *(.lib*);
        } >program
      
    • The linker script command language supports a new command OPTIONAL which is analogous to INPUT, except that no error occurs if the input file or library can not be found. An exact input file may be specified, or an abbreviated library file name with the -l prefix.
  13. Migration Issues

  14. Migrating to Version 3.20

    Linker scripts provided with v3.20 include new commands to specify start-up files for the target device. If these commands are not found, the linker will select default versions. Existing projects with custom linker scripts will function correctly for all current devices. However, the following warning messages may be displayed:

      Warning: linker script did not specify CRT0_STARTUP file, default for this device: crt0_standard.o 
      Warning: linker script did not specify CRT1_STARTUP file, default for this device: crt1_standard.o 
    

    To quiet these warnings, replace the two EXTERN() commands near the top of the linker script with:

      CRT0_STARTUP(crt0_standard.o)
      CRT1_STARTUP(crt1_standard.o)
    

    The tblpage() operator now returns a value with bit 8 set, even though the TBLPAG register implements bits 0-7 only. The extra bit allows for better code generation by the compiler. Existing projects should not be affected by this change, unless an assembly source file uses the tblpage() operator with a mov.b instruction. In that case, a "relocation truncated to fit" error may be reported. To resolve this problem, revise the assembly source to use a word sized instruction.

    When the psvpage() operator is used with future devices that support extended data memory, a 10-bit value is returned. Assembly source files that use the psvpage() operator with a mov.b instruction should be modified to use a word sized instruction.

    The C-runtime startup has been enhanced to support data initialization outside of the standard 32K data memory range. There are no migration issues for customers using devices released with prior versions of the tool chain. However, if you have included customized versions of the startup files you may wish to apply those enhancements for future devices. For more information, look in files crt0_standard.s and crt0_extended.s, which are contained within the libpic30 archive.

    Because of changes to the startup file architecture, it is no longer possible to load a library startup module by calling __reset. If a custom startup file needs to invoke the standard startup file, copy crt0_standard.s to the project.

    Migrating to Version 3.12

    No significant migration issues have been identified. However, the format of link map files and disassembly listings has changed slightly (see What's New for details.) Custom tools or scripts which post-process such files may need modifications to accomodate these changes.

    Migrating to Version 3.11

    The default stack guard band has been increased from 8 to 16 bytes. This results in a corresponding decrease of usable stack space available to applications. To faciltiate the recovery of lost stack space, or to specify a larger guard band for non-trivial exception handlers, a new linker option has been added. For example, to restore stack allocation to match previous versions:

         --stackguard=8
    

    Migrating to Version 3.10

    • Installation Directory has been Re-organized

      MPLAB IDE will report "File not found" for support files referenced by projects in the old locations. MPLAB IDE v8.10 or later provides an easy way to resolve such problems. Simply right-click on the missing project files and select "Locate Missing File" or "Remove". In most cases MPLAB IDE will locate the missing project file automatically. If the missing file is a standard linker script, then removing the file will suffice, since standard linker scripts are included automatically in MPLAB IDE v8.0 or later. If the missing file is a device-specific library, then removing the file will also suffice, since standard linker scripts now include peripheral libraries automatically.

      The bin folder has also changed. Tools that are specific to the object file format have been moved to a lower level. This change should not impact existing projects, since these tools should always be invoked by the generic versions which are located in the standard location.

    • Memory Map has been Simplified

      The linker's best-fit allocator will merge output sections with the same name whenever it is convenient to do so. This will change the memory usage report and link map. For example, several adjacent sections named .bss will now be merged into one.

      Section .text will flow around section .const (or other psv sections) as necessary. To facilitate this new behaviour, the expression *(.text) has been removed from the definition of output section .text in linker scripts. This may change the organization of sections in program memory, since .text will now be allocated in multiple chunks if necessary. Existing projects which depend on a single .text section can revert to the previous behaviour by restoring the definition of output section .text.

  15. Documentation Updates

  16. None.

  17. Fixed Issues

  18. v3.23b

      Support files

    • UDBC-175 Support files of 24FxxxDA Devices have ambiguities in .h/.inc files. <\li>

    v3.23

      Support files

    • C30-940 Add new LF devices to p24Fxxxx.inc <\li>

    v3.20

      Assembler/Linker or other binary utilities

    • BIN30-145 - ELF linker error with assembly .equ directive
    • BIN30-156 - Attributes for input section '.boot' conflict with output section '.boot_const
    • BIN30-157 - ASSERT() in linker script may cause crash
    • BIN30-158 - Assembler should not limit the range of address()
    • BIN30-159 - __PROGRAM_END symbol should not inlcude config words
    • BIN30-160 - TRIG1bits is missing from 30F2010 linker script
    • BIN30-163 - relocation truncacted to fit: WORD _const_psvpage
    • BIN30-164 - data memory sections may overlap
    • BIN30-165 - Declaring a stack with 64 bytes of sapce emits error
    • BIN30-166 - Linker script does not match datasheet for PIC24F04KA200 and PIC24F04KA201 devices
    • C30-664,
    • C30-667 - INC file ambiguities for 33FJ64GS and 33FJ32GS devices
    • C30-665 - GLD file ambiguities for 33FJ64GS and 33FJ32GS devices
    • C30-673 - Ambiguities in inc files for PIC24F64GB004 family devices
    • C30-699 - Contradictory definitions of AD1PCFGH in PIC24FJ256GAxxx inc fles
    • C30-744 - Errors in P30F6015.inc

    v3.12

      Assembler

    • BIN30-148 - Assembler rejects psv section defined twice with absolute address
    • BIN30-149 - error with _FBS macro on dsPIC33FxxGS devices
    • Disassembler

    • BIN30-153 - pic30-objdump (-d option) may display same label at two addresses
    • Linker

    • BIN30-123 - Memory usage report does not include "noload" sections but the map file does
    • BIN30-137 - Percent used calculation in program memory is slightly inaccurate for non-30F devices
    • BIN30-146 - "noload" sections do not appear in the memory usage report
    • BIN30-147 - Linker should warn if absolute section crosses a region boundary
    • BIN30-150 - Linker option "boot=no_write_protect" is rejected for all devices

    v3.11

      Linker

    • BIN30-141 - Stack overflow guard band is not large enough
    • BIN30-142 - Can't create maximum size auto_psv section
    • BIN30-143 - arrays larger than 16K are not cleared at startup

    v3.10 (C)

    v3.10 (B)

    v3.10

      Assembler

    • BIN30-119 - ELF/DWARF: can't debug multiple sections in assembly
    • BIN30-118 - need better error checking for DSP square and accumulate

      Linker

    • BIN30-30/25966 - Functions with the address attribute may cause a link error.

      Previously, some addresses were invalid for the address attribute, notably those that are used for the .handle, .libc, .libm, .libdsp and other .lib sections. Sequential sections will now avoid functions with the address attribute.

    • BIN30-77 - Not enough contiguous memory for section .const.

      Previously, applications with large amounts of auto_psv data could fail to link on certain devices, even though the total amount of memory used did not exceed the flash capacity. The new linker does a better job of allocating psv sections, including section .const. Also, input sections .text have been removed from linker scripts, allowing the best-fit allocator to flow them around psv sections as necessary.

    • BIN30-127 - Not enough memory for heap, when upgrading from 2.30 to 3.02
    • In v3.0x, variables with an alignment requirement larger than their size consumed additional memory. This has been corrected.

    • BIN30-115 - Linker rejects FGS settings for certain devices
    • BIN30-117 - Invalid Config bit warning seen when building a project with FGS settings
  19. Limitations

  20. The current limitations are as follows:

      Assembler

    • Arguments to the address() section attribute must be even.
    • The default section alignment is 2**1. Therefore the minimum section length is 2 bytes in data memory, and 2 PC units (3 bytes) in program memory.
    • BIN30-3/15741 - The .lcomm directive causes incorrect source line numbers in the assembler listing file.
    • BIN30-5/20016 - Special operators should not accept odd offsets in program memory.
    • BIN30-8/21797 - The .align directive changes section alignment regardless of max-skip.
    • BIN30-10/23306 - For COFF, the option -g (source debugging info) does not work with any section other than .text.
    • BIN30-17/25555 - Cannot generate code for goto $-2.
    • BIN30-22/28477- Unexpected results using .equiv as value for another .equiv.

      The following example is not encoded correctly:

           .equiv var1,root+1
           .equiv var2,var1
           .word var1  ; encodes root+1
           .word var2  ; encodes root
      

      This can happen when the value specified in .equiv is the name of an SFR high byte such as _LATBH, which is defined in the processor include files as an .equiv. The workaround in this case would be to refer to the base register itself, i.e. _LATB+1

    • BIN30-92 - Can't set breakpoints in pre-processed assembly file (COFF-only)
    • BIN30-101 - Multiple .equs to undefined symbol causes internal error in the assembler

      The following assembly statements will cause a failure:

      .equ foo,bar
      .equ baz,foo
      .word baz
      

      In this example, bar is an undefined symbol, while foo and baz are indirect references to bar. The second level of indirection is causing the failure. The following sequences work fine:

      .equ foo,bar
      .word foo ; one level of indirection
      
      .equ bar,9
      .equ foo,bar
      .equ baz,foo
      .word baz ; two levels of indirection to a literal constant
      
    • Linker

    • BIN30-23/28952 - Multiple definition error with custom linker script

      If a linker script is modified to place the .text section from one object file before all the others, multiple definition errors can result. When this occurs the linker acts as if the section was included twice. The workaround is to specify a full pathname, or *, before the object file name:

                   /*
                   ** User Code and Library Code
                   */
                   .text :
                   {
                      *(.init);
                      *(.user_init);
                      *(.handle);
                      *(.libc) *(.libm) *(.libdsp);  /* keep together in
                                                        this order */
                      *(.lib*);
                      myfile.o(.text);   /* this form causes error */
                      *myfile.o(.text);  /* this form works OK */
                   } >program
      
    • BIN30-168 - Linker's user-defined segment option does not accept hex values.

      As a work-around, use decimal values instead. For example:

        --boot=flash_size=1024
      
    • BIN30-178 - Linker does not validate object signatures across input files.

      The linker will not detect a mis-match of the -mlarge-arrays option among input files. As a work-around, place objects into a library before adding them to the project.

    • BIN30-179 - Linker does not support initialized data sections larger than 64K.
  21. Environment Variables Modified

  22. This installation makes no changes to the way environment variables have been updated previously.

    Modified environment variables are identified as part of the installation procedure and are documented in the manuals.

  23. Customer Support


  24. Microchip provides online support via our home page at:
    http://www.microchip.com

    Technical support is available through the web site at:
    http://support.microchip.com

    A forum for discussion of Microchip products and tools is available at:
    http://forum.microchip.com