> I have just dug out an old version of PICC (version 7.85 with 7.86pl2 > patch). I would like > to know what had been fixed in version 7.87 and subsequent versions (maybe > up to > 8.0). I can not find any information in Hitech website. > > Does anyone have the release notes for PICC 7.87 and/or slightly later > version. I will > guess version 8.00 release notes will be good to have here as well. Here are the notes from 8.01: ------------------------------------------------------------------------------ HI-TECH PICC Compiler Bug fixes and limitations for v8.01PL3 DATE: 7 November 2002 Monitor www.htsoft.com for information on patches, and/or subscribe to our announcement mailing list - send email to announce-request@htsoft.com for more information. ------------------------------------------------------------------------------ Limitations: =========== - For Highend devices, a function cannot return a copy of structure which resides in ROM. - For Highend processors, certain indirect function calls with more than one byte of argument may produce incorrect code. - The argument list to printf or sprintf should not include function calls. For example, the following will not produce the desired result: printf("x = %f, sin(x) = %f\n", x, sin(x*3.141592/180.0)); This code demonstrates a workaround: y = sin(x*3.14592/180.0); printf("x = %f, sin(x) = %f\n", x, y); - The result of the sizeof preprocessor operator when applied to a pointer will always return 1. Use of the C sizeof operator will return the correct value. - 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 the union, initialization of the structure's bitfields will generate a compiler 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; unsigned char byte; } byte_or_bits; The following will give 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 }; - Functions which have variables declared within multiple blocks where code within the block requires the use of temporary memory may be get corrupted when compiled with global optimizations. A work around is to move the variable outside of the block. ------------------------------------------------------------------------------ Bugfixes: ======== Command Line Driver: ~~~~~~~~~~~~~~~~~~~ Fixed in version 8.01PL3: - When specifying a binary output file, the filename extension was incorrectly specified as ".hex". It is now ".bin". Fixed in version 8.00PL4: - Fixed bug when using the -RESROM option and an address of zero. Parser: ~~~~~~ Fixes in version 8.00PL4 - An error is now produced if an enumeration member is redeclared. Previously this caused the parser to hang or generate erroneous output. Code Generator: ~~~~~~~~~~~~~~ Fixed in version 8.01 - Fixed a problem with addition and subtraction of long's when the FSR register was involved. Fixed in version 8.00PL4 - With certain values using a "long" data type, addition and subtraction could give an inaccurate result. This has been fixed. Assembler: ~~~~~~~~~ Fixed in version 8.01: - Fixed a problem with a code merging optimization when applied to volatile objects. Fixed in version 8.00PL4: - Fixed a problem with the ORG directive which was causing a "Bad object file format" error. - Fixed problem with IRP directive followed by an assembler comment containing whitespace. Linker: ~~~~~~ Fixed in version 8.01PL1 - Fixed a bug which may have caused the linker to crash when displaying error messages. Libraries: ~~~~~~~~~ Fixed in version 8.01PL3 - Fixed a bug in the fast double math routines used by highend devices when there was a zero parameter. Header files: ~~~~~~~~~~~~ Fixed in version 8.01PL3 - Changed config mask definitions for all midrange/baseline devices so that the config. word canot exceed 3FFFh (midrange) and 0FFFh (baseline). Formerly configuration word values that exceeded these limits caused problems during hex file download on certain device programmers. - pic12f6x.h: Fixed PWTEN/DIS config mask definitions, also fixed EEPROM macro. - pic1672.h: Corrected config mask definitions relating to PWRTE bit. - pic1677x.h: Corrected config mask definitions for 16C770 and 16C771 devices. - pic169xx.h: ADIF/E bit corrected so defined for all devices in this file except the 16C923. - pic16f81x.h: Updated PIEx and OSCCON definitions. Volatile declarations added to some SFRs. Fixed in version 8.00PL4 - Typo corrected in pic1687x.h which affected PIC16F87xA devices. ------------------------------------------------------------------------------ -- http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist