This release note describes the changes and new features of all TASKING TriCore products
since v2.0r1.
(The release notes of the previous TASKING TriCore VX-toolset v2.0r1 release can be
found in the readme_2_0r1.html document)
The following parts are described:
The main reasons for this release are:
As you may have noticed the letters VX are added to the name of this new TASKING TriCore toolset. VX is short for Viper eXperience, and it indicates that this toolset incorporates the new generation VIPER DSP-C compiler technology. This compiler has been developed in-house by Altium and offers true state-of-the-art code generation. Furthermore specific DSP optimizations have been added, so you will find an improved performance of the compiler in both generated code size and run-time speed.
The compiler offers full compliance with the latest ISO C 1999 standard, for instance the _Bool and long long data types are available and ready for use.
In our strive for being in accordance with the TriCore EABI (Embedded Application Binary Interface), we have introduced the ELF/DWARF 2 object format. This smoothes the integration with many third party products such as RTOS's, software libraries and debuggers. For this purpose the assembler and linker have been redesigned as well. The new linker comes with an enhanced Linker Script Language (LSL) that replaces the obsolete DEscriptive Language For Embedded Environments (DELFEE).
With the upgrade to the Viper technology it turned out to be not possible to maintain full backwards compatibility. However, we have included a migration tool to help you convert a project, originally set up for a previous TriCore toolset, to one that will build with this new toolset.
No new/changed features.
Byte and halfword parameters on the stack were misaligned in version v2.0r1 of the TriCore VX-toolset. This has been corrected in version v2.0r2. Please be aware that functions using byte and halfword parameters on the stack, cause incompatibility problems between versions v2.0r1 and v2.0r2 of the TriCore VX-toolset.
New silicon bug workarounds have been introduced:
The -A language extension option of the compiler has been modified. The "k"
suboption has been removed and the "x" suboption, relaxed const check for string
literals, has been added. Several bugfixes and improvements have been included within the
compiler. For example, value range tracking has been introduced and updates for pack2
and
saturated int
have been implemented.
No new/changed features.
This feature allows you to use arbitrary address ranges as group addresses in LSL. Full memory
ranges were already available with the simple mem : mem_name
.
A space address range is written as [ expr .. expr ]
,
a memory range as mem : mem_name [ expr .. expr
]
. As usual, it is possible to allow the linker to use multiple address ranges by
separating the ranges with |
. Furthermore, a space address range from a
certain offset till the end of the memory can be written as mem :
mem_name [expr ..]
.
group(ordered, run_addr = [0xA0000100..0xA0000200]) { ... } group(ordered, contiguous, run_addr=mem:mychip:internal_rom[0x0..0x100]) { ... } group(ordered, contiguous, run_addr=mem:ext_ram | [0x80010000..0x80020000] | mem:ext_ram2[0x0..0x30000]) { ... } group(ordered, contiguous, run_addr=mem:mychip:internal_rom[0x1000..]) { ... }
If the reserved
keyword is not used on a memory type, that memory is
available for the linker without any restriction. All sections can be
located into that memory.
If the reserved
keyword IS used on a memory, that memory is default
excluded from the locate algorithm. You can only locate into that memory by
locating sections explicitly. Explicit locating is done with one of the
following group types:
memory ext_c { type = reserved rom; // type = rom; mau = 8; size = 512k; map ( dest=bus:spe:fpi_bus, dest_offset=0xA0000000, size=512k ); }
The locate algorithm now supports locating single or multiple absolute sections into reserved areas.
To use this feature, do the following:
section_layout ::bar { group rsv (ordered, run_addr=256*1024*1024) { reserved "rsv1" (size=10); } group itm (ordered, run_addr=256*1024*1024) { select "s1"; } }
section_layout ::bar { group gtop (ordered) { select "s11"; select "s12"; select "s13"; group rsv (run_addr=mem:test:smallmem[3*16]) { reserved "rsv1" (size=1024+16+16+16+1024); } select "s21"; select "s22"; select "s23"; } group g_in_rsv (ordered, run_addr=mem:test:smallmem[3*16+1024..3*16+1024+48]) { select "s31"; select "s32"; select "s33"; } }
The -F and -s options have been removed, the -o option should be used instead.
-o [<filename>][:<format>[:<addr_size>][<,space_name>]]
--output=...
specify a task output object file
filename | the full filename to use; if not specified, the task's basename will be used with the default file extension for the format |
format | the file format (ELF,IEEE,IHEX,SREC); if not specified, the default format will be used |
addr_size | the size of addresses in bytes; supported values: 1, 2, and 4 for IHEX, 2, 3, and 4 for SREC; if not specified, the default address size for the format will be used |
space_name | the name of the address space to which hexfile the
filename applies; if not specified, the default hexfile
address space is used, other space hexfiles of the specified format get the name
<basename>_<spacename>.<extension> |
No new/changed features.
No new/changed features.
Copyright 2003 Altium BV