korren 发表于 2008-3-21 09:17:07

Hi-Tech 发布dsPICC V9.60PL2支持Vista 64 位操作系统和新器件。

HI-TECH for dsPIC/PIC24
Version 9.60PL2 Release Notes

This file contains important information relating to
this compiler. Please read it before running this software.



<Graphics file: /home/lucky/release/nz/c/manual/common/logo.pdf>


Introduction

This is a patch level update that adds support for
64-bit versions of Microsoft Windows, adds support for
the latest devices, improves debugging in MPLAB and
fixes bugs reported since version 9.60PL1.

1.1 Previous Versions

The previous release version was 9.60, released
September 2006. The previous patch level was 9.60PL1,
released October 2007.

1.2 Updates

Monitor the announcements forum onfor information
relating to new versions or patches, and/or subscribe
to our announcement mailing list - send email tofor
more information.

New Features

2.1 General

64-bit Windows support (9.60PL2) This release adds
support for installation on the Microsoft Windows XP
64 and Vista 64 operating systems.

New device support (9.60PL2) Support for the following
devices have been added to the compiler:
PIC24FJ128GA106, PIC24FJ128GA108, PIC24FJ128GA110,
PIC24FJ128GB106, PIC24FJ128GB108, PIC24FJ128GB110,
PIC24FJ192GA106, PIC24FJ192GA108, PIC24FJ192GA110,
PIC24FJ192GB106, PIC24FJ192GB108, PIC24FJ192GB110,
PIC24FJ256GA106, PIC24FJ256GA108, PIC24FJ256GA110,
PIC24FJ256GB106, PIC24FJ256GB108, PIC24FJ256GB110,
PIC24FJ64GB106, PIC24FJ64GB108, PIC24FJ64GB110,
PIC24HJ128GP202, PIC24HJ128GP204, PIC24HJ128GP302,
PIC24HJ128GP304, PIC24HJ128GP502, PIC24HJ128GP504,
PIC24HJ128GP802, PIC24HJ12GP201, PIC24HJ12GP202,
PIC24HJ12MC201, PIC24HJ12MC202, PIC24HJ16GP304,
PIC24HJ16MC302, PIC24HJ16MC304, PIC24HJ32GP202,
PIC24HJ32GP204, PIC24HJ32GP302, PIC24HJ32GP304,
PIC24HJ32MC202, PIC24HJ32MC204, PIC24HJ64GP202,
PIC24HJ64GP204, PIC24HJ64GP502, PIC24HJ64GP504,
DSPIC30F2005, DSPIC33FJ06GS101, DSPIC33FJ06GS102,
DSPIC33FJ06GS202, DSPIC33FJ128GP202,
DSPIC33FJ128GP204, DSPIC33FJ128GP802,
DSPIC33FJ128GP804, DSPIC33FJ128MC202,
DSPIC33FJ128MC204, DSPIC33FJ128MC802,
DSPIC33FJ128MC804, DSPIC33FJ12GP201,
DSPIC33FJ12GP202, DSPIC33FJ12MC201, DSPIC33FJ12MC202,
DSPIC33FJ16GP304, DSPIC33FJ16GS402, DSPIC33FJ16GS404,
DSPIC33FJ16GS502, DSPIC33FJ16GS504, DSPIC33FJ16MC304,
DSPIC33FJ256MC510, DSPIC33FJ256MC710,
DSPIC33FJ32GP202, DSPIC33FJ32GP204, DSPIC33FJ32GP302,
DSPIC33FJ32GP304, DSPIC33FJ32MC202, DSPIC33FJ32MC204,
DSPIC33FJ32MC302, DSPIC33FJ32MC304, DSPIC33FJ64GP202,
DSPIC33FJ64GP204, DSPIC33FJ64GP802, DSPIC33FJ64GP804,
DSPIC33FJ64MC202, DSPIC33FJ64MC204, DSPIC33FJ64MC802,
DSPIC33FJ64MC804

Improved debugging in MPLAB (9.60PL2) With co-operation
from Microchip, there have been improvements with the
ability to debug in MPLAB. This involved changes to
the COF file output generated by the compiler, and
changes to MPLAB by Microchip. These improvements can
be seen by using MPLAB v8.02 or higher.

Windows Vista support (9.60PL1) This release adds
support for installation on the Microsoft Windows
Vista operating system.

Microchip MPLAB plug-in (9.60PL1) This version of the
compiler now ships with and installs a plug-in for
the Microchip MPLAB IDE. This enables the IDE to
support the features of this compiler more accurately.

