Release Notes for MPLAB C30

By Cheryl Riley,2014-03-21 20:12
11 views 0
Release Notes for MPLAB C30

    Release Notes for MPLAB C30

    芯片软件 2008-07-26 12:09:57 阅读383 评论0 字号;大中小 订阅

    Release Notes for MPLAB? C30


    09 November 2007

    Table of Contents

    1. Overview 2. GNU General Public License 3. Devices Supported 4. Installation 5. MPLAB C30 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


    Exceptions to the GNU GPL:

    o pic30-lm

    o pic30-pa o 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.

    2. Microchip's Web-site:

    o MPLAB C30 C Compiler User's Guide (DS51284)

    o MPLAB ASM30, MPLAB LINK30 and Utilities User's Guide (DS51317) o 16-Bit Language Tools Libraries (DS51456) o 16-bit Language Tools Getting Started (DS70094)

    o dsPIC30F Language Tools Quick Reference Card (DS51322)

    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.

    3. Documentation Updates. The example may be found in MPLAB C30\examples\dsPIC30F. Added support for writing to the RTCC register by providing a new builtin that will set RTCWREN bit of

    RCFGCAL. See Documentation Updates for more information.

    A new attribute and command line option is provided to allow the upper byte of a space(prog) to

    have a value other than 0. See Documentation Updates for more information.

    See Migrating to Version 3.02 for other changes in this release that may affect existing projects.

    v3.01 (B) Support Update

    This support update to version 3.01 includes 30 new devices PIC24HJ32GP302, PIC24HJ32GP304, PIC24HJ64GP202, PIC24HJ64GP204, PIC24HJ64GP502, PIC24HJ64GP504, PIC24HJ128GP202, PIC24HJ128GP204, PIC24HJ128GP502, PIC24HJ128GP504, dsPIC33FJ32GP302, dsPIC33FJ32GP304, dsPIC33FJ32MC302, dsPIC33FJ32MC304, dsPIC33FJ64GP202, dsPIC33FJ64GP204, dsPIC33FJ64GP802, dsPIC33FJ64GP804, dsPIC33FJ64MC202, dsPIC33FJ64MC204, dsPIC33FJ64MC802, dsPIC33FJ64MC804, dsPIC33FJ128GP202, dsPIC33FJ128GP204, dsPIC33FJ128GP802, dsPIC33FJ128GP804, dsPIC33FJ128MC202, dsPIC33FJ128MC204, dsPIC33FJ128MC802, dsPIC33FJ128MC804 A customer can determine if this update has been installed by examining the C30 version string. A version string is displayed by executing the following command:

    pic30-gcc --version

The version string before update is: (dsPIC30, Microchip v3.01) (A)

    The version string after update is: (dsPIC30, Microchip v3.01) (B)


    This version includes 32 new devices: PIC24F04KA200, PIC24F08KA101, PIC24F16KA101, PIC24F32KA101, PIC24F04KA201, PIC24F08KA102, PIC24F16KA102, PIC24F32KA102, PIC24FJ64GA106, PIC24FJ128GA106, PIC24FJ192GA106, PIC24FJ256GA106, PIC24FJ64GA108, PIC24FJ128GA108, PIC24FJ192GA108, PIC24FJ256GA108, PIC24FJ64GA110, PIC24FJ128GA110, PIC24FJ192GA110, PIC24FJ256GA110, PIC24FJ64GB106, PIC24FJ128GB106, PIC24FJ192GB106, PIC24FJ256GB106, PIC24FJ64GB108, PIC24FJ128GB108, PIC24FJ192GB108, PIC24FJ256GB108, PIC24FJ64GB110, PIC24FJ128GB110, PIC24FJ192GB110, PIC24FJ256GB110


    o The compiler now supports the generation of the divf instruction via a new builtin. The

    prototype is:

    unsigned int __builtin_divf(unsigned int num, unsigned int den);This implements the signed fractional divide. Unsigned types are used to prevent in-appropriate sign extensions.


    o The definition of output section .text in linker scripts includes a new input section named .init.

    The new definition is:

    .text : { *(.init); *(.handle); *(.libc) *(.libm) *(.libdsp); /* keep together in this order */ *(.lib*); *(.text); } >program


    o C runtime startup modules crt0.o and crt1.o have been assigned to section .init. When

    combined with a matching change to linker scripts as described above, this will make it easier to specify the entry point for bootloader applications. Now the startup code will be located at the lowest address in

    section .text, before handles or any other library functions. o The following helper functions for erasing and writing to EEDATA memory on dsPIC30F devices have been added to libpic30.a:

    ; _erase_eedata() - erase a word or row of EEDATA memory

    ; _erase_eedata_all() - bulk erase of EEDATA memory

    ; _wait_eedata() - wait for an erase/write operation to complete

    ; _write_eedata_word() - write a word of EEDATA memory

    ; _write_eedata_row() - write a row of EEDATA memory

    Please see Documentation Updates for more details.

    o The following helper functions for erasing and writing to FLASH memory have been added to libpic30.a:

    ; _erase_flash() - erase a page of FLASH memory

    ; _write_flash16() - write a row of FLASH memory with 16-bit data

    ; _write_flash24() - write a row of FLASH memory with 24-bit data

    ; _write_flash_word16() - write a word of FLASH memory with 16-bit data

    ; _write_flash_word24() - write a word of FLASH memory with 24-bit data

    Please see Documentation Updates for more details.

    v3.00 (B) Support Update

    This support update to version 3.00 includes 13 new devices PIC24FJ16GA002, PIC24FJ16GA004, PIC24FJ48GA002, PIC24FJ48GA004, PIC24HJ16GP304, PIC24HJ32GP202, PIC24HJ32GP204, dsPIC33FJ16GP304, dsPIC33FJ32GP202, dsPIC33FJ32GP204, 33JF16MC304, dsPIC33FJ32MC202 and dsPIC33FJ32MC204.

    A customer can determine if this update has been installed by examining the C30 version string. A version string is displayed by executing the following command:

    pic30-gcc --version

