TASKING VX-toolset for C166 v2.4r2
Release Note
Scope
This release note covers the changes between v2.3r1 and v2.4r2 of the TASKING VX-toolset for C166.
Contents
This section gives an overview of the most important new features and improvements in v2.4. See the sections with fixed issues for a complete list.
Device support synchronized
The device support has been synchronized in v2.4r2 with the latest state in the Microcontroller Pocket Guide 2010. Also new devices published after the release of the Pocket Guide have been added.
New series of devices that are added:
- XC22xxI, XC22xxL and XC22xxU
- XC23xxD, XC23xxE and XC23xxS
- XC27x2X, XC27x3X and XC27x7X
Added several missing devices to XC22xxN, XC23xxA, XC23xxB, XC23xxC, XC27x8X, XC27x6X, XE167FH and XE169FH series.
A few devices have been renamed for consistency reasons. You will need to update the processor selection for your project when using one of these devices.
Improved Map File Viewer in Eclipse
The map file viewer in Eclipse has been improved to make it easier to analyze the results of your build. The following improvements have been made:
- A calculator that displays totals of sizes and gaps of selected section on the status line
- Replace the tree view on top with a drop down list
- Support for showing gaps
- Support for highlighting sections
- Support for collapsing ranges of sections
- More and user configuratble columns with information from other parts of the map file in the sections table
- A hover pop-up that displays detailed information about a section in the sections table
- Better control in the call graph
- Previous and next table buttons
- Back and forward buttons
See the User Guide, section "13.2. Linker Map File Format" for a detailed description of the map file viewer
New C compiler Attribites: __attribute__((used)) and __attribute__((export))
Two new attributes have been added to the compiler:
Attribute | Description |
__attribute__((used)) | Prevent unreferenced objects from being removed by the compiler or linker. This replaces the #pragma protect, which becomes depricated. |
__attribute__((export)) | Indicates that not all uses of a variable/function can be known to the compiler during the mil-link phase. For example when a variable is referenced in an assembly file or a (third-party) library. |
Changed Control for Automatic Inlining
The automatic inlining optimization of the compiler can now be controlled with the --trade-off (-t) option.
This makes it easier to configure the optimizations for an application. The --inline-max-incr and --inline-max-size options are still available and can be used to overrule settings made by --trade-off.
In Eclipse the default values of the --inline-max-incr and --inline-max-size options is now empty, meaning that the --trade-off setting is used.
See the User Guide section "4.6.3. Optimize for Size or Speed" paragraph "Automatic Function Inlining" for details.
Improved Optimization
Several improvements to the optimization have been made:
119-36867 - Improvement of unreferenced object removal.The compiler now also removes initialized static unreferenced objects. To prevent the removal the "used" attribute can be used:
__attribute__((used)) static char id[] = "123456789";
119-37062 - Improved constant propagation. Most significant improvements can be expected when using MIL linking in combination with automatic inlining in the shuge and huge memory models.
119-37094 - Optimize dead stores on stack. Occasionally the compiler generates code for storing registers on stack while this is not necessary.
Option to Make Volatile Access Blocking for Optimizations
The behavior of a compiler with respect to optimization across volatile accesses is defined as implementation defined in the ISO-C '99 standard. With the new C compiler option -Av (--language=+volatile) you can control this behavior. By default the compiler has the same behavior as in previous versions and will optimize across volatile accesses. With the -Av or --language=+volatile option the compiler will make a volatile read or write access blocking for optimizations.
New Option and Pragma to Copy const Data from ROM to RAM
In v2.3r3 a new compiler option --ramdata and the #pragma ramdata are introduced, which can be used to force allocate static and global const variables in RAM. The initialization is done by copying the data from ROM to RAM, using the copy table, just like with any not const global or static initialized variable. The #pragma noramdata turns back to the normal behavior of putting const global and static variables only in ROM.
The option and pragmas allow you to put const variables into fast on-chip RAM.
New Option to Ignore the Memory Type for Automatics
Normally the compiler will not accept a memory type other then __near for automatic/parameter variables and will issue an error. The reason for this is that the user stack is always in near memory. In v2.3r3 the option --ignore-memory-type-for-automatics is introduced to let the compiler accept any memory type. The compiler will ignore the memory type and use __near instead.
CERT C Secure Coding Standard Checks Added.
The C compiler in the VX-toolset for C166 Premium Edition now has support for checking CERT C Secure Coding Standard rules and recommendations.
All level 1 checks that can be performed by a compiler without significantly impacting the compilation time are supported, as well as some checks
at other levels.
The compiler can check for the following rules and recommendations:
Category | Implemented Checks |
01. Preprocessor | PRE01, PRE02, PRE10, PRE11 |
02. Declarations and Initialization | DCL30, DCL31, DCL32, DCL35 |
03. Expressions | EXP01, EXP12, EXP30, EXP32, EXP33, EXP34, EXP37, EXP38 |
04. Integers | INT30, INT34, INT35 |
05. Floating Point | FLP30, FLP35, FLP36 |
06. Arrays | ARR01, ARR34, ARR35 |
07. Characters and Strings | STR30, STR33, STR34, STR36 |
08. Memory Management | MEM00, MEM08, MEM30, MEM31, MEM32, MEM33, MEM34, MEM35 |
10. Environment | ENV32 |
11. Signals | SIG30, SIG32 |
49. Miscellaneous | MSC32 |
See the CERT site for more information: https://www.securecoding.cert.org/confluence/display/seccode/CERT+C+Secure+Coding+Standard
Additional Features in Make Utility (amk)
The make utility, amk has been extended with several new features:
- Conditional preprocessor (if/ifdef/else) support.
- Output redirecting and appending using > and >>.
- Passing command line options in $(MAKE) for nested invocations of amk.
- Support for the automatic variable $*.
- New .INIT and .DONE targets.
- Support for static pattern rules.
- New makefile functions: foreach, filter-out, filter.
See for details the User Guide, section "9.3. Make Utility amk".
MCDS Support in Debugger
With v2.4r1 support for MCDS has been added to the debugger. To debug using MCDS the Hitex TantinoXC wiggler and MCDS drivers are required.
Support for DAP
With the installation on Windows a new version of DAS (v2.9.0) is installed. With this version the new Infineon MiniWiggler with support for DAP is supported.
For using DAP on the EasyKit boards the dip switches have to be set correctly (1,2 and 5 on; 3 and 4 off). In Eclipse you have to select "DAS over MiniWiggler" as communication method.
Stand-alone Script Debugger
Starting with v2.3r3 a new stand-alone debugger program is introduced, additionally to debugger that is integrated in the Eclipse environment. This stand-alone script debugger is not a complete debugger; facilities such as a register or a memory window are not available. Instead, its primary purpose is to run scripts created by the user for testing purposes.
More information can be found in the TASKING Script Debugger User Guide.
Improvements
- 119-37423 - Improve debug info at optimization level 0 by enabling coalescer
- 119-37484 - Add TC1 changes of the MISRA-C standard
- 119-37539 - amk: Allow leading space for directives
- 119-37611 - Add support for all XE166M devices
- 119-37707 - Bring device support in sync with Infineon Microcontroller PocketGuide 2010
New Features
- 119-37420 - add an option to generate a dependency file
- 119-37449 - Add an option to list all defined macros
- 119-37612 - Add feature to C compiler to dump header file tree
- 119-37668 - Add support for unnamed struct/unions
Fixed Problems
- 119-36026 - Wrong debug information for local variable
- 119-36541 - Debug option "Break on exit" has no effect
- 119-36650 - Incorrect debug information generated for __bit variables
- 119-37451 - implicit conversion from int to char shall allways trigger warning
- 119-37481 - MAC registers located in the ESFR space are pushed on the system stack without required EXTR instruction
- 119-37482 - The G flag is missing in the -A alias option.
- 119-37518 - Memory write scheduled over volatile access when -Av is enabled.
- 119-37526 - S917 assertion error
- 119-37535 - Wrong segment number accessed when writing to a huge struct member
- 119-37541 - S911 error when using function return as array size
- 119-37544 - c166 --help=k option does not list the __attribute__ keyword
- 119-37557 - Locate errors after applying a different page alignment on some sections
- 119-37573 - amk.exe: comparing two strings with ifeq does not work for strings with an even amount of characters
- 119-37575 - FASTBL bit missing in CPUCON2 in register files
- 119-37577 - S911, when a global is defined twice, once static
- 119-37579 - Overlay example address range incorrect
- 119-37606 - undeserved MISRA-C rule 7.1 violation for float constants: "octal constants (other than zero) shall not be used"
- 119-37607 - Incorrect DPP reference when using generic assembly code optimization
- 119-37633 - Wrong MAC opcodes generated for inline assembly
- 119-37654 - c166 E231: ["..\test.c" 14/10] expression must be constant
- 119-37655 - severe crash possible upon debugger termination
- 119-37656 - simulator hangs when setting bit 1 of register TFR
- 119-37659 - cannot place software breakpoints when working with DAS
- 119-37687 - --no-warnings overrules --warnings-as-error
- 119-37701 - flashing of external devices may not work
- 119-37702 - "lk166 F019: unrecoverable error: caught unknown exception" for flash chips with mau-size=16
- 119-37723 - Wrong return value for user stack R15 when dividing double zero by zero
- 119-37725 - Array index incorrectly calculated
- 119-37737 - Assembler generates wrong opcode for ST10 MAC shift instructions like __CoSHL
- 119-37752 - S911 error on specific code
- 119-37763 - AMK does not handle $(MACRO:.x=.y) correctly
- 119-37766 - Unexpected struct size for packed struct with bitfields
- 119-37791 - programming byte-programmable flash devices may fail
The list of open issues for v2.4r2 can be found on the internet.
Improvements
- 119-37334 - Update XC23xxB devices
- 119-37362 - Trigger warning message when project properties file is about to be overwritten
- 119-37375 - Don't lock a license at Eclipse startup
- 119-37400 - Update to DAS version 2.9.0
New Features
- 119-36093 - CR: show enum's value symbolically
- 119-36864 - amk: add a solution to pass command line options of amk to nested invocations
- 119-36867 - Remove unreferenced static variabels
- 119-36880 - amk: implement conditional preprocessor (if/ifdef/else) support in amk
- 119-37062 - constant propagation can be improved
- 119-37094 - Optimize dead stores on stack
- 119-37231 - Add SCA/CERT options to Eclipse
- 119-37232 - Support for SCA and CERT checks
- 119-37276 - allow passing arguments to dbg166
- 119-37309 - Add support for new DAP miniWiggler
- 119-37349 - Let volatile read and write operations block optimizations
- 119-37372 - MCDS Support
- 119-37373 - New __attribute__((export))
- 119-37374 - Eclipse map file viewer improvements
- 119-37379 - Add -Av compiler option to Eclipse
- 119-37345 - Add .INIT/.DONE targets to the generated makefile
- 119-37424 - Implement support for .INIT / .DONE targets
- 119-37425 - Output redirecting and appending in amk
- 119-37426 - amk: Add support for atuomatic variable $*
- 119-37427 - amk: implement static pattern rules
- 119-37428 - New makefile functions: foreach, filter-out, filter
Fixed Problems
- 119-35921 - Inside a member function the 'this' pointer is disabled
- 119-36115 - "Reload current application" does not work when using OCDS wiggler
- 119-36228 - Add the new-project C++ template, with option setting and custom LSL file
- 119-36531 - Link time increases with number of sections
- 119-36676 - Also accept # as line number directive
- 119-36735 - Wrong memory usage listed when a near page is filled up with (s)huge sections
- 119-36741 - E383: initializer element is not computable at load time
- 119-36763 - Disable MISRA-C checking in cstart.c
- 119-36765 - Undeserved MISRA-C 12.1 warnings
- 119-36769 - c166 E383: [...] initializer element is not computable at load time
- 119-36774 - Undeserved MISRA-C rule 10.3 violation
- 119-36778 - global-type-checking and assembler error
- 119-36791 - Compiler option "--near-threshold" not applied to external variables
- 119-36805 - fill field within a memory definition is not working
- 119-36813 - consider warning when starting second session for same launch config
- 119-36862 - Cannot locate initialized large huge sections (>64 Kb)
- 119-36873 - Add ELF support for more than 65279 sections in one file
- 119-36877 - Infineon DAvE '<project'> import failed
- 119-36886 - stack pointer released to early using option -stack-address-conversion=dynamic
- 119-36894 - clock function with FSS in simulator always yields -1
- 119-36914 - lk166 E163: ["_init.c" 25/17] "_lc_copy_table" redeclared with a different type
- 119-36948 - debugger expression evaluation is slow
- 119-36950 - Global type checking problem when using a linked folder
- 119-36994 - undeserved Eclipse syntax errors
- 119-37014 - Starting debugger for OCDS the first time fails
- 119-37026 - Unexpected Eclipse error markers on license problems
- 119-37028 - Manual correction for STLport C++ libraries
- 119-37040 - Can't verify the publisher of this driver software.
- 119-37041 - Minitask example does not build for XC2338B and others
- 119-37047 - Function clock.c does not return a meaningful timer tick in the Simulator
- 119-37048 - Need for function clock() for Dynamic Profiling on a target board not documented
- 119-37050 - Update --inline-max-incr and --inline-max-size option defaults
- 119-37053 - Profiling with the debugger (intrusive profiling) not implemented
- 119-37059 - Objects may be used externally when mil-linking is enabled
- 119-37060 - compiler does not remove unreferenced initialized static objects
- 119-37061 - compiler should add empty dependency line for all includes
- 119-37088 - No linker error when a rom data section cannot be located
- 119-37090 - Wrong address for near variable
- 119-37095 - lk166 E160 or E161: Failed to map the address [etc]
- 119-37101 - c166 S900: assertion failed at ../../c-type.c, line 388
- 119-37102 - On-line help not accessible from script debugger
- 119-37112 - Increasing link time when using many functions or function pointers
- 119-37136 - debugger malfunctions when using DAS
- 119-37183 - debugger may malfunction when call stack consists of more than 16 frames
- 119-37210 - MAC context not save in setjmp/longjmp
- 119-37213 - Reset value of EBCMOD0 for XC2000 incorrect
- 119-37215 - assembler --preprocess should honor -o option
- 119-37218 - Link error E821 might refer to incorrect overlapping memory area
- 119-37220 - Stack location overwritten when setjmp/longjmp is used
- 119-37230 - lk166 E104: inconsistent input file: link file cpnnw.obj uses float: double
- 119-37254 - full build may fail after single module is built
- 119-37303 - linker unnecessarily overlays two different sections on same address
- 119-37312 - Changing space for a reserved section in the LSL editor memory tab fails
- 119-37324 - building fails when imported project was built with toolset installed elsewhere
- 119-37344 - Control program does not pass the target cpu option -C to assembler file with --m166 option
- 119-37353 - Wrong RET instruction when using a function pointer inside an interrupt routine (user stack model)
- 119-37361 - LSL editor should not highlight keywords within double quotes
- 119-37369 - help text of -A option contains double descriptions
- 119-37371 - Remove the $c_environment control
- 119-37392 - set the priority for global initialization functions for STLport library routines
- 119-37395 - Intermediate conversion to __near * removed.
- 119-37397 - C++ files with .cxx extensions are not being build
- 119-37408 - Errors when running the Simulator: PSM can't overrule SFR 'ASC0_TBUF' on address 0xFEB0
- 119-37412 - lk166 E101: command line error: wrong address size for IHEX file, only 1,2, and 4 bytes addresses are supported
- 119-37448 - SFR headers: add whitespace between hexadecimal constant ending with an 'E' and added value
The list of open issues for v2.4r1 can be found on the internet.
New Features
- 119-34923 - Eclipse debugger cannot be started from the command line
- 119-36014 - Import/Export Project-Options of project settings
- 119-36686 - Support for XC22xxH, XC27x7X and XE16xxH
- 119-36729 - add option/pragma to allocate romdata sections in init sections
- 119-36896 - Support for XC22xxN, XC23xxB, XC27x4X and XE16xxN
- 119-36964 - Update DAS to v2.7.1
- 119-36983 - Add support for XC2000ED and EasyKit Board
Improvements
- 119-36608 - Add copy functionality to map file viewer
- 119-37386 - Multiple Base Addresses for Flash Chips
- 119-37387 - Generate a clean target in makefiles
Fixed Problems
- 119-35393 - Debugger works slowly
- 119-35512 - Debugger cannot handle soft reset (SRST) instruction
- 119-35906 - cp166 F1060: option "export" cannot be used with "implicit-include"
- 119-35920 - c166 E272: undeclared identifier "bitword"
- 119-36081 - When --warnings-as-errors is used eclipse shows warning, instead error marker
- 119-36102 - cp166 W0173: floating-point value does not fit in required integral type
- 119-36110 - Predefined macros for C++ compiler
- 119-36139 - restore memory view monitor's renderings after relaunch
- 119-36372 - cp166 E0349: ["../test.cpp" 12] no operator "=" matches these operands
- 119-36390 - The usage of "__asm" prevents the C++ compiler from inlining code
- 119-36416 - constant located at an absolute address optimized away by the C++ compiler
- 119-36419 - Keyword "const" is completely removed by the C++ compiler
- 119-36550 - specifying mirror address does not work
- 119-36617 - cstart.h values are written as 32 bit values by Target Board Configuration
- 119-36627 - Do not overwrite ELF file until linker finished successfully
- 119-36668 - Not allowed to declare an external interrupt function
- 119-36678 - change from "USB" to "JTAG0" in launch configuration
- 119-36695 - Make clear that type errors in linker can be switched off
- 119-36708 - Missing SFR's for Fast Interrupts EX0IN to EX5IN in XC164GM
- 119-36715 - Make it possible to clean a project from the command line
- 119-36722 - c166 S900: internal consistency check failed - please report
- 119-36724 - Debug information on code compaction functions is missing
- 119-36734 - __registerbank() does not overrule --no-frame
- 119-36748 - Wrong result when subtracting two far pointers
- 119-36759 - lk166 E121: relocation patch error in "task1": relocation value 0x1f5fe for.....
- 119-36764 - S900 error when MISRA-C rule 13.4 is enabled
- 119-36767 - as166 E704: Error but still an object file is generated
- 119-36779 - crash of type 0xc00000fd caused by taskingdebugger.exe
- 119-36781 - copy and clear areas can cross a page boundary
- 119-36784 - coco function called before it is copied to ram when using mil-linking
- 119-36792 - Make blink example work on XE164F U Connect
- 119-36794 - Undeserved typechecking error during mil-linking
- 119-36818 - Copy attribute applied to sections that were selected before
- 119-36824 - Wrong stack estimation on windows
- 119-36828 - c166 S911: internal consistency check failed - please report
- 119-36835 - Eclipse is keeping a license all the time
- 119-36855 - Missing W549: condition is always true
- 119-36858 - cstart editor complains about unresolved inclusions
- 119-36874 - Fix symbol callgraph (stack estimation) handling of __INDIRECT__ symbols
- 119-36876 - SCU register macros not defined correctly in sfr files
- 119-36900 - Incorrect debug info for optimized (emptied) cptable functions
- 119-36902 - Copy table functions optimization disabled when sections are grouped
- 119-36908 - java.lang.NullPointerException after pre-build step
- 119-36920 - Warning "W549: condition is always true/false" not always accurate
- 119-36932 - erroneous long -> __near * conversion from memory
- 119-36933 - Cannot print negative values using STL library
- 119-36934 - cannot malloc after free
- 119-36935 - Incorrect type for ptrdiff_t in huge memory model
- 119-36936 - c++ compiler uses 'int' type to store function pointers
- 119-36946 - erroneous conversion of far * --> int in memory
- 119-36947 - Conversion of long -> __iram/__bita * in memory not optimized anymore
- 119-36952 - --error-file option does not redirect error messages to a file
- 119-36953 - Add progress bar to map file viewer
- 119-36972 - Unexpected error when using a memory qualifier on a local variable
- 119-36998 - __SFRFILE__ does not follow --alternative-sfr-file option
- 119-37013 - lsl-expression evaluated erroneously
The list of open issues for v2.3r3 can be found on the internet.
Fixed Problems
- 119-35572 - marker does not always scroll into view
- 119-35814 - setting breakpoint fails because of prefix path in debug info
- 119-36384 - c166 S917: no pattern for MIL tree
- 119-36385 - C++ compiler assumes the sizeof(const char *) is size of 4 and should be 2
- 119-36516 - Files being build after option changes depend on filename case
- 119-36643 - Include directory shows up twice in project view
- 119-36664 - "#pragma endsection" removed from *.mil files
- 119-36665 - amk: no rule to make "Submap\file.obj"
- 119-36666 - MIL linking doesn't update the "Build Project" popup window
- 119-36672 - Setting folder specific settings does not work
- 119-36673 - Unsaved changes in cstart.c/.h persist in reopen
- 119-36674 - Unsaved changes in LSL editor persist in reopen
- 119-36681 - Base address of struct overwritten by its member value
- 119-36689 - Volatile read optimized away
- 119-36691 - Option --alternative-sfr-file is not passed nor recognized by the C++ compiler
- 119-36692 - New cstart.c/.h does not update existing files correctly
- 119-36694 - --constant-memory=__near and MIL linking must not be allowed
- 119-36697 - Missing bits in PLLCON0,1,3 in SFR files for XC2287M and derivatives
- 119-36702 - Improve compilation speed
- 119-36703 - Variable value not updated in Variables view
- 119-36705 - c166 S900: assertion failed at ../../c-symbol.c, line 791
- 119-36711 - Missing PLLCON0.NACK, PLLCON1.PACK, PLLCON3.K2ACK in XC2200M SFR Files
- 119-36712 - No longer existing processor gives strange Processor selection
- 119-36714 - Store the product version number in the project files
- 119-36718 - Sizeof not correctly calculated for a virtual function pointer
- 119-36720 - Internal error when enabling option and clicking Apply
- 119-36727 - build selected files builds twice when postbuild step is specified
- 119-36732 - PSRAM size 64k in lsl files of XC22xxM, XC23xxA, XC27x5X and XE16xFM must be 32k
- 119-36749 - Syntax error: expecting 'absolute', found 'ranged'
- 119-36751 - Improvement for Reserved properties at Section Layout
- 119-36753 - Compiling single file fails if mil-linking is used
The list of open issues for v2.3r2 can be found on the internet.
When using the product without a valid license, the tools will run in trial mode.
This means you can use the toolset 15 days with full functionality. When running in trial mode, each tool
will report the number of days left. When using a license that does not cover the full toolset, the tools
that are not covered by the license will run in trial mode.
When after installing the license file the tools that are covered by the license still report that they
are running in trial mode, this means that there is a license error. If you want to force the termination
of the trial mode to get the FLEXlm error message you can set the environment variable FORCE_NO_TRIAL
to "yes".
All TASKING products include the industry standard FLEXlm license management software. In order to be able
to run this toolset, you will need a license key, although you can use the full functionality during the 15
day trial period as described above. You can only obtain a license key if you have purchased this product.
To obtain a license key, you can start the License Administrator from the program group of your installed
TASKING toolset. In case you still need to install the toolset, you can start the License Administrator by
setting a check mark at the end of the setup/installation process. The wizard of the License Administrator
will guide you through the steps to obtain your license key.
Once you have received your license key from Altium, you can install it on your system by running the License
Administrator again. Alternatively you can simply save the license key as the file 'license.dat' in the
C:\FLEXLM folder on your PCs hard disk.
More information is available on http://www.tasking.com/support/flexlm. On this page you also
find assistance to setup a floating network license, or for installation on Linux or Sun systems.