New device support (9.60PL1) Support for the following
devices have now been added to this compiler:
24FJ16GA002, 24FJ16GA004, 24FJ32GA002, 24FJ32GA004,
24FJ48GA002, 24FJ48GA004, 24FJ64GA002, 24FJ64GA004,
24HJ128GP210, 24HJ128GP510, 30F1010, 30F2021,
30F2022, 30F2023, 33FJ128GP206, 33FJ128GP306,
33FJ128GP310, 33FJ128MC510, 33FJ256GP510,
33FJ256MC510, 33FJ64GP306.

New Chips (9.60) Support for the new PIC24 and dsPIC33
devices has been added to the compiler.

2.2 Driver

Effect of --CODEOFFSET option (9.60PL2) The effect that
this option has on the interrupt vector table and
alternate vector table has changed. Now, this option
will not relocate these vector tables. These tables
will remain at their fixed location when --codeoffset
is used. The instructions at the reset vector will
still be relocated as before.

New option: --CODEOFFSET (9.60PL1) To add conformance
with partner compilers, PICC and PICC-18, the popular
--CODEOFFSET option has now been implemented. This
option allows the executable part of a program to be
offset so that it begins at an alternate address.
This includes the offset of reset and interrupt
vectors, however constant data which is also stored
in program memory is not affected by this option.
This is by design. If constant data is also to be
moved, a corresponding --ROM option reserving program
memory is suggested.

New symbol definition _HTC_EDITION_ (9.60PL1) A new
preprocessor symbol is defined by the driver in all
builds. _HTC_EDITION_ will define whether the
compiler building this program is a PRO, STD or Lite
edition. The value of _HTC_EDITION_ can be compared
with symbols __PRO__, __STD__ or __LITE__ which are
defined in htc.h. This facilitates conditional
compilation of code based on which compiler
technology is used.

Chip Architecture and Family Definitions (9.60) The driver
will now instruct the preprocessor to define the
following symbols depending on the target device:

__dsPICC__ : for all dsPIC target devices,

__dsPIC30F__ : for all dsPIC30F target devices,

__dsPIC33F__ : for all dsPIC33F target devices,

__PIC24__ : for all PIC24 target devices,
__PIC24FJ__
: for all PIC24FJ target devices and
__PIC24HJ__ : for
all PIC24HJ target devices.

__EEPROM_SIZE__ Definition (9.60) The driver will now
instruct the preprocessor to define the symbol
__EEPROM_SIZE__. The value of this symbol is equal to
the number of bytes of EEPROM memory on the current device.

General Interrupts (9.60) Undefined interrupts can now
be assigned to a general interrupt via the use of the
vec_func sub-option of the --runtime option. By
creating an interrupt function named GeneralInterrupt
and using this option, all undefined interrupts will
vector to this shared interrupt function.

_MPC_ Definition (9.60) The driver will now instruct
the preprocessor to define the symbol _MPC_. This was
introduced to keep the dsPIC C compiler consistent
with other HI-TECH C compilers which target Mircochip devices.

Near and Far qualifiers (9.60) New qualifiers near and
far have been added. Objects defined as near will be
located below address 0x2000 and can be access
directly. Objects defined as far may be located
anywhere in data space and will be accessed
indirectly. By default (no qualifier) objects are near.

2.3 Code Generator

Bitfield Optimizations (9.60) Additional optimizations
have been applied to operations involving bitfields
which should now generate more efficient code.

2.4 Assembler

New Optimizations (9.60) More optimizations have been
added to the assembler stage of the compiler. The new
optimizations extend on previous optimizations to
produce more compact code.

2.5 Libraries

EEPROM Functions (9.60PL1) New EEPROM read, write and
erase functions have been provided in the standard
libraries for the devices which have it. Function
prototypes have been declared in nvm_interface.h,
please consult this file for further details.

Flash Functions (9.60PL1) New Flash read, write and
erase functions have been provided in the standard
libraries. Functions prototypes have been declared in
nvm_interface.h, please consult this file for further details.

Fast Floating-point Math (9.60) New floating-point
routines are available for dsPIC30/33 devices which
significantly increases the speed of floating-point
addition, subtraction and multiplication with no
additional code space requirements.

setjmp.h & setjmp.c (9.60) In order to increase
conformance with the ANSI'89 C standard an
implementation of the set jump routines (viz. setjmp
and longjmp) has been provided.

2.6 Header files

Configuration Bit Values (9.60) Additional macros were
added to dspic.h for setting configuration bit values
in dsPIC33F, PIC24FJ and PIC24HJ devices.

Interrupt Vector Locations (9.60) Additional macros were
added to dspic.h of the locations of interrupt
vectors for dsPIC33F, PIC24FJ and PIC24HJ devices.
Furthermore macros of the locations of alternate
interrupt vectors have also been added for all
supported devices.

New and Updated Header Files (9.50) To support the PIC24
and dsPIC33 devices additional C and assembler header
files have been provided. Please note that the header
files provided with this release have been created
using new scripts. Every attempt has been made to
remain consistent with the conventions and names in
the previous release. However users may still
encounter some subtle differences.

SFR Definitions (9.60) The chip specific header files
now include Microchip-compatible SFR definitions.
These definitions typically use structures with
bitfields and is provided to further source-file
compatibility between the Microchip compiler and
HI-TECH compiler.

2.7 Hexmate

-ADDRESSING (9.60PL1) This new option will allow the
address fields in all input options to be entered in
an addressing format other than byte addresses. This
is particularly advantageous for this compiler as the
program memory is word addressed (use -ADDRESSING=2).

-FILL=hexcode,data (9.60PL1) The -FILL option now
accepts additional flags to further customize how a
fill code will be applied to unused program memory.
The first (and only) flag implemented is ,data.
Adding this to the -FILL command will restrict the
program filling to act only on areas of program space
that already contain data. This facility will cause
the records of the generated output file to all be of
the same length and to all align on addresses which
are a multiple of that length. No new data records
will be generated for regions of program memory that
are void. The default length is 16 bytes and can be
changed with the -FORMAT option. Intel hex files that
have been conditioned in this way are optimized for
bootloaders.

Data record length (9.60PL1) Now the maximum length of
an INHX data record has been increased from 32 to 128
data bytes. The default maximum length of a data
record still remains at 16 bytes.

Checksum algorithms (9.60PL1) Previously checksums
would only be calculated using an 8 bit summation
algorithm. This option has now been enhanced so that
one of eight simple algorithms can be selected to
perform the computation.

Checksum endianism (9.60PL1) You can now control
whether multi-byte checksum result be stored in
little-endian or big-endian format. When specifying
the width of the checksum, use a negative width to
specify little endian format. If no width is
specified, the default result will be two bytes wide
stored in little endian format.

No output option (9.60PL1) It is now permissible to use
the -Ofilename option without specifying a filename.
Leaving filename blank will suggest that no hex file
will be generated. This is useful if hexmate is being
used purely for its diagnostic abilities. For example
verifying hex file integrity or creating a logfile
summary. This is different from not specifying the -O
option at all, which will send the generated output
to stdout.

Changes

3.1 General

Product name (9.60PL1) To better describe the devices
that are supported by this compiler, this product has
been renamed from dsPICC to HI-TECH for dsPIC/PIC24.

New linker class: CONST (9.60PL1) A new linker class,
CONST, has been implemented and will used to hold
constant data that will reside in program memory. The
class is divided into blocks of 0x4000 words to
facilitate easier RAM mapping using the controller's
Program Space Visibility feature. The psects that are
linked into this class are const and strings. This
change also makes it possible to locate const and
strings to program addresses beyond 4000h - this was
previously not possible.

Software Stack (9.60) Previously the software stack was
assigned to its own psect, viz. "stack". The stack is
now no longer assigned to its own psect. Rather the
compiler attempts to find the largest contiguous gap
available in the data memory space. In the compiler
generated startup code the stack-pointer (i.e. w15)
is initialised with the lowest word-aligned address
within this gap. The Stack Pointer Limit Value
register (i.e. SPLIM @ 0x20) is initialised with the
highest word-aligned address within this gap. In
order to make the position and size of the stack
clear to the user both of these registers are
initialised using compiler generated global symbols,
viz. __sp_init and __splim_init respectively.

Vector Tables (9.60) The alternate interrupt vector
table (AIVT) by default is programmed with the same
addresses as the interrupt vector table (IVT).
However any interrupt service routines linked to the
AIVT will of course take precedence over this behaviour.

3.2 Driver

--SERIAL/--FILL options (9.60PL1) The driver's --SERIAL
and --FILL options previously required any address
component to be entered as a byte address. These
options now expect any address components to use word
addresses. This is the native addressing format for
16 bit PICs.