The version string before update is: (dsPIC30, Microchip v3.00) (A)

    The version string after update is: (dsPIC30, Microchip v3.00) (B)


    This release provides a number of enhancements to make accessing the unique features of the dsPIC easier. These are summarized below, with more information available in the accompanying documentation.

    Some highlights:

    o The tool chain supports the new PIC24 and dsPIC33F devices.

    o The tool chain supports new features making working with CodeGuard easier. o This release provides an update to the GCC source base to GCC 4.0.3. o New features have been added to make it easier to maintain multiple PSV pages. These items are released as Beta.


    o The compiler now supports features to make using CodeGuard on certain 16-bit devices much easier. These features include new attributes to allow the programmer to either specify a boot, attribute(boot), or secure, attribute(secure) segment for code or data. For

    complete details see the user's guides!

    o The compiler source base has been upgraded to GCC version 4.0.3. This gives better code performance with the speed optimization levels, -O2 and -O3, without sacrificing code-size optimizations at -O1 and -Os.

    o New built-in functions have been added; the complete list has now been moved to Appendix B of the MPLAB C30 User's Guide. New builtins include:

    ; functions to access the tblrd and tblwt instructions

    ; functions to aid in modifying the OSCCON SFR

    ; a function to aid in generating the correct unlock sequence for writing to NVM

    See the manual for more details!

    o The compiler supports new type qualifiers for managed PSV pointers, so that multiple PSV pages in FLASH can be supported, either implicitly using the constants-in-code memory model or explicitly

    through the space(psv) or space(prog) attributes. This feature is released in Beta form and is currently documented in a separate document included in the documentation folder. Check out MPLAB C30 Managed PSV Pointers for more details.


    o The assembler accepts two new section attributes for CodeGuard: boot and secure. These

    attributes may be applied to sections of type code, bss, psv, and eedata. When applied to a

    code section, an optional argument may be added to specify entries in the access entry point table.

    For details see 6.3, "Directives that Define Sections", in the MPLAB ASM30/LINK30 and Utilities User Guide.

    o The assembler provides two new special operators: boot and secure. These operators are

    provided to get the address of functions in the boot or secure segments, or to transfer control to

    such functions.

    o New directives have been added for storing ASCII strings in program

    memory: .pascii, .pasciz, and .pstring. These directives can be used to store character data into all three bytes of each program memory word. Please see Documentation Updates for more details.


    o Valid CodeGuard segment sizes and configuration options for all supported devices are initialized. Segment sizes and options may be specified in the IDE Build Options dialog, on the command line, or in source code via FGS, FSS, FBS config word definitions. See 8.8, "Options that Specify CodeGuard Security Features", in the MPLAB ASM30/LINK30 and Utilities User Guide. o User-defined boot and secure segments are also supported in program memory and data memory. This allows an application to take advantage of the CodeGuard language extensions on any device, not just CodeGuard enabled devices.

    o The linker collects boot and secure input sections and allocates them according to the options


    o Access entry tables for boot and secure segments are created automatically, if access entry

    points have been defined in source code.


    o The following helper functions for copying data from program memory to data memory have been added to libpic30.a:

    ; _memcpy_p2d16() - copy 16 bits of data from each program memory word

    ; _memcpy_p2d24() - copy 24 bits of data from each program memory word

    ; _strncpy_p2d16() - copy 16 bits of data (null-terminated) from each program

    memory word

    ; _strncpy_p2d24() - copy 24 bits of data (null-terminated) from each program

    memory word

    Please see Documentation Updates for more details.


    o MPLAB C30 Built-in Functions have been moved from the 16-Bit Language Tools Library to Appendix B of the MPLAB C30 C Compiler User's Guide. 4. Documentation Updates has been corrected.



    o BIN30-2/26070 - The .pushsection, .popsection directives are not implemented o BIN30-65 - pic30-as produces incorrect error message (error is correct, message is wrong)

    The following invalid instruction

    add w0, #52, w0

    now correctly reports that operand #2 should be between 0 and 31 inclusive.

    o BIN30-75 - LVD bit definitions missing in the RCON register for the p30f6010.h file o BIN30-76 - Incorrect define statement in the peripheral library file - "adc.h" for the dsPIC33F devices

    o BIN30-78 - Improve config macro for more robust section handling o BIN30-81 - assembler needs more restrictions on penultimate instruction in DO loops o BIN30-82 - Defintion of PMD2 and PMD3 SFR's in the include files for dsPIC33FJ16MC304,dsPIC33FJ32MC202 and dsPIC33FJ32MC204 do not match the datasheet o BIN30-83 - Bit 8 of CNEN2 SFR in Pic24HJ32Gp202 does not match the datasheet o BIN30-84 - Missing bit defintions for the CNEN2 SFR for PIC24H16GP304 and PIC24HJ32GP204 devices

    o BIN30-88 - For PIC24FJ16GA002, PIC24FJ16GA004 , PIC24FJ48GA002,and PIC24FJ48GA004 bits are defined for PORTA in the .inc files but the datasheet says they should not be defined for these devices

    o BIN30-97 - No error for missing section name

    The following invalid statement

    .section ,code

    is now rejected by the assembler.

    o BIN30-99 - incorrect opcode for "mov #boot(n),Wn"

    This assembler bug may have adversely impacted C applications that utilize pointers to boot or secure functions. The symptom would be an unexpected program reset, possibly dependant on optimization level.


    o C30-24/20257 - I2C Example in Library Reference should wait for ninth cycle

    o C30-42 - Request to add functions for eedata access o C30-58 - Request warning for space() attribute applied to struct member

Certain attributes only have meaning when applied to file scope variables (such as space()), the

    compiler will now give warning messages if such an attribute will be ignored o C30-62/26841 - [ELF/DWARF only] File containing noload function won't assemble when built with debug info

    o C30-63 - section attribute should not imply initialized data

    o C30-92 - Header files use asm(xyz) when C would be better o C30-94 - Changes required to the SlavegetsI2C() and the SlaveputsI2C() functions in the libraries for PIC24F,PIC24H, dsPIC30F and dsPIC33F devices

    o C30-174 - Program with large array in space(prog) fails to link. o C30-184 - __builtin_add gives an unrecognizable insn error when the value of the shift value is a neagative number

    o C30-188 - dsp.h macro Q15() is terminated by a semi-colon o C30-204 - register asm variables do not always get assigned to the correct register o C30-205 - Appropriate Compiler Error message not generated when obtaining the address of a CodeGuard function, with the 'unused' attribute

    o C30-209 - Add __builtin_divf o C30-210 - __builtin_sac occasionally fails to compile

    The compiler was not respecting the correct register variable request and complained that an inappropriate argument was used.

    o C30-215 - pic30_tools\src\dsp\asm\pid.s has an error.

    o C30-216 - Problems with interrupt context save when attribute save() is specified.

    o C30-219 - __builtin_write_OSCCONx() may generate bad code with optimization

    o C30-221 - general managed psv pointer optimisation errors o C30-222 - More than one array dimension loses managed PSV-ness o C30-223 - taking the address of managed psv structure member fails

    o C30-227 - MC devices missing #define bits o C30-230 - CONFIG1 bit 15 should remain set to 0 on PIC24F devices o C30-232 - Improve code size benchmarks

    o C30-233 - Linker Error when using the dsp peripheral library with the ELF format on dsPIC30F devices o C30-234 - __builtin_disi() has disappeared o C30-237 - sprintf() is much slower with v3.00

    o C30-239 - "Impossible reloads" internal compiler error for " = (-) & " with optimization and small data model

    o C30-240 - optimization can cause a const value to be used out of an accumulator register o C30-243 - DisableIntT2 definition is incorrect in timer.h for the PIC24H, dsPIC30F and dsPIC33F devices

    o C30-245 - Internal Compiler error with find_reloads for builtin_add() with -O0

    o C30-246 - const not respected for variables first seen as extern? o C30-247 - Secure interrupt functions stack is corrupted. o C30-251 - aligned arrays in x,ymemory consume more RAM o C30-265 - Internal Compiler error in extract_insn when using two-dimensional long array within an asm statement

    o C30-??? - Several difficult to charactarize internal compiler errors

    C30-199, C30-200, C30-203, C30-249, and C30-266


    o BIN30-31 - Some sections are still flagged as relocatable after linking

    o BIN30-43 - User requests symbol for the last location in program memory o BIN30-64 - References to OSCCONL AND OSCCONH missing in the dsPIC30F/33F linker scripts o BIN30-80 - Link error with ELF, large code model and function pointer to boot or secure access slot

    v3.00 (B) Support Update


    o C30-218 - PwrMgnt functions missing from PIC24F library



    o BIN30-42 - Unit ID not supported via macros on dsPIC30F devices o BIN30-61 - Undefined symbol error for weak symbol when extracted from an archive

    o BIN30-69 - For PIC24FJ32GA002/004 and PIC24FJ64GA002/004, bit 14 ( T1IP2) for the IPC0 SFR is defined in the datasheet, however this bit is not defined in the include files. o BIN30-70 - For PIC24FJ32GA002/004 and PIC24FJ64GA002/004, bit 2 (OCM2) of OC1CON and OC3CON SFR is defined in the datasheet, however this bit is not defined in the include files. o BIN30-74 - CNInterrupt installed at wrong vector address for SMPS devices


    o 28001 - PA Tool does not recognize __builtin_dmaoffset().

    o C30-29/29536 - Signed Multiplication for Long Long variables does not give the expected result o C30-30/29537 - Certain dsPIC30F devices will not correctly link when using provided standard IO Those devices which only have 1 UART will not properly link when there is a reference to read() or

    write(). These devices are: dsPIC30F1010, dsPIC30F2010, dsPIC30F2011, dsPIC30F2012, dsPIC30F2020, dsPIC30F2020, dsPIC30F2023, dsPIC30F3010, dsPIC30F3012, dsPIC30F4012, dsPIC30F5015, dsPIC30F5016.

    o C30-79 - line continuation characters at the end of three lines in peripheral library header files o C30-83 - Bug in uart.h UART_EVEN_PAR_8BIT and UART_NO_PAR_8BIT should be defined as: #define UART_EVEN_PAR_8BIT 0xFFFB /even parity 8 bit/#define UART_NO_PAR_8BIT 0xFFF9 /no parity 8 bit/

    o C30-90 - bugs reported in peripheral library v2.05

    - CloseI2C2.c : the function named CloseI2C21() instead CloseI2C2()

    - uart.h: this file has incorrect defines for the PDSEL configuration in the dsPIC33F section

    - makelib.bat : this file doesn't include the functions for timer 6-9 for dsPIC33F libraries

    o C30-91 - PA Tool does not like code generated when InstrumentedTrace is enabled o C30-106 - "Unable to spill register" for 7-byte struct assignment under -msmall-data and -O2 o C30-113 - "Automatic DSP instruction" error not emitted for assignment to Accumulator variable when building with -O1

    o C30-124 - File fails to link due to .nbss file register addressing in libraries o C30-132 - bad code generated with -O1 -fno-omit-frame-pointer

    o C30-158 - attribute(noreturn) can cause stack corruption o C30-159 - Shell passes --relax to assembler o C30-177 - Comparison of 8-bit integer to 16-bit division quotient evaluates incorrectly

    o C30-180 - examples/MPLAB C30_Getting_Started/main.c does not build as written o C30-181 - data-dependant error in long long multiplication o C30-182 - Request _YBSS and _YDATA macros apply 'far' attribute for devices where ydata, near are not a valid combination


    o C30-123 - Desktop shortcut created for documentation even when option disabled 5.

Report this document

For any questions or suggestions please email