Driver Options (9.60) There have been some minor
changes to some of the command-line options. Most
notable are options controlling output files and
optimizations. Run the driver with --help or refer to
the user manual for details of the available options.

3.3 Code Generator

Address Error Trap Workaround (9.60) Microchip have
reported in Silicon Errata for PIC24 and dsPIC
devices that under certain conditions it is possible
to generate an address trap error when using
interrupt nesting. In order to minimise the window of
opportunity for this to occur during
context-restoration the code generator will disable
interrupts immediately before the context-restoration
code by temporarily raising the CPU interrupt
priority level to 7. Furthermore the code generator
will also place "DISI #4" before the retfie instruction.

Limitations

4.1 General

Constant Data Storage and Access (9.60) PIC24 and dsPIC
devices have the ability to access program memory
directly (through the use of table read/write
instructions) or via the memory mapping feature (a
portion of program memory is mapped into data space).
The dsPICC compiler will store all constant data
immediately after the alternate vector table in
program memory (i.e. from address 0x100 in the
dsPIC30 devices and 0x200 in all others). This memory
is then mapped into the data space to address (i.e.
from 0x8100 in the dsPIC30 devices and 0x8200 in all
others). This mapping allows for smaller, faster code
to access the constant data, but at a cost of using
16-bits of each 24-bit word of program memory.
Currently this is the only automatic method supported
by dsPICC for storing constant data.

4.2 Driver

MPLAB Plugin Compatibility (9.60) In order to remain
compatible with the current MPLAB plugin the driver
will allow the older chip specifying option. As a
result, when compiling for PIC24 devices in MPLAB the
compiler will give advisory messages 1207 and 1208.
These messages can be safely ignored and the build
process should, otherwise conclude successfully.

4.3 Parser

Qualified arrays generate error (9.60) The compiler
generates an error when compiling complicated
qualified arrays, e.g.:

const char * const * const listnames[] = {menu0, menu1};

The error is not issued if the array is not
qualified, or for arrays of more basic types.

Missing parenthesis not detected (9.60) A missing end
parenthesis is not detected in variable declarations
when the variable is type cast. For example,

static char C @ ((unsigned)&PORTA;

This problem does not appear to affect any output
code, but may cause problems when using third-party
software tools.

4.4 Code generator

Multiple fast interrupts Users should be aware that
compiler enforces a limit of one non-empty fast
qualifier per program. This is reasonable for
programs using interrupt nesting. However for
programs that don't, this is a limitation of the
compiler. Program modules with more than one fast
qualified non-empty interrupt function may cause the
assembler to produce the following error: (845)
multiply defined symbol "fast_interrupt".
Should the
compiler reach the linking stage and there is more
than one fast qualified non-empty interrupt function
in the program but in different modules then the
linker may emit the following error: (482) symbol
"fast_interrupt" multiply defined in "filename.obj".

User located far objects By default all unqualified
global and static variables are treated by the
compiler as near. That is the compiler will position
these objects within the first 0x2000 of RAM and emit
code which is optimal for reading and writing to
objects located in this region. However objects
positioned across or past this near boundary
explicitly by the user (using some linker trickery)
won't be identified as being implicitly far. Instead
these objects will be treated as near by the compiler
and emit code accordingly. This may a result in a
Fixup Overflow error or some other error that does
not immediately reflect the problem.
Workaround:
Ensure that all such objects are explicitly qualified
as far and the compiler should generate more
appropriate code. Please refer to the manual for more
details on the differences between near and far objects.

Error on initialization of complex bitfields (9.60) Any
structure using bitfields within a structure or union
cannot be initialized. For example, using the
following types where a structure is a member of a
union, initialization of the structure's bitfields
will generate an error.

typedef struct {
    unsigned b0:1, b1:1, b2:1, b3:1,
b4:1, b5:1, b6:1, b7:1
} byte_bits;
typedef union {
   
byte_bits    bits;
    char         byte;
} byte_or_bits;



This will generate a compiler error:

byte_or_bits example = { {1,0,1,1,0,1,0,0 } };

Instead, use a single value:

byte_or_bits example = { 0b10110100 };

4.5 Assembler

__CONFIG Macro Usage It is recommended that users
employ this macro at the beginning of a module. Users
are free to use it elsewhere, but some have reported
unexpected results in their configuration settings.

4.6 Libraries

Floating point accuracy (9.60) The floating point math
routines, despite DBL_MIN being defined as
1.17549435E-38, cannot perform operations predictably
on numbers below the order of 1e-35. The result is
either correct OR zero.

Bug Fixes

The following are descriptions of bugs that were
present in the previous versions of this compiler, and
which have been fixed in this release.

5.1 Activation

Linux & OSX activation (9.60PL1) Online and Offline
activation of the Linux and OSX versions of the
compiler was faulty. This has now been corrected.

5.2 Driver

--HELP=B (9.60PL2) When running the --HELP option to
get details about dspicc's -B option, the result was
returned in a format which was inconsistent with
other --HELP suboptions. One consequence of this was
that the MPLAB Universal toolsuite did not present
any selections for memory model.

--FILL ranges (9.60PL2) If the --FILL option was used
without specifying an address range and the
--ROM=default,-range was used to exclude a program
memory address range, the memory fill may appear in
the reserved program memory range.

Can't find 0x0 words for psect "const" (9.60PL2) This
unnecessary error message prevented a program from
building if it contained no constant data and all
program memory addresses which are a multiple of
8000h (with the exception of 0h - the reset vector)
had been reserved. One situation where this scenario
could occur is when building a bootloader.

mconst psect linking (9.60PL2) In some instances the
mconst psect was not being aligned to the same offset
as its partner const psect which resulted in accesses
to some constants being mis-aligned.

reloc psect flag problems (9.60PL2) When particular
reseravtions of memory were made via the --ROM
option, the reloc psect flag could be applied to the
const psect inappropriately. This has been updated to
take into consideration these memory reservations.

Jump table linking (9.60PL2) The function table table
that is employed when large model is selected had the
potential to be linked at an address above 0xFFFF.
The jump table must be linked below this address to
function correctly.

Available constant data (9.60PL1) All constant data is
mapped from the data space (in psects mconst &
mstrings) into the first "page" of program memory (in
psects const and strings respectively). Hence
programs are restricted to a data address space of
0x8000 + (end address of vector table) to 0xFFFF for
all constant data. When programs exceeded this
restriction the linker would emit a number of (478)
lit16 range check failed error messages. In order to
make this occurrance clearer to the user the driver
now instructs the linker to assign the psects mconst
and mstrings to the class MCONST. This class has a
range of 0x8000 + (end address of vector table) to
0xFFFF. Should a program now exceed the restriction
on constant data, the linker will also emit a (491)
can't find 0x???? words for psect "?" in segment
"MCONST" error message.

Differences between .bin/.hex files (9.60PL1) When
selecting to output a binary image file
(--output=+bin), the data contained within the binary
file did not correlate with the data in the hex file
if the lowest address used in program memory was non-zero.

Stack placement (9.60PL1) When finding the largest
space available for the stack the driver was
including zero-sized psects as 1-byte sized psects in
its calculations. This tended to "fragment" the
memory in this context and provide a smaller stack
than was possible.

Stack size warning (9.60PL1) The driver will now emit a
warning message if the space allocated for the stack
is less than 20 bytes. The choice of 20 bytes was
arbitrary. This new warning message has number 1245
and warning level 0.

Driver output options (9.60PL1) The following changes
have been made to the -o and --outdir options:
(a)The
-o option will now behave as documented in the manual
with the exception that all files generated before
link-time will also be emitted to the same location
specified to this option. This behavior is expected
by HI-TIDE and MPLAB.
(b)The --outdir option will
specify to the driver where all output files should
go including intermediates.
(c)If both -o and --outdir
are employed simultaneously with conflicting paths,
then all output generated at link-time and thereafter
will be emitted to the path and name specified by the
-o option. All other output will be directed to the
path specified by the --outdir option.

Stack and bit psects (9.60PL1) The driver was not
properly taking into account the size and location of
bit psects when calculating the size and position of
the stack. As a result bit psects and the stack could
potentially overlap in memory. This has now been corrected.

Reserving ydata (9.60PL1) When using the --ram option
to reserve memory in RAM the driver wouldn't also
reserve the affect ranges in the YDATA and YNEARDATA
linker classes. This has now been corrected. Note
that this did not affect compiling for target devices
which don't have a ydata region in RAM.

FCID Config word (9.60PL1) Updated the driver generated
linker options so that the __CONFIG macro can be used
to program the FICD config word (@ 0xF8000E) in the
dsPIC33 and PIC24H parts. Support for this config
word has also been included in the header file dspic.h.

Can't find 0x0 words for neary* psect (9.60PL1) This linker
error message would occur when compiling for a device
with a YDATA region too high to ever be near whilst
reserving RAM with the --ram option. This has now
been corrected.

Assertion `hi => lo` Failed (9.60RC2) With RC1 under some
rare circumstances this assertion would fail during
creation of start-up code by the driver. This has
been corrrected.

dspicc.ini Corrections (9.60RC2) Corrected erroneous
memory ranges found for some dsPIC33F devices in the
dspicc.ini file of RC1.

Missing NEARCODE Class (9.60RC2) With RC1 under some
rare circumstances the driver failed to instruct the
linker to define the NEARCODE psect class. This has
been corrected.

5.3 Chip configuration file

24HJ256GP210 (9.60PL1) The XDATA entry for this device
was 1FFF but should have been 3FFF.

PIC24H and ICD2 ranges (9.60PL1) A number of corrections
were required for some of the PIC24H XDATA ranges and
ICD2 reserved RAM ranges.

5.4 Parser

#pragma regused (9.60RC2) The previous release
candidate, RC1 improperly parsed this directive which
caused the code generator to give an "unknown register name"
   error for valid register names. This has been corrected.

5.5 Code Generator

lit5 out of range (9.60PL2) Some code sequences triggerd
an internal compiler error, lit5 out of range error.
This has now been corrected.

Direct switch code (9.60PL2) The algorithm used to
determine the best switch code was not handling
handling the "direct" switch case correctly.

Reading volatile variables (9.60PL1) When reading a
volatile variable (say in order to produce some
side-effect, e.g. PORTD;) the code generator would
not produce the assembly code to read its location.

Array assignment (9.60PL1) In some instances when
assigning a value to an array element indexed by a
global variable, the code generator would produce
code that would incorrectly index into the array.

Pragma regsused (9.60PL1) The purpose of this directive
is to instruct the compiler's code generator which
working registers (i.e. W0..W15) shouldn't be saved
and restored in an interrupt function. This directive
wasn't working properly.
Note however that under the
following circumstance it is possible for this
directive to be disrespected by the code generator.
In addition to the working registers, the code
generator will also emit code to save/restore
registers RCOUNT, AACA and AACB where necessary. To
do this it requires the use of one or two temporary
working registers. If the code generator cannot
allocate a temporary register(s) which respects the
context and the pragma regused it will use W0 or W1W0
to save/restore them accordingly.

Code generator crashes (9.60PL1) In some circumstances
the code generator would crash (due to a failed
assertion) when it encountered an implicit or
non-prototyped function invoked with an argument of
type long.

Non-prototypes functions returning bit (9.60PL1) The code
generator would emit an error message for
non-prototyped functions returning a bit value.

Function argument passing (9.60PL1) In certain
circumstances the code generator would mishandle the
passing of a function argument supplied via a
dereferenced pointer to a struct. This has been corrected.

Right shifting (unsigned long) -1 (9.60PL1) The code
generator would incorrectly calculate a right shift
of -1 cast as an unsigned long using a literal right
operand. This has been corrected.

Right shifting optimization (9.60PL1) Previously the
code generator would create code for the right shift
of a long object by 16 using an iterative process of
16 individual shifts. For such an operation this
excessive. The code generator will now (using mov's)
create code for these instances using much fewer instructions.

Functions returning bit CGC (9.60PL1) In certian
circumstances when a function which returns a bit is
used as part of the logical test of a conditional
branch, the code generator would emit a can't
generate code error. e.g.

extern bit foo(void);

void main(void){

if (foo())

    return 0;

else

    return 1;

}

Large (>256 byte) string literals (9.60PL1) The bytes in a
string literal > 256 bytes (including null
terminating character) after the 256th were being
improperly allocated in the const and mconst psects.

Address trap workaround (9.60PL1) Code emitted by the
code generator in an interrupt service routine for
the "Address Trap Workaround" would reference the
status register using the assembly label _SR. This
label would only be defined if the device header file
is included or defined by the user. Hence the linker
would emit an undefined symbol error if none of these
conditions were true. This reference in the
workaround assembly code has been replaced with the
appropriate literal address.

Dereferencing pointer fields in structs (9.60PL1) In some
circumstances assignment via a dereferenced pointer
in a struct would result in the actual pointer being
written to and not the address it references. This
has now been corrected.

Arithmetic expressions involving long objects CGC (9.60PL1)
In circumstances identified by customers, code for
arithmetic expressions involving objects of type long
(near and far) couldn't be generated by the compiler.
These have now been corrected.

Multiply defined symbol error in large memory model (9.60PL1)
When compiling for the large memory model, the code
generator failed to take into account the possibility
of more than one static function with the same name
but in separate modules. These function names are
used to create symbols for the jump tables and
function entry points. At link-time this can cause a
multiply defined symbol error. This problem has now
been corrected.

Comparison of indirectly addressed longs (9.60PL1) In some
circumstances where an indirectly addressed object of
type long is involved in a logical comparison, the
register containing its address would be altered.
This would cause a problem for the following code
which relied on the address in that register.

Comparison of chars (9.60PL1) In some rare circumstances
the code generator would emit syntactically invalid
assembly code for the comparison of char type objects.

Excessive shifts (9.60PL1) In some circumstances the
high-byte of a register containing a shift counter
wasn't being cleared which had the potential for
shifting operations to loop more than 255 times.

#pragma pack 1 (9.60PL1) This directive was not working
at all and its usage could cause the code generator
to emit a too many initializers error. This directive
is now working properly.

Floating-point comparison (9.60PL1) Should a
floating-point variable be allocated to the register
pair W2/W3 following a call to the floating-point
comparison routine flcmp, the sign of this variable
could change.

Byte assignments (9.60PL1) The code generator would in
some circumstances erroneously emit word based
instructions rather than byte based equivalents when
assigning a value to a byte-sized object.

Corrupt Stack (9.60RC1) A function taking 5 arguments,
the last of which is 2 bytes or smaller may use a
non-interrupt-safe sequence of instructions,
potentially causing stack corruption. This has been corrected.

Interrupt Context Restoration (9.60RC1) The code
generator will now place context restoring code at
the end of interrupt services routines before the
retfie instruction to restore where necessary working
registers w0 to w14, both accumulators (i.e. ACCA and
ACCB , but only for the dsPIC devices) and the repeat
counter register (RCOUNT). Previously the compiler
only restored working registers w0 to w8 and w14.

Interrupt Context Saving (9.60RC1) The code generator
will now place context saving code at the beginning
of interrupt services routines to preserve where
necessary working registers w0 to w14, both
accumulators (i.e. ACCA and ACCB , but only for the
dsPIC devices) and the repeat counter register
(RCOUNT). Previously the compiler only preserved
working registers w0 to w8 and w14.

Word Access (9.60RC1) In some uncommon instances when
accessing an array or bytes, a word-sized access was
done instead of a byte access. This has been fixed.

Far Object Problems (9.60RC2) A number of bugs
associated with the usage of far qualified objects
and pointers to same identified in RC1 have been fixed.

Invalid W Register Error (9.60RC2) With RC1 due to a
change in the build process which occurred at the
time of building and releasing 9.60RC1 a fault was
accidentally built into supplied the code generator
which could cause the given error. This has since
been corrected.

5.6 Assembler

Incorrect BRA removal (9.60PL2) A BRA instruction whose
destination was $+1 can usually be removed by the
optimizer. However, this is risky if the BRA
instruction is part of a jump table as this changes
the size of the table. In some cases the initial jump
into the table, jumped beyond the table entirely.
This has now been corrected.

Instruction Encoding (9.60RC1) In some of the more
complicated uses of some DSP instructions, the
instruction encoding was incorrect. There was also a
problem with the encoding of the table write (TBLWTH)
and do loop instructions. This has been fixed.

Misaligned Data Objects (9.60RC2) In order for objects
to be properly aligned within a psect that is defined
in more than one module it is necessary to "pad-out"
the psect in each module with zeros to the next
address which satisfies the psect's reloc value. This
behaviour didn't occur for some data psects with RC1.
The apparent affect in some instances was that
byte-sized objects in these psects failed to observe
a preceding alignment directive. This has been fixed.

5.7 Cromwell

Unknown qualifier T (9.60PL1) Cromwell would emit this
above error message in programs employing a fast
qualified interrupt function.

Invalid array message in MPLAB (9.60PL1) Under certain
circumstances the MPLAB watch window would report a
global array variable as invalid. In most cases this
has been corrected. However if an array is defined in
a module without any executable code (i.e. contains
no functions) then the MPLAB Watch Window will still
report the array as invalid. To work around this one can:

a) view the array contents in the File Registers window;

b) move the array definition to another module
containing executable code or vice versa;
c) add an
empty dummy function to the module.

5.8 Header files

RXIDE bit (9.60PL2) The SFR bit RXIDE was erroneously
named TXIDE in several registers in several device
header files.

dspic.h (9.60PL1)

* This file was missing macro definitions of vectors
for timers 8 and 9.

* Definitions for the trap vectors were missing.

Timer register bit names (9.60PL1) The names of timer
registers' bits in some header files were
inconsistent with the header files in for the dsPICC
v9.50, e.g. T1TON instead of T1ON.

dsPIC30F oscillator config bit settings (9.60PL1)
Definitions for oscillator configuration settings in
dspic.h for dsPIC30F devices was incomplete. These
definitions did not fully cover versions 1,2 and 3 of
the dsPIC30F oscillator system. Please be sure to
familiarize yourself with the changes in this file.

dsPIC30F1010/202x configuration settings (9.60PL1)
Definitions of the configuration words and settings
for these devices were missing from dspic.h. This has
been corrected. These devices have configuration
words and settings that are somewhat different to
their dsPIC30F peers. Therefore please be sure to
familiarize yourself with these definitions if they apply.

Individual device header file errors (9.60PL1)
Inconsistencies existed with the headers from dsPICC
v9.50. These have been corrected.

Additional configuration definitions (9.60PL1) Extra
configuration words and settings for the newer
dsPIC33F and PIC24H parts have been added to dspic.h.
These include: FBS @ F80000h (new word) RBS<7:6>,
BSS<3:1>, BWRP<0>; FSS @ F80002h (new word) RSS<7:6>,
SSS<3:1>, SWRP<0>; GSS @ F80004h (existing word) GSS
<2:1>; an additional setting in word FOSCSEL (@
F80006h) for the internal fast RC oscillator with
divide by 16. Refer to the header file (dspic.h) for
more details.

FICD Config. Word (9.60PL1) The #define for the
configuration word FICD has been designated FCOMM.
This definition still remains but to be consistent
with the datasheets it has also been duplicated with
the preprocessor symbol FICD.

Missing SFRs and bit-field name errors (9.60PL1) A number
of missing SFR's (especially those relating to CAN)
have been added to the chip specific header files.
Also a number of SFR and bit-field names have been
corrected so that they are more consistent with the datasheets.

UxSTA bit names (9.60PL1) The URXDA bit in the UxSTA
SFR's was erroneously named RCDA in dsPIC33 and
PIC24HJ header files.

dsPIC30F1010/202x corrections (9.60PL1) Corrections
have been made to the definitions relating to the
SFRs CNEN1, CNPU1, U1MODE, U1STA and PERIOD to better
reflect the datasheets.

5.9 Libraries

dspicc-??.lib (9.60PL1) These libraries were missing
the fast floating-point multiplication routine.

Floating-point input formats support (9.60PL1) Some of
the libraries supplied with the compiler were missing
the necessary modules to enable support for
floating-point input formats (such as with scanf).

5.10 Manual

Default type of char (9.60PL1) Pages 13 & 38 indicate
that the default type of char is unsigned. This is
incorrect. The default type of char is in fact signed.

--outdir driver option syntax (9.60PL1) The syntax for
this option as documented in the manual is a little
unclear. The correct syntax is: --outdir=_path_
where
_path_ can be any syntactically valid relative (to
the current working directory) or absolute path to an
existing location.

--output driver option (9.60PL1) The usage of this
option is not entirely clear in the manual. The
default compiler output format is COF and as a
side-effect Intel HEX. This option is used to change
the output format type in much the same way as the
--runtime option is used. That is, one can specify
additional output formats by using the '+' operator
or a single or multiple output formats,
e.g.
--output=bin will change the output format from COF
to BIN.
--output=+bin will add to the default output
format BIN, hence both a COF and BIN file will be produced.

--output=bin,cof will produce the same output formats
as the one above.

#pragma pack 1 (9.60PL1) In section 3.12.3.3 on page 66
the manual says "dsPIC and PIC24s can only perform
byte accesses to memory and so do not require any
alignment of memory objects. This pragma will have no
effect when used". Neither of these statements are
true and should be ignored.

1http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_235417.JPG

cyberjok 发表于 2008-3-21 12:11:03

关键要给下载啊~~~呵呵~~~

kspcb000 发表于 2008-5-24 23:11:42

路过,顶一下

Sean.com 发表于 2012-5-29 13:21:17

这类邮件应该删除
页: [1]
查看完整版本: Hi-Tech 发布dsPICC V9.60PL2支持Vista 64 位操作系统和新器件。