Home

TriCore C Compiler, Assembler, Linker User`s Manual

image

Contents

1. Space Id MAU ELF sections linear 1 text bss data rodata table istack ustack abs24 2 abs18 3 Zdata zbss csa 4 csa Context Save Area pcp_code 8 16 pcptext pcp_data 9 32 pcpdata Table 7 5 TriCore address spaces The TriCore architecture in LSL notation The best way to program the architecture definition is to start with a drawing The following figure shows a part of the TriCore architecture space linear bus fpi_bus ee er eo gt gt space abs1 s cause id 3 width 32 mau 8 p gt AnS ea ni 256k id 1 8 mau Wet axe space pcp_code 0___ 0x04000000 mau 8 bus pcp_code_bus Figure 7 2 Scheme of part of the TriCore architecture The figure shows three address spaces called linear abs18 and pcp_code The address space abs18 is a subset of the address space linear All address spaces have attributes like a number that identifies the logical space id a MAU and an alignment In LSL notation the definition of these address spaces looks as follows 7 27 7 28 TriCore User s Manual space linear id 1 mau 8 map src_offset 0x00000000 dest_offset 0x00000000 size 4G dest bus fpi bus space abs18 id 3 mau 8 map src_offset 0x00000000 dest_offset 0x00000000 size 16k dest space linear map src_offset 0x10000000 dest_offset 0x10000000 size 16k dest space linea
2. 4 18 4 8 TriCore User s Manual ASSEMBLER DIRECTIVES AND CONTROLS An assembler directive is simply a message to the assembler Assembler directives are not translated into machine instructions There are three main groups of assembler directives Assembler directives that tell the assembler how to go about translating instructions into machine code This is the most typical form of assembly directives Typically they tell the assembler where to put a program in memory what space to allocate for variables and allow you to initialize memory with data When the assembly source is assembled a location counter in the assembler keeps track of where the code and data is to go in memory The following directives fall under this group Assembly control directives Symbol definition directives Data definition Storage allocation directives Debug directives Directives that are interpreted by the macro preprocessor These directives tell the macro preprocessor how to manipulate your assembly code before it is actually being assembled You can use these directives to write macros and to write conditional source code Parts of the code that do not match the condition will not be assembled at all Some directives act as assembler options and most of them indeed do have an equivalent assembler command line option The advantage of using a directive is that with such a directive you can overrule the assembler option
3. Table 1 1 Environment variables The following examples show how to set an environment variable using the PATH variable as an example Example for Windows 95 98 Add the following line to your autoexec bat file set PATH path c ctc bin amp You can also type this line in a Command Prompt window but you will loose this setting after you close the window Exambple for Windows NT 1 Right click on the My Computer icon on your desktop and select Properties from the menu Tbe System Properties dialog appears 2 Select the Environment tab Software Installation and Configuration 1 11 5 In the list of System Variables select Path In the Value field add the path where the executables are located to the existing path information Separate pathnames with a semicolon For example c ctc bin Click on the Set button then click OK Example for Windows XP 2000 1 Right click on the My Computer icon on your desktop and select Properties from the menu The System Properties dialog appears 2 Select the Advanced tab 3 Click on the Environment Variables button The Environment Variables dialog appears 4 In the list of System variables select Path 5 Click on the Edit button The Edit System Variable dialog appears 6 In the Variable value field add the path where the executables are located to the existing path information Separate pathnames with a semicolon For example c ctc bin
4. Start EDE e Double click on the EDE shortcut on your desktop OL Launch EDE via the program folder created by the installation program Select Start gt Programs gt TASKING toolchain gt EDE al Figure 2 3 EDE icon The EDE screen contains a menu bar a toolbar with command buttons one or more windows default a window to edit source files a project window and an output window and a status bar Project Options Compile Build Rebuild Debug On line Manuals Sil TASKING EDE Toolchain C target examples demo demo pit File Edit Search Project Build Text Document Customize Tools Window Help amp C target examples demo DEMO C include lt string h gt include lt stdio h gt C Marget examples demo psp demo 1 Project Ei demo 5 Files Project Window Contains several tabs for viewing information about projects and other files define BELL CHAR typedef enum color_e Document Windows Used to view and edit files red yellow blue type f struct rec_s Output Window Contains several tabs to display and manipulate results of EDE operations For example to view the results of builds or compiles A Fie Find A Search Browse A Difference A Shell A Symbols Ot fins Linell Cok 1 Figure 2 4 EDE desktop Getting Started 2 9 2 4 USING THE SAMPLE PROJECTS When you sta
5. If a library function declares a variable in near memory and you try to redeclare the variable in far memory the linker issues an error extern int _near foo extern int in near memory int _ far foo int in far memory TriCore C Language The usage of the variables is always without a storage specifier char _ near example example 2 The generated assembly would be movl6 d15 2 st b example d15 All allocations with the same storage specifiers are collected in units called sections The section with the __ near attribute will be located within the first 16 kB of of each 256 MB block With the linker it is possible to control the location of sections manually See Chapter 7 Linker 3 3 2 DECLARE A DATA OBJECT AT AN ABSOLUTE ADDRESS _at AND _ atbit Just like you can declare a variable in a specific part of memory you can also place an object at an absolute address in memory This may be useful to interface with other programs using fixed memory schemes or to access special function registers With the attribute __ at you can specify an absolute address Examples int myvar _ at 0x100 The variable myvar is placed at address 0x100 unsigned char Display 80 24 _ at 0x2000 The array Display is placed at address 0x2000 In the generated assembly an absolute section is created On this position space is reserved for the variable Display 3 14 TriCore User s Manual Res
6. The percent sign is similar to the standard decimal value operator except that it returns the hexadecimal value of a symbol Consider the following macro definition GEN_LAB MACRO LAB VAL STMT LABNSVAL STMT ENDM A symbol with the name NUM is set to 10 and the macro is called with NUM as argument NUM SET 10 GEN LAB HEX NUM NOP The macro expands as follows HEXA NOP The VAL argument is replaced by the character A which represents the hexadecimal value 10 of the argument VAL Argument String Operator To generate a literal string enclosed by single quotes you must use the argument string operator in the macro definition Consider the following macro definition STR MAC eMACRO STRING BYTE STRING ENDM 4 30 TriCore User s Manual The macro is called as follows STR_MAC ABCD The macro expands as follows BYTE ABCD Within double quotes DEFINE directive definitions can be expanded Take care when using constructions with quotes and double quotes to avoid inappropriate expansions Since a DEFINE expansion occurs before a macro substitution all DEFINE symbols are replaced first within a macro argument string DEFINE LONG short STR_MAC e MACRO STRING MESSAGE This is a LONG STRING MESSAGE This is a LONG STRING ENDM If the macro is called as follows STR MAC sentence The macro expands as MESSAGE This is a LONG STRING MESSAGE
7. first library first a a test o b a If the file test o calls a function which is both present in a a and b a normally the function in b a would be extracted With this option the linker first tries to extract the symbol from the first library a a amp Note that routines in b a that call other routines that are present in both a a and b a are now also resolved from a a Using the Linker 7 17 7 4 2 HOW THE LINKER SEARCHES LIBRARIES System libraries You can specify the location of system libraries specified with option D in several ways The linker searches the specified locations in the following order 1 The linker first looks in the directories that are specified in the Project Directories dialog L option If you specify the L option without a pathname the linker stops searching after this step 2 When the linker did not find the library because it is not in the specified library directory or because no directory is specified it looks which paths were set during installation You can still change these paths if you like d gt See environment variables LIBTC1V1_2 LIBTC1V1_3 and LIBTC2 in section 1 3 2 Configuring tbe Command Line Environment in Chapter Software Installation 3 When the linker did not find the library it tries the default 1ib directory which was created during installation or a processor specific sub directory User library If you use your own library the linker searches the l
8. For the three fractional types the promotion rules are similar to the promotion rules for char short int long and long long This means that for an operation on two different fractional types the smaller type is promoted to the larger type before the operation is performed When you mix a fractional type with a float or double type the fractional number is first promoted to float respectively double When you mix an integer type with the __ laccum type the integer is first promoted to __ laccum Because of the limited range of _ sfract and __ fract only a few operations make sense when combining an integer with an __ sfract or __ fract Therefore the TriCore compiler only supports the following operations for integers combined with fractional types left oper right result fractional integer fractional integer i fractional fractional fractional integer fractional fractional lt lt integer fractional TriCore C Language 3 7 left oper right result fractional gt gt integer fractional fractional __ sfract __ fract integer char short int long long long Table 3 3 Fractional operations for integers with fractional types 3 2 3 BIT DATA TYPE The TASKING TriCore C compiler cte additionally supports the bit data type Size Align Type Keyword bit bit Range Bit _ bit 8 8 Oor1 Table 3 4 Bit Data Type T
9. If you have more than one product using the FLEXIm license manager you can specify multiple license files to the LM_LICENSE_FILE environment variable by separating each pathname batb with a on UNIX Example Windows set LM_LICENSE_FILE c flexlm license dat c license txt Example UNIX setenv LM_LICENSE_FILE usr local flexlm licenses license dat myprod license txt If the license file is not available on these hosts you must set LM_LICENSE_FILE to port host where host is the host name of the system which runs the FLEXIm license manager and port is the TCP IP port number on which the license manager listens To obtain the port number look in the license file at Host for a line starting with SERVER The fourth field on this line specifies the TCP IP port number on which the license server listens For example setenv LM LICENSE FILE 7594 elliot See the FLEXIm PDF manual delivered with SW000098 which is present on each TASKING product CD for detailed information Software Installation and Configuration 1 4 5 HOW TO DETERMINE THE HOST ID The host ID depends on the platform of the machine Please use one of the methods listed below to determine the host ID Platform Tool to retrieve host ID Example host ID HP UX lanscan 0000F0050185 use the station address without the leading Ox Linux hostid 11ac5702 SunOS Solaris hostid 170a3472 Windows licadmin License Administrator
10. 7 Click on the OK button to accept the changes and close the dialogs Example for UNIX Enter the following line C shell setenv PATH S PATH usr local ctc bin 1 12 TriCore User s Manual 1 4 LICENSING TASKING PRODUCTS TASKING products are protected with license management software FLEXIm To use a TASKING product you must install the license key provided by TASKING for the type of license purchased You can run TASKING products with a node locked license or with a floating license When you order a TASKING product determine which type of license you need UNIX products only have a floating license Node locked license PC only This license type locks the software to one specific PC so you can use the product on that particular PC only Floating license This license type manages the use of TASKING product licenses among users at one site This license type does not lock the software to one specific PC or workstation but it requires a network The software can then be used on any computer in the network The license specifies the number of users who can use the software simultaneously A system allocating floating licenses is called a license server A license manager running on the license server keeps track of the number of users 1 4 1 OBTAINING LICENSE INFORMATION Before you can install a software license you must have a License Key containing the license information for your software product
11. Getting Started 2 13 7 Enter a new filename for example hello c and click OK A new empty file is created and added to the project Repeat steps 6 and 7 if you want to add more files 8 Click OK The new project is now open EDE loads the new file s in the editor in separate document windows EDE automatically creates a makefile for the project in this case getstart mak This file contains the rules to build your application EDE updates the makefile every time you modify your project Edit your files 9 As an example type the following C source in the hello c document window include lt stdio h gt void main void printf Hello World An 10 Click on the Save the changed file lt Ctrl S gt button LI EDE saves the file 2 14 TriCore User s Manual 2 6 SET OPTIONS FOR THE TOOLS IN THE TOOLCHAIN The next step in the process of building your application is to select a target processor and specify the options for the different parts of the toolchain such as the C and or C compiler assembler linker and debugger Select a target processor 1 From the Project menu select Project Options The Project Options dialog appears 2 Expand the Processor entry and select Processor Definition TriCore X toolset Project Options GETSTART PJT TETTING m i m MMU present 3 In the Target processor list select for example TC11IB 4 Click OK to ac
12. MA060 024 00 00 Doc ver 1 7 TriCore v2 5 C Compiler Assembler Linker User s Manual A publication of Altium BV Documentation Department Copyright 2002 2006 Altium BV All rights reserved Reproduction in whole or part is prohibited without the written consent of the copyright owner TASKING is a brand name of Altium Limited The following trademarks are acknowledged FLEXlm is a registered trademark of Macrovision Corporation Intel is a trademark of Intel Corporation Motorola is a registered trademark of Motorola Inc MS DOS and Windows are registered trademarks of Microsoft Corporation SUN is a trademark of Sun Microsystems Inc UNIX is a registered trademark of X Open Company Ltd All other trademarks are property of their respective owners Data subject to alteration without notice http www tasking com http www altium com The information in this document has been carefully reviewed and is believed to be accurate and reliable However Altium assumes no liabilities for inaccuracies in this document Furthermore the delivery of this information does not convey to the recipient any license to use or copy the software or documentation except as provided in an executed license agreement covering the software and documentation Altium reserves the right to change specifications embodied in this document without prior notice TABLE OF CONTENTS all TASKING M SLNALNOD Tab
13. hi 0x12345678 4 10 2 CALLING A MACRO To invoke a macro construct a source statement with the following format label macro name arg arg comment where label An optional label that corresponds to the value of the location counter at the start of the macro expansion macro name The name of the macro This must be in the operation field arg One or more optional substitutable arguments Multiple arguments must be separated by commas comment An optional comment 4 26 TriCore User s Manual The following applies to macro arguments Each argument must correspond one to one with the formal arguments of the macro definition If the macro call does not contain the same number of arguments as the macro definition the assembler issues a warning If an argument has an embedded comma or space you must surround the argument by single quotes You can declare a macro call argument as NULL in three ways enter delimiting commas in succession with no intervening spaces macroname ARG1 ARG3 the second argument is a NULL argument terminate the argument list with a comma the arguments that normally would follow are now considered NULL macroname ARG1 the second and all following arguments are NULL declare the argument as a NULL string No character is substituted in the generated statements that reference a NULL argument TriCore Assembly Language 4 10 3 USING OPERATORS FOR M
14. s Manual Copy table compression option Ot OT The startup code initializes the application s data and BSS areas The information about which memory addresses should be zeroed bss and which memory ranges should be copied from ROM to RAM is stored in the copy table When this optimization is enabled the linker will try to locate sections in such a way that the copy table is as small as possible thereby reducing the application s ROM image This optimization reduces both memory and startup time Delete unrefereuced sections option Oc OC This optimization removes unused sections from the resulting object file Because debug information normally refers to all sections this optimization has no effect until you compile your project without debug information or use linker option strip debug to remove the debug information Delete duplicate code sections option Ox OX Delete duplicate data sections option Oy OY These two optimizations remove code and constant data that is defined more than once from the resulting object file 7 3_ CALLING THE LINKER EDE uses a makefile to build your entire project This means that you cannot run only the linker However you can set options specific for the linker After you have built your project the output files of the linking step are available in your project directory unless you specified an alternative output directory in the Build Options dialog To link your
15. 722 PHase2cLocatihgu cu ey Gy ae ants RY ee wes 7 7 7 2 3 Linker Optimizations V YF YF Y AU 7 9 7 3 Callingsthe Linker ae 0344 GO a eke ea 7 10 7 4 Linking with Libraries 2 0 00 00 eee 7 14 7 4 1 Specifying Libraries to the Linker 7 15 742 How the Linker Searches Libraries 7 17 7 4 3 How the Linker Extracts Objects from Libraries 7 17 7 5 Incremental Linking 0 ee eee 7 18 7 6 Linking the C Startup Code VV Y 00005 7 19 77 Controlling the Linker with a Script 7 20 TM Purpose of the Linker Script Language 7 20 772 BIDE Ans lS Lace cen Go ddn dd Y pee A 7 21 Tid Structure of a Linker Script File 000 7 22 7 74 The Architecture Definition Self Designed Cores 7 26 7 7 5 The Derivative Definition Self Designed Processors 7 29 7 7 6 The Memory Definition Defining External Memory 7 31 7 7 7 The Section Layout Definition Locating Sections 7 33 7 7 8 The Processor Definition Using Multi Processor SYSTEMS you fF chase eke Oa NE a HG SEAR 7 37 Table of Contents 7 8 Linker Labels 4 aeree cate soe pada a aes ae ed 7 38 7 9 Generating a Map File uaaa ee 7 41 7 10 Linker Error Messages 0 0000 aU 7 42 USING THE UTILITIES 8 1 8 1 Introduction gwa yw GG A eed habe Uy AN 8 3 8 2 Control Program ss Gy eae faa awe Ee 8 4 821 Calling the Control Program YAA 8 4 83 Make Util
16. CCPN An interrupt service routine can be interrupted again by another interrupt request with a higher priority Interrupts with priority number 0 are never handled 3 34 TriCore User s Manual A trap service routine or trap function or trap handler is called when a trap event occurs This is always an event generated within or by the application For example a devide by zero or an invalid memory access With the following function qualifiers you can declare an interrupt handler or trap handler _ interrupt interrupt fast __trap __trap fast There is one special type of trap function which you can call manually the system call exception trap class 6 See section 2 9 2 3 Defining a Trap Service Routine Class 6 __syscallfunc During the execution of an interrupt service routine or trap service routine the system blocks the CPU from taking further interrupt requests With the following keywords you can enable interrupts again immediately after an interrupt or trap function is called __enable_ _ bisr _ 3 9 2 1 DEFINING AN INTERRUPT SERVICE ROUTINE d gt Interrupt functions cannot accept arguments and do not return anything void _ interrupt vector isr void The argument vecior identifies the entry into the interrupt vector table 0 255 Unlike other interrupt systems the priority number PIPN of the interrupt now being serviced by the CPU identifies the entry into the vector
17. This is a short sentence Single guotes prevent expansion so the first MESSAGE is not stated as is In the double guoted MESSAGE first the define LONG is expanded to short and then the argument STRING is substituted by sentence Macro Local Label Override Operator If you use labels in macros the assembler normally generates another unique name for the labels such as LAB__M L0000001 The macro operator prevents name mangling on macro local labels Consider the following macro definition INIT MACRO ARG CNT LD W DO 1 LAB BYTE ARG JNEI DO fFCNT LAB ENDM TriCore Assembly Language 4 31 The macro is called as follows INIT 2 4 The macro expands as LD W DO 1 LAB BYTE 2 JNEI DO 4 LAB Without the operator the macro preprocessor would choose another name for LAB because the label already exists The macro then would expand like LD W DO 1 LAB M L000001 BYTE 2 JNEI D0 4 LAB_ M L000001 4 10 4 USING THE DUP DUPA DUPC DUPF d gt DIRECTIVES AS MACROS The DUP DUPA DUPC and DUPF directives are specialized macro forms to repeat a block of source statements You can think of them as a simultaneous definition and call of an unnamed macro The source statements between the DUP DUPA DUPC and DUPF directives and the ENDM directive follow the same rules as macro definitions For a detailed description of these directives see section 3 3 Assembl
18. automatically halfword 2 bytes packed Structures and unions that are divisible by 64 bit or contain members that are divisible by 64 bit are word packed to allow efficient access through LD D and ST D instructions These load and store operations require word aligned structures that are divisible by 64 bit If necessary 64 bit divisible structure elements are aligned or padded to make the structure 64 bit accessible With pragma pack 2 you can disable the LD D ST D structure and union copy optimization to ensure halfword structure and union packing when possible This limited halfword packing only supports structures and unions that do not contain double circular buffer __ laccum or pointer type members and that are not qualified with pragma align to get an alignment larger than 2 byte With pragma pack 0 you turn off halfword packing again pragma pack 2 typedef struct unsigned char ucl unsigned char uc2 unsigned short usl unsigned short us2 unsigned short us3 packed_struct pragma pack 0 3 10 TriCore User s Manual When you place a pragma pack O before a structure or union its alignment will not be changed pragma pack 0 packed struct pstruct The alignment of data sections and stack can also affect the alignment of the base address of a halfword packed structure A halfword packed structure can be aligned on a halfword boundary or larger alignment When located on the stack or at the begi
19. depending on the e setting it may be overridden by a makefile definition Exit status The make utility returns an exit status of 1 when it halts as a result of an error Otherwise it returns an exit status of 0 Options of the make utility The following make utility options are available Description Option Display options Display version header V Verbose Print makefile lines while being read D DD Display time comparisons which indicate a target is out of date d dd Display current date and time time Verbose option show commands without executing dry run n Do not show commands before execution s Do not build only indicate whether target is up to date q 8 12 TriCore User s Manual Description Option Input files Use makefile instead of the standard makefile makefile f makefile Change to directory before reading the makefile G path Read options from file m file Do not read the mktc mk file r Process Always rebuild target without checking whether it is out of date a Run as a child process C Environment variables override macro definitions e Do not remove temporary files K On error only stop rebuilding current target k Overrule the option k only stop rebuilding current target S Make all target files precious p Touch the target files instead of rebuilding them t Treat target as if it has just been reconstructed W target Error messages Re
20. 0060084dfbe9 or use Imhostid Table 1 2 Determine the host ID On Windows the License Administrator licadmin helps you in the process of obtaining your license key amp If you do not have the program licadmin you can download it from our Web site at http www tasking com support flexlm licadmin zip It is also on every product CD that includes FLEXlm in directory licensing 1 4 6 HOW TO DETERMINE THE HOST NAME To retrieve the host name of a machine use one of the following methods Platform Method UNIX hostname Windows NT licadmin or Go to the Control Panel open Network In the Identification tab look for Computer Name Windows XP 2000 licadmin or Go to the Control Panel open System In the Computer Name tab look for Full computer name Table 1 3 Determine the bost name 1 18 INSTALLATION TriCore User s Manual GETTING STARTED all TASKING M daldVHD Getting Started 2 3 2 1 INTRODUCTION With the TASKING TriCore suite you can write compile assemble link and locate applications for the several TriCore cores The TASKING TriCore suite conforms to Infineon s TriCore Embedded Applications Binary Interface EABI which defines a set of standards to ensure interoperability between software components Embedded Development Environment The TASKING Embedded Development Environment EDE is a Wind
21. 10 processor definition 7 23 7 37 project 2 7 add new files 2 12 create 2 11 project file 2 7 project space 2 7 create 2 9 project space file 2 7 Index Q Quality assurence report 5 18 rebuilding libraries 3 52 register allocator 5 5 registers 4 5 4 8 relocatable object file 7 3 debug information 7 6 header information 7 6 object code 7 6 relocation information 7 6 symbols 7 6 relocation expressions 7 7 reserved symbols 4 8 return decimal value operator 4 28 return hex value operator 4 29 S saturation 3 18 scanf formatter 3 50 scanner 5 4 section 3 44 section alignment 3 46 section all 3 44 section code_init 3 45 section data_overlay 3 45 section layout definition 7 24 7 33 section names 3 43 section name_with module 3 45 section name_with symbol 3 45 section per data_object 3 45 sections 3 43 4 22 absolute 4 23 activation 4 22 Index Index 9 cleared 4 23 definition 4 22 SIMD optimizations 5 8 software installation Linux 1 4 UNIX 1 6 Windows 95 98 XP NT 2000 1 3 software pipelining 5 8 stack model 3 40 startup code 7 19 statement 4 3 storage types See memory qualifiers string substring 4 11 subscript strength reduction 5 7 substring 4 11 switch auto 3 47 jumptab 3 47 linear 3 47 lookup 3 47 restore 3 47 switch optimization 5 7 switch statement 3 47 symbol 4 8 predefined 4 8 syntax of an
22. 24 4 10 2 Calling A Macro y de teed ee hese oe Oh 4 25 4 10 3 Using Operators for Macro Arguments 4 27 4 10 4 Using the DUP DUPA DUPC DUPF Directives as Macros su adds gu ba ced cad Sa GAY aes 4 31 4 10 5 Conditional Assembly IF ELIF and ELSE Directives 4 31 USING THE COMPILER 5 1 5 1 TntrocucHOn a 23 4 cae dates Ra ei GAGA SERS RE FN 5 3 5 2 Compilation Process 00 0 0 teas 5 4 5 3 Compiler Optimizations 0 0 0 0 aa 5 5 5 3 1 Optimize for Size or Speed 1 00 0 00 5 9 5 4 Calling the Compiler Y YF ua 5 10 5 5 How the Compiler Searches Include Files 5 16 5 6 Compiling for Debugging 0 0 0 000 ee 5 16 5 7 C Code Checking MISRA C eee 5 17 5 8 C Compiler Error Messages 0000s YY RAD 5 19 VII VIII Table of Contents USING THE ASSEMBLER 6 1 6 1 Introduction ca faite aw Bwy RAGES lees 6 3 6 2 Assembly Process 00 00 0000 cee ns 6 3 6 3 Assembler Optimizations 00 000000 O 6 4 6 4 Calling the Assembler oposa ai prian Aea hA A 6 5 6 5 Specifying a Target Processor 00 000 uag 6 8 6 6 How the Assembler Searches Include Files 6 9 6 7 Generating a List File Y aa 6 9 6 8 Assembler Error Messages V eee 6 10 USING THE LINKER 7 1 71 Introduction ae UG Y bb YA da DAL 7 3 7 2 Linking Proc SS eu iie eines stones HN Eos oS 7 4 od Phoe T Linking ae Sin 604 MS Tb RW dd 7 6
23. A F a f 0x9abc Decimal rr 12 integer Decimal digits 0 9 1245 6E10 Decimal Includes a decimal point or an E or e 6 floating point followed by the exponent 3 14 2 7e10 TriCore Assembly Language 4 11 4 6 2 STRINGS ASCII characters enclosed in single or double quotes constitue an ASCII string Strings between double quotes allow symbol substitution by a DEFINE directive whereas strings between single quotes are always literal strings Both types of strings can contain escape characters Strings constants in expressions are evaluated to a number each character is replaced by its ASCII value Strings in expressions can have the size of a long word first 4 characters or less depending on the operand of an instruction or directive any subsequent characters in the string are ignored In this case the assembler issues a warning An exception to this rule is when a string longer than 4 characters is used in a BYTE assembler directive in that case all characters result in a constant byte Null strings have a value of 0 Square brackets D delimit a substring operation in the form string offset length offset is the start position within string length is the length of the desired substring Both values may not exceed the size of string Examples ABCD 0x41424344 11179 to enclose a quote double it AN BC or to enclose a quote escape it AB 1 0x00004143 string
24. Diagnostics mktc returns an exit status of 1 when it halts as a result of an error Otherwise it returns an exit status of 0 Macro definitions A macro is a symbol name that is replaced with it s definition before the makefile is executed Although the macro name can consist of lower case or upper case characters upper case is an accepted convention The general form of a macro definition is 8 18 TriCore User s Manual MACRO text and more text Spaces around the egual sign are not significant To use a macro you must access it s contents MACRO you can read this as S MACRO the contents of macro MACRO If the macro name is a single character the parentheses are optional Note that the expansion is done recursively so the body of a macro may contain other macros These macros are expanded when the macro is actually used not at the point of definition FOOD EAT and DRINK EAT meat and or vegetables DRINK water export FOOD The macro FOOD is expanded as meat and or vegetables and water at the moment it is used in the export line Predefined Macros MAKE Holds the value mktc Any line which uses MAKE temporarily overrides the option n Show commands without executing just for the duration of the one line This way you can test nested calls to MAKE with the option n MAKEFLAGS Holds the set of options provided to mktc except for the options f and d If this macro is exported to s
25. EE When you want to link system libraries from the command line you must specify this with the linker option 1 With the option lc you specify the system library libc a For example ltc lc start o Link a user library in EDE To specify your own libraries you have to add the library files to your project 1 From the Project menu select Properties The Project Properties dialog box appears 2 In the Members tab click on the Add existing files to project button 7 16 TriCore User s Manual 3 Select the libraries you want to add and click Open 4 Click OK to accept the new project settings EE The invocation syntax on the command line is for example ltc start o mylib a If the library resides in a subdirectory specify that directory with the library name ltc start o mylibsAmylib a Library order The order in which libraries appear on the command line is important By default the linker processes object files and libraries in the order in which they appear on the command line Therefore when you use a weak symbol construction like print in an object file or your own library you must position this object library before the C library With the option first library first you can tell the linker to scan the libraries from left to right and extract symbols from the first library where the linker finds it This can be useful when you want to use newer versions of a library routine Example ltc
26. Floating point library non trapping with FPU instructions Compiler option fpu present libfpt_fpu a Floating point library trapping with FPU instructions Control program option fp trap compiler option fpu present librt a Run time library Table 7 4 Overview of libraries d gt For more information on these libraries see section 3 12 Libraries in Chapter 7riCore C Language When you want to link system libraries you must specify this with the option I With the option lc you specify the system library libc a Using the Linker 7 15 User library You can also create your own libraries Section 8 4 Archiver in Chapter Using the Utilities describes how you can use the archiver to create your own library with object modules To link user libraries specify their filenames on the command line 7 4 1 SPECIFYING LIBRARIES TO THE LINKER In EDE you can specify both system and user libraries Link a system library with EDE To specify to link the default C libraries 1 From the Project menu select Project Options The Project Options dialog box appears 2 Expand the Linker entry and select Libraries Select Link default C libraries Select a floating point library non trapping or trapping o Re o Optional Add the name part of the system libraries to the Libraries field For example enter c to specify the system library libc a 6 Click OK to accept the linker options
27. Oi OI Small functions that are not too often called are inlined This reduces execution time at the cost of code size Control flow simplification option Of OF A number of techniques to simplify the flow of the program by removing unnecessary code and reducing the number of jumps For example Switch optimization A number of optimizations of a switch statement are performed such as removing redundant case labels or even removing an entire switch Jump chaining A conditional jump to a label which is immediately followed by an unconditional jump may be replaced by a jump to the destination label of the second jump This optimization speeds up execution Conditional jump reversal A conditional jump over an unconditional jump is transformed into one conditional jump with the jump condition reversed This reduces both the code size and the execution time Dead code elimination Code that is never reached is removed The compiler generates a warning messages because this may indicate a coding error Subscript strength reduction option Os OS An array of pointer subscripted with a loop iterator variable or a simple linear function of the iterator variable is replaced by the dereference of a pointer that is updated whenever the iterator is updated Loop transformations option Ol OL Temporarily transform a loop with the entry point at the bottom to a loop with the entry point at the top This enables const
28. Server to get your licenses If you already have installed FLEXIm v8 4 or higher for example as part of another product you can skip this step and continue with step 4 Otherwise install SW000098 the Flexible License Manager FLEXlm on the license server where you want to use the license manager It is not recommended to run a license manager on a Windows 95 or Windows 98 machine Use Windows XP NT or 2000 instead or use UNIX or Linux If FLEXIm has already been installed as part of a non TASKING product you have to make sure that the bin directory of the FLEXIm product contains a copy of the Tasking daemon This file part of the TASKING product installation and is present in the 1ex1m subdirectory of the toolchain This file is also on every product CD that includes FLEXlm in directory licensing On the license server also add the license key to the license file Follow the same instructions as with Add a license key to a local license file in step 2 See the FLEXIm PDF manual delivered with SW000098 which is present on each TASKING product CD for more information 1 16 TriCore User s Manual 1 4 4 MODIFYING THE LICENSE FILE LOCATION db The default location for the license file on Windows is c flexlm license dat On UNIX this is usr local flexlm licenses license dat If you want to use another name or directory for the license file each user must define the environment variable LM_LICENSE_FILE
29. TASKING TriCore C compiler ctc additionally supports the following packed types Size Align Type Keyword bit bit Ranges Packed packb 97 97_ signed p k 32 16 4x 2 2 1 unsigned _ packb 32 16 4x 0 28 1 packhw lt 915 915_ sioned pamcne 32 16 2x 2 9 2 9 1 unsigned __packhw 32 16 2x 0 216 4 Table 3 5 Fractional Data Types A __ packb value consists of four signed or unsigned char values A __ packhw value consists of two signed or unsigned short values The TriCore instruction set supports a number of arithmetic operations on packed data types directly For example the following function __packb add4 _ packb a _ packb b return a b TriCore C Language 3 9 results into the following assembly code add4 add b d2 d4 d5 retl6 amp Section 3 5 Intrinsic Functions explains intrinsic functions Section 1 5 3 Packed Data Type Support in Chapter TriCore C Language of the Reference Manual lists the intrinsic functions Halfword Packed Unions and Structures To minimize space consumed by alignment padding with unions and structures elements follow the minimum alignment requirements imposed by the architecture The TriCore arichitecture supports access to 32 bit integer variables on halfword boundaries Because only doubles circular buffers __laccum or pointers require the full word access structures that do not contain members of these types are
30. User s Manual 5 2 COMPILATION PROCESS During the compilation of a C program the compiler cte runs through a number of phases that are divided into two groups frontend and backend The backend part is not called for each C statement but starts after a complete C module or set of modules has been processed by the frontend in memory This allows better optimization The compiler requires only one pass over the input file which results in relative fast compilation Frontend phases 1 The preprocessor phase The preprocessor includes files and substitutes macros by C source It uses only string manipulations on the C source The syntax for the preprocessor is independent of the C syntax but is also described in the ISO IEC 9899 1999 E standard 2 The scanner phase The scanner converts the preprocessor output to a stream of tokens 3 The parser phase The tokens are fed to a parser for the C grammar The parser performs a syntactic and semantic analysis of the program and generates an intermediate representation of the program This code is called MIL Medium level Intermediate Language 4 The frontend optimization phase Target processor independent optimizations are performed by transforming the intermediate code Using the Compiler 5 5 Backend phases 5 Instruction selector phase This phase reads the MIL input and translates it into Low level Intermediate Language LIL The LIL objects corres
31. and off chip memory devices are available the code and data located in internal memory is typically accessed faster and with dissipating less power To improve the performance of an application specific code and data sections should be located in on chip memory By writing your own LSL file you gain full control over the locating process The underlying hardware architecture of the target processor To perform its task the linker must have a model of the underlying hardware architecture of the processor you are using For example the linker must know how to translate an address used within the object file a logical address into an offset in a particular memory device a physical address In most linkers this model is hard coded in the executable and can not be modified For the Ite linker this hardware model is described in the linker script file This solution is chosen to support configurable cores that are used in system on chip designs Using the Linker 7 9 When you want to write your own linker script file you can use the standard linker script files with architecture descriptions delivered with the product d gt See also section 7 7 Controlling the Linker with a Script 7 2 3 LINKER OPTIMIZATIONS During the linking and locating phase the linker looks for opportunities to optimize the object code Both code size and execution speed can be optimized To enable or disable optimizations 1 From the Project menu sel
32. and setting CPU priority number The function qualifier __bisr_ also re enables the system to accept interrupt requests In addition the current CPU priority number CCPN in the interrupt control register is set _ interrupt vector _ bisr_ CCPN isr void __trap class _ bisr CCPN tsr void TriCore C Language The argument CCPN is a number between 0 and 255 The system accepts all interrupt requests that have a higher pending interrupt priority number PIPN than the current CPU priority number So if the CPU priority number is set to 0 the system accepts all interrupts If it is set to 255 no interrupts are accepted The compiler generates a bisr instruction as first instruction in the routine The bisr instruction sets the interrupt enable bit ICR IE and the current CPU priority number ICR CCPN in the interrupt control register You can also generate the bisr instruction with the __bisr intrinsic function but it is not guaranteed that it will be the first instruction in the routine Setting the CPU priority number in a Class 6 trap service routine The bisr instruction saves the lower context so passing and returning arguments is not possible Therefore you cannot use the function qualifier __bisr_ for class 6 traps Instead you can use the function qualifier __ enable_ to set the ICR IE bit and the intrinsic function _ mtcr int int to set the ICR CCPN value at the beginning of a class 6 trap service r
33. any combination of integers floating point numbers or ASCII literal strings Expressions follow the conventional rules of algebra and boolean arithmetic Expressions that can be evaluated at assembly time are called absolute expressions Expressions where the result is unknown until all sections have been combined and located are called relocatable or relative expressions 4 10 TriCore User s Manual When any operand of an expression is relocatable the entire expression is relocatable Relocatable expressions are emitted in the object file and are evaluated by the linker Relocatable expressions can only contain integral functions floating point functions and numbers are not supported by the ELF DWARF object format The assembler evaluates expressions with 64 bit precision in two s complement The syntax of an expression can be any of the following numeric contant string symbol expression binary_operator expression wunary_operator expression expression function call All types of expressions are explained in separate sections 4 6 1 NUMERIC CONSTANTS Numeric constants can be used in expressions If there is no prefix the assembler assumes the number is a decimal number Base Description Example cr 0B1101 Binary OB or Ob followed by binary digits 0 1 0611001010 OX or Ox followed by a hexadecimal 0X12EF Hexadecimal N 0x45 digits 0 9
34. archiver 8 23 ELF DWARF2 format 7 8 Embedded Development Environment 2 3 environment variables 1 9 ASPCPINC 1 9 ASTCINC 1 9 CCTCBIN 1 9 CCTCOPT 1 9 8 8 CTCINC 1 9 LIBTCIV1_2 1 10 LIBTCIV1 3 1 10 LIBTC2 1 10 LM _LICENSE FILE 1 10 1 16 PATH 1 9 TASKING_LIC_WAIT 1 10 TMPDIR 1 10 error messages assembler 6 10 compiler 5 19 linker 7 42 expression simplification 5 6 expressions 4 9 absolute 4 9 relative 4 9 relocatable 4 9 Index Index 5 F file extensions 2 6 first fit decreasing 7 9 fixed point specifiers 3 50 floating license 1 12 flow simplification 5 7 formatters printf 3 50 scanf 3 50 forward store 5 7 fractional data types operations 3 6 frontend compiler phase 5 4 optimization 5 4 function 4 14 syntax 4 14 function qualifiers __bisr_ 3 38 _ enable 3 38 _ indirect 3 39 __interrupt 3 34 __stackparm 3 40 _ syscallfunc 3 37 _ trap 3 35 functions 3 31 host ID determining 1 17 host name determining 1 17 IF conversion 5 8 include files default directory 5 16 6 9 7 17 setting search directories 1 7 1 9 incremental linking 7 18 inline assembly _ asm 3 20 writing intrinsics 3 25 inline functions 3 31 inlining functions 5 7 input specification 4 3 installation licensing 1 12 Linux 1 4 Debian 1 5 RPM 1 4 tar gz 1 5 UNIX 1 6 Windows 95 98 XP NT 2000 1 3 instruction scheduler 5 8 instructions 4 4 Intel Hex fo
35. are placed in address spaces relative to each other and what their absolute run time and load time addresses will be To illustrate section placement the following example of a C program is used Example section propagation through the toolchain To illustrate section placement the following example of a C program bat c is used The program saves the number of times it has been executed in battery back upped memory and prints the number 7 34 TriCore User s Manual define BATTERY BACKUP TAG Oxa5f0 include lt stdio h gt int uninitialized data int initialized data 1 pragma section all non volatile pragma noclear int battery backup tag int battery backup invok pragma clear pragma section all void main void if battery backup_ tag BATTERY BACKUP TAG battery back upped memory area contains invalid data initialize the memory battery_ backup tag BATTERY_BACKUP_TAG battery_backup_invok 0 printf This application has been invoked d times n battery backup invok The compiler assigns names and attributes to sections With the pragma section all name the compiler s default section naming convention is overruled and a section with the name non_volatile is defined In this section the battery back upped data is stored By default the compiler creates the section zbss bat uninitialized data to store uninitialized data objects The section prefix z
36. coalescer 5 8 5 9 code checking 5 17 code generator 5 5 common subexpression elimination 5 6 compile 2 16 compiler invocation 5 10 optimizations 5 5 setting options 5 11 compiler error messages 5 19 compiler options overview 5 12 compiler phases backend 5 4 code generator phase 5 5 optimization phase 5 5 peephole optimizer phase 5 5 pipeline scheduler 5 5 frontend 5 4 optimization phase 5 4 Index 4 7 parser phase 5 4 preprocessor phase 5 4 scanner phase 5 4 conditional assembly 4 31 conditional jump reversal 5 7 configuration EDE directories 1 7 UNIX 1 9 constant propagation 5 6 continuation 4 23 control flow simplification 5 7 control program 8 4 invocation 8 4 options overview 8 5 control program options overview 8 5 8 11 8 24 controls 4 4 copy table compression 7 10 creating a makefile 2 13 CSE 5 6 data type qualifiers 3 15 data types 3 3 accumulator 3 5 bit 3 7 fractional 3 5 fundamental 3 3 packed 3 8 dead code elimination 5 7 delete duplicate code sections 7 10 delete duplicate constant data 7 10 delete unreferenced sections 7 10 derivative definition 7 23 7 29 directive conditional assembly 4 31 directives 4 4 directories setting 1 7 1 9 Index EDE 2 3 build an application 2 16 create a project 2 11 create a project space 2 9 rebuild an applicalion 2 17 specify development tool options 2 14 siarting 2 8 ELF DWARF
37. const init section vector init section data_overlay At startup copies corresponding sections to RAM for initialization Allow overlaying data sections section type name section all section name with module section name with symbol section per data object Changes section names See section 3 10 Compiler Generated Sections and compiler option R in section 5 1 Compiler Options in Chapter Tool Options of the Reference Manual source nosource Specifies which C source lines must be shown in assembly output See compiler option s in section 5 1 Compiler Options in Chapter Tool Options of the Reference Manual switch auto jumptab linear lookup restore Specifies switch statement See section 3 11 Switch Statement tradeoff level Specify tradeoff between speed 0 and size 4 See compiler option t in section 5 1 Compiler Options in Chapter Tool Options of the Reference Manual warning number Disables warning messages See compiler option w in section 5 1 Compiler Options in Chapter Tool Options of the Reference Manual weak symbol Marks a symbol as weak Table 3 7 Pragmas 3 29 3 30 TriCore User s Manual 3 8 PREDEFINED MACROS In addition to the predefined macros required by the ISO C standard the TASKING TriCore C compiler supports the predefined macros as defined in Table 3 8 The macros are useful to create conditional C cod
38. d ovar 0 ivar void main void invert 255 Generated assembly code invert not d4 st w ovar d4 TriCore C Language 3 25 main mov d4 255 j invert Example 6 writing your own intrinsic function Because you can use any assembly instruction with the __ asm keyword you can use the __ asm keyword to create your own intrinsic functions The essence of an intrinsic function is that it is inlined First write a function with assembly in the body using the keyword __ asm We use the multiply routine from Example 3 Next make sure that the function is inlined rather than being called You can do this with the function qualifier inline This qualifier is discussed in more detail in section 3 9 1 Inlining Functions int a b result inline void _ my mul void _ asm mul 0 1 2 q result d a d b void main void call to function _ my mul _ my mul Generated assembly code main _ my mul code is inlined here ld w dl15 a ld w d0 b mul d15 d15 do st w result d15 As you can see the generated assembly code for the function __ my _mul is inlined rather than called 3 26 TriCore User s Manual Example 7 accessing individual registers in a register pair You can access the individual registers in a register pair by adding a after the operand specifier in the assembly part followed by the index in the register pair int f
39. declared section UNDEF Undefine DEFINE symbol WARNING Programmer generated warning Overview of symbol definition directives Function Description EGU Assigns permanent value to a symbol EXTERN External symbol declaration GLOBAL Global symbol declaration LOCAL Local symbol declaration SET Set temporary value to a symbol SIZE Set size of symbol in the ELF symbol table TYPE Set symbol type in the ELF symbol table WEAK Mark symbol as weak 4 20 TriCore User s Manual Overview of data definition storage allocation directives FLOAT DOUBLE FRACT SFRACT SPACE WORD HALF Function Description ACCUM Define 64 bit constant in 18 46 bits format ALIGN Define alignment ASCII ASCIIZ Define ASCII string without with ending NULL byte BYTE Define constant byte not for PCP Define a 32 bit 64 bit floating point constant Define a 16 bit 32 bit constant fraction Define storage Define a word half word constant not for PCP Overview of macro and conditional assembly directives Function Description DUP Duplicate seguence of source lines DUPA Duplicate seguence with arguments DUPC Duplicate seguence with characters DUPF Duplicate seguence in loop ENDM End of macro or duplicate seguence EXITM Exit macro IF ELIF ELSE ENDIF Conditional assembly MACRO Define macro PMACRO Undefine purge macro Overview of
40. expression 4 10 system call 3 37 T temporary files setting directory 1 10 trap function 3 33 trap identification number 3 36 trap service routine 3 33 3 35 trap service routine class 6 3 37 U updating makefile 2 13 utilities arcbiver 8 23 artc 8 23 cctc 8 4 control program 8 4 make utility 8 9 mktc 8 9 Vv verbose option linker 7 18 Index 10 INDEX Index
41. for a particular part of the code Directives of this kind are called controls A typical example is to tell the assembler with an option to generate a list file while with the controls LIST ON and LIST OFF you overrule this option for a part of the code that you do not want to appear in the list file Controls always appear on a separate line and start with a sign in the first column The following controls are available Assembly listing controls Miscellaneous controls Each assembler directive or control has its own syntax You can use assembler directives and controls in the assembly code as pseudo instructions TriCore Assembly Language 4 19 4 8 1 OVERVIEW OF ASSEMBLER DIRECTIVES The following tables provide an overview of all assembler directives For a detailed description see section 3 3 2 Detailed Description of Assembler Directives in Chapter Assembly Language of the Reference Manual Overview of assembly control directives Directive Description COMMENT Start comment lines You cannot use this directive in IF ELSE ENDIF constructs and MACRO DUP definitions DEFINE Define substitution string END End of source program FAIL Programmer generated error message INCLUDE Include file MESSAGE Programmer generated message ORG Initialize memory space and location counters to create a nameless section SDECL Declare a section with name type and attributes SECT Activate a
42. gs Custom debug information gflag Optimization Allow generic instructions Optimize instruction size Og OG on off Os OS Using the Assembler EDE options Command line Warnings Report all warnings Suppress all warnings Suppress specific warnings Treat warnings as errors no option w W wnum num warnings as errors Miscellaneous Assemble case sensitive Allow memory management instructions Allow hardware floating point instructions Labels are by default local default global Additional command line options c mmu present fpu present il ig options Table 6 2 Assembler options The following options are only available on the command line Description Command line Display invocation syntax Show description of diagnostic s Redirect diagnostic messages to a file Read options from file Keep output file after errors Specify name of output file Display version header only diag fmt all nr error file file f file k 0 file V Table 6 3 Assembler command line options Ee The invocation syntax on the command line is Tricore assembler PCP assembler astc option file aspcp option file The input file must be an assembly source file asm or src Tricore assembler PCP assembler astc test asm aspcp test asm 6 7 6 8 TriCore
43. if that module resolves an external symbol definition in one of the modules that are read before 8 4 1 CALLING THE ARCHIVER You can only call the archiver from the command line The invocation syntax is artc key_option sub_option library object_file key_option With a key option you specify the main task which the archiver should perform You must always specify a key option 8 24 sub_ option library object file TriCore User s Manual Sub options specify into more detail how the archiver should perform the task that is specified with the key option It is not obligatory to specify sub options The name of the library file on which the archiver performs the specified action You must always specify a library name except for the option and V When the library is not in the current directory specify the complete path either absolute or relative to the library The name of an object file You must always specify an object file name when you add extract replace or remove an object file from the library Options of the archiver utility The following archiver options are available Description Option Sub option Main functions key options Replace or add an object module r a b c u Vv Extract an object module from the library X V Delete object module from library d V Move object module to another position m a b v Print a table of contents of the library t s
44. int plain func 1 call indirect unsinged int stack func 2 F r TriCore C Language 3 43 3 10 COMPILER GENERATED SECTIONS The compiler generates code and data in several types of sections The compiler uses the following section naming convention section_type_prefix module_name symbol_name The prefix depends on the type of the section and determines if the section is initialized constant or uninitialized and which addressing mode is used The symbol_name is either the name of an object or the name of a function Type Name prefix Description code text program code neardata Zdata initialized __ near data fardata data initialized __ far data nearrom Zrodata constant __ near data farrom rodata constant __ far data nearbss Zbss uninitialized __ near data cleared farbss bss uninitialized __ far data cleared nearnoclear Zbss uninitialized __ near data farnoclear bss uninitialized __ far data a0data sdata initialized __ a0 data a0bss Sbss uninitialized __ a0 data cleared a1rom data constant __a1 data a8data data_a8 initialized __ a8 data a8rom rodata_a8 constant __ a8 data a8bss bss_a8 uninitialized __ a8 data cleared a9data data_a9 initialized __ a9 data a9rom rodata_a9 constant __ a9 data a9bss bss_a9 uninitialized __ a9 data cleared Table 3 10 Section types and name prefixes 3 44 TriCore User s Manual R
45. is specified the compiler looks in the same directory as the source file This is only possible for include files that are enclosed in amp This first step is not done for include files enclosed in lt gt 2 When the compiler did not find the include file it looks in the directories that are specified in the Directories dialog I option 3 When the compiler did not find the include file because it is not in the specified include directory or because no directory is specified it looks which paths were set during installation You can still change these paths d gt See section 1 3 1 Configuring the Embedded Development Environment and environment variable CTCINC in section 1 3 2 Configuring the Command Line Environment in Chapter Software Installation 4 When the compiler still did not find the include file it finally tries the default include directory relative to the installation directory unless you specified option nostdinc 5 6 COMPILING FOR DEBUGGING Compiling your files is the first step to get your application ready to run on a target However during development of your application you first may want to debug your application To create an object file that can be used for debugging you must instruct the compiler to include symbolic debug information in the source file 1 From the Project menu select Project Options The Project Options dialog box appears 2 Expand the C Compiler entry and s
46. keep output files the resulting output file may be incomplete W Warnings Warning messages do not result into an erroneous assembly output file They are meant to draw your attention to assumptions of the compiler for a situation which may not be correct You can control warnings in the C Compiler Warnings page of the Project Project Options menu compiler option w I Information Information messages are always preceded by an error message Information messages give extra information about the error 5 20 TriCore User s Manual S System errors System errors occur when internal consistency checks fail and should never occur When you still receive the system error message s9 internal consistency check failed please report please report the error number and as many details as possible about the context in which the error occurred The following helps you to prepare an e mail using EDE 1 From the Help menu select Technical Support gt Prepare Email Tbe Prepare Email form appears 2 Fill out the the form State the error number and attach relevant files 3 Click the Copy to Email client button to open your email application A prepared e mail opens in your e mail application 4 Finish the e mail and send it Display detailed information on diagnostics 1 In the Help menu enable the option Show Help on Tool Errors 2 In the Build tab of the Output window double click on an error or warn
47. line Targets and dependencies The basis of the makefile is a set of targets dependencies and rules A target entry in the makefile has the following format target dependency rule rule Target lines must always start at the beginning of a line leading white spaces tabs or spaces are not allowed A target line consists of one or more targets a semicolon and a set of files which are required to build the target dependencies The target itself can be one or more filenames or symbolic names all demo elf final elf demo elf final elf test o demo o final o You can now can specify the target you want to build to the make utility The following three invocations all have the same effect mktc mktc all mktc demo elf final elf 8 14 TriCore User s Manual If you do not specify a target the first target in the makefile in this example a11 is build The target all depends on demo e1f and final elf so the second and third invocation have also the same effect and the files demo elf and final elf are built In MS Windows you can normally use colons to denote drive letters The following works as intended c foo o a foo c If a target is defined in more than one target line the dependencies are added to form the target s complete dependency list all demo elf These two lines are equivalent with all final elf all demo elf final elf For target lines macros and functions are expanded at the mom
48. override 4 30 return decimal value operator 4 28 return hex value operator 4 29 macro argument string 4 29 macro operations 4 24 macros 4 24 macros in C 3 30 make utility 8 9 DEFAULT target 8 14 DONE target 8 14 IGNORE target 8 14 INIT target S 14 PRECIOUS target 8 15 SILENT target 8 14 SUFFIXES target 8 14 conditional processing 8 21 dependency 8 13 else 8 21 endif 8 21 exist function 8 21 export line 8 22 functions 8 20 ifdef 8 21 ifndef 8 21 implicit rules 8 16 invocation 8 11 macro definition 8 11 Index Index 7 macro MAKE 8 18 macro MAKEFLAGS 8 18 macro PRODDIR 8 18 macro SHELLCMD 8 19 macro TMP_CCOPT 8 19 macro TMP_CCPROG 8 19 makefile 8 9 8 12 match function 8 20 nexist function 8 21 options overview 8 11 predefined macros 8 18 protect function 8 20 rules in makefile 8 15 separate function 8 20 special targets 8 14 makefile 8 9 automatic creation of 2 13 updating 2 13 writing 8 12 memory definition 7 23 7 31 memory qualifiers 3 10 _ a0 3 11 _ al 3 11 _ a8 3 11 _ a9 3 11 _ atbitO 3 13 3 14 __ far 3 10 _ near 5 10 MISRA C 5 17 mktc See make utility Motorola S record format 7 8 node locked license 1 12 o operands 4 5 opimizations size speed trade off 5 9 optimization backend align loop bodies 5 8 coalescer 5 8 5 9 IF conversion 5 8 instruction scheduler 5 8 loop transformations 5 7 peephole optimizations
49. program click either one of the following buttons Builds your entire project but only updates files that are out of date or have been changed since the previous build which saves time iii Builds your entire project unconditionally All steps necessary HEH to obtain the final e1f file are performed Using the Linker To get access to the linker options 1 From the Project menu select Project Options The Project Options dialog box appears 2 Expand the Linker entry Select the subentries and set the options in the various pages The command line variant is shown simultaneously The following linker options are available via the Linker page in EDE EDE options Command line Output Format Output formats o filename format addr_size space c basename format addr_ size Script File Select linker script file dfile Map File Generate a map file map M Suboptions for the Generate a map file option mflags Libraries Link default C libraries lx Use non trapping floating point library lfp Use trapping floating point library lfpt Rescan libraries to solve unresolved exernals no rescan Libraries library files Optimization Use a first fit decreasing algorithm Ol OL on off Use copy table compression Ot OT Delete unreferenced sections Oc OC Delete duplicate code Ox OX Delete duplicate constant data Oy OY Warnings Report al
50. see section 5 4 Control Program Options in Chapter Tool Options of the Reference Manual The options in table 8 1 are options that the control program interprets itself The control program however can also pass an option directly to a tool Such an option is not interpreted by the control program but by the tool itself The next example illustrates how an option is passed directly to the linker to link a user defined library cctc Wlk lmylib test c 8 7 8 8 d gt TriCore User s Manual Use the following options to pass arguments to the various tools Description Option Pass argument directly to the C compiler Wcparg Pass argument directly to the C pre linker Wplarg Pass argument directly to the C compiler Wcarg Pass argument directly to the assembler Waarg Pass argument directly to the PCP assembler Wpcparg Pass argument directly to the linker Wlarg Table 8 2 Control program options to pass an option directly to a tool If you specify an unknown option to the control program the control program looks if it is an option for a specific tool If so it passes the option directly to the tool However it is recommended to use the control program options to passing arguments directly to tools With the environment variable CCTCOPT you can define options and or arguments that the control programs always processes before the command line arguments For example if you use the control progra
51. the address register as the effective address and then updates this register by adding the sign extended 10 bit offset to its previous value Use the minus sign for a post decrement Syntax An offset10 TriCore Assembly Language 4 7 Circular addressing This addressing mode is used for accessing data values in circular buffers It uses an address register pair to hold the state it requires The even register is always a base address B The most significant half of the odd register is the buffer size L The least significant half holds the index into the buffer I The effective address is B I The buffer occupies memory from addresses B to B L 1 The 10 bit offset is specified in the instruction word and is a byte offset that can be either positive or negative Syntax An c offset10 Bit reverse addressing Bit reverse addressing is used to access arrays used in FFT algorithms Bit reverse addressing uses an address register pair to hold the required state The even register is the base address of the array B the least significant half of the odd register is the index into the array I and the most significant half is the modifier M which is added to I after every access The effective address is B reverse I The reverse function exchanges bit n with bit 15 n for n 0 7 The index I is post incremented and its new value is I M where M is the most significant half of the odd register Syn
52. the target are the same Therefore it is possible to run a compiled application directly from the development environment In an embedded environment however a simulator or target hardware is required to run an application TASKING offers a number of simulators and target hardware debuggers Toolchain overview You can use all tools in the toolchain from the embedded development environment EDE and from the command line in a Command Prompt window or a UNIX shell The next illustration shows all components of the TriCore toolchain with their input and output files Getting Started C source file eCC C compiler cptc C source file C source file c ic hand coded Y C compiler ctc pre assembly file assembly file asm src hand coded Y assembler a astc L gt archiver t relocatable object file error messages err list file 1st error messages ers CrossView Pro debugger xfwtc i TriCore execution environment artc e O relocatable object library a m relocatable linker object file out linker script file linker l linker map file map isl Itc F error messages elk L relocatable linker object file out gt memory definition file mdf Intel Hex ELF DWARF 2 Motorola S record IEEE 695 absolute object file absolute object file absolute object file abso
53. to assign the result to the output variable int a b result void multiply void _ asm mul 0 1 2 q result d a d b void main void multiply Generated assembly code multiply ld w d15 a ld w d0 b mul d15 d15 d0 st w result d15 main j multiply 3 24 TriCore User s Manual Example 4 reserve registers If you use registers in the __ asm statement reserve them Same as Example 3 but now register d0 is a reserved register You can do this by adding a reserved register list d0 sometimes referred to as clobber list As you can see in the generated assembly code register d0 is not used the first register used is d1 int a b result void multiply void _ asm mul 0 1 2 q result d a d b dO Generated assembly code ld w d15 a ld w dl b mul d15 d15 dl st w result d15 Example 5 input and output are the same If the input and output must be the same you must use a number constraint The following example inverts the value of the input variable ivar and returns this value to ovar Since the assembly instruction not uses only one register the return value has to go in the same place as the input value To indicate that ivar uses the same register as ovar the constraint O is used which indicates that ivar also corresponds with 0 int ovar void invert int ivar __asm not 0
54. to place it on a predefined starting address or that it may be overlaid with another section SDECL name type attribute AT address See the SDECL directive in section 3 3 2 Detailed Description of Assembler Directives in chapter Assembly Language of the Reference Manual for a complete description of all possible attributes Section activation Sections are defined once and are activated with the SECT directive SECT name TriCore Assembly Language 4 23 The linker will check between different modules and emits an error message if the section attributes do not match The linker will also concatenate all matching section definitions into one section So all code sections generated by the compiler will be linked into one big code chunk which will be located in one piece By using this naming scheme it is possible to collect all pieces of code or data belonging together into one bigger section during the linking phase A SECT directive referring to an earlier defined section is called a continuation Only the name can be specified Example 1 SDECL text hello main CODE SECT text hello main Defines and activates a relocatable section in CODE memory Other parts of this section with the same name may be defined in the same module or any other module Other modules should use the same SDECL statement When necessary it is possible to give the section an absolute starting addre
55. 0 s1 Print object module to standard output p Sub options Append or move new modules after existing a name module name Append or move new modules before b name existing module name Create library without notification if library C does not exist Preserve last modified date from the library 0 Print symbols in library modules s 0 1 Replace only newer modules u Verbose V Using the Utilities 8 25 Description Option Sub option Miscellaneous Display options Display version header V Read options from file f file Suppress warnings above level n wn Table 8 4 Overview of archiver options and sub options d gt For a complete list and description of all archiver options see section 5 6 Archiver Options in Chapter Tool Options of the Reference Manual 8 26 TriCore User s Manual 8 4 2 EXAMPLES Create a new library If you add modules to a library that does not yet exist the library is created To create a new library with the name mylib a and add the object modules cstart o and calc o to it artc r mylib a cstart o calc o Add a new module to an existing library If you add a new module to an existing library the module is added at the end of the module If the module already exists in the library it is replaced artc r mylib a mod3 o Print a list of object modules in the library To inspect the contents of the library artc t mylib a The library h
56. 1R n lacvalue 3 52 TriCore User s Manual 3 12 3 REBUILDING LIBRARIES B If you have manually changed one of the standard C library functions you need to recompile the standard C libraries Weak symbols are used to extract the most optimal implementation of a function from the library For example if your application does not use floating point variables the prinf alike functions do not support floating point types either The compiler emits strong symbols to guide this process Do not change the order in which modules are placed in the library since this may break this process The sources of the libraries are present in the 1ibXsrc directory This directory also contains subdirectories with a makefile for each type of library lib sre p tc1 libc makefile libcs makefile libcs fpu makefile tclX libc makefile libcs makefile libcs_ fpu makefile tc2 libc makefile libcs makefile libcs fpu makefile To rebuild the libraries follow the steps below First make sure that the bin directory for the TriCore toolchain is included in your PATH environment variable See section 1 3 2 Configuring the Command Line Environment 1 Make the directory lib sre tc2 libc the current working directory This directory contains a makefile which also uses the default make rules from mktc mk from the ctc etc directory 2 Edit the makefile TriCore C Language 3 53 See section 8 3 Make Utility in Chapter Ut
57. 5 8 software pipelining 5 8 subscript strength reduction 5 7 use of SIMD instructions 5 8 optimization backend 5 5 compiler common subexpression elimination 5 6 frontend 5 4 optimization frontend conditional jump reversal 5 7 constant propagation 5 6 control flow simplification 5 7 dead code elimination 5 7 expression simplification 5 6 flow simplification 5 7 forward store 5 7 inlining functions 5 7 jump chaining 5 7 switch optimization 5 7 optimizations compiler 5 5 copy table compression 7 10 delete duplicate code sections 7 10 delete duplicate constant data 7 10 delete unreferenced sections 7 10 first fit decreasing 7 9 P pack pragma 3 9 packed data types 3 8 halfword packing 3 9 parser 5 4 peephole optimization 5 5 5 8 pipeline scheduler 5 5 Pragmas section 3 44 section all 3 44 section code_inil 3 45 section const_init 3 45 section data_overlay 3 45 section vector_init 3 45 section_name_with module 3 45 section_name_with symbol 3 45 section_per_data_object 3 45 pragmas 3 26 inline 3 32 noinline 3 32 pack 3 9 smartinline 3 32 predefined assembler symbols __ASPCP_ 4 9 __ASTC_ 4 9 __FPU_ 4 9 __MMU_ 4 9 __TC2_ 4 9 predefined macros in C 3 30 __CTC_ 3 30 __DOUBLE_FP_ 3 30 _ DSPC_ 3 30 _ DSPC_VERSION _ 3 30 __FPU_ 3 30 _ SINGLE FP__ 3 30 _ TASKING _ 3 30 predefined symbols 4 8 printf formatter 3 50 processor selecting a core 5
58. 8 See also http www misra org uk TASKING Tools e TriCore C Compiler Assembler Linker Reference Manual Altium MB060 024 00 00 e TriCore C Compiler User s Manual Altium MA60 012 00 00 e TriCore CrossView Pro Debugger User s Manual Altium MA060 043 00 00 TriCore e TriCore 1 Unified Processor Core v1 3 Architecture Manual Doc v1 3 3 2002 09 Infineon e TriCore2 Architecture Overview Handbook 2002 Infineon e TriCore Embedded Application Binary Interface 2000 Infineon mE MANUAL STRUCTURE TriCore User s Manual SOFTWARE INSTALLATION AND CONFIGURATION all TASKING M diLdVHO Software Installation and Configuration 1 3 1 1 INTRODUCTION This chapter guides you through the procedures to install the software on a Windows system or on a Linux or UNIX host The software for Windows has two faces a graphical interface Embedded Development Environment and a command line interface The Linux and UNIX software has only a command line interface After the installation it is explained how to configure the software and how to install the license information that is needed to actually use the software 1 2 SOFTWARE INSTALLATION 1 2 1 INSTALLATION FOR WINDOWS 1 2 Start Windows 95 98 XP NT 2000 if you have not already done so Insert the CD ROM into the CD ROM drive If the TASKING Showroom dialog box appears proceed with Step 5 Click the Start but
59. 8 TRICORE C LANGUAGE 3 1 3 1 IntroductiOn au es tied ade eee WU NR wee OES 3 3 3 2 Daa Ty pess si visti i gsn A yd ES 3 3 GAN Fundamental Data Types Fa 3 3 3 2 2 Fractional Data Types Fa 3 5 VI Table of Contents 3 22 Bit Data Vy pees a4 casey eaten OE ADO Bees 3 7 3 2 4 Packed Data TyD S i mo aer ee A PAA ers 3 8 3 3 Memory Oualifiers snas aa u YF Y Y E E 3 10 3 3 1 Declare a Data Object in a Special Part of Memory 3 10 3 3 2 Declare a Data Object at an Absolute Address _ at and catbit uag uu e GN erate eatin Pane aes 3 13 3 4 Data Type Qualifiers 2 0 0 0 eee 3 15 3 4 1 Gircular Buffers Cites eck eS bs oe EEA 3 15 3 4 2 Declare an SFR Bit field _ sfrbitl6 and __sfrbit32 3 16 3 4 3 Saturation Sat ou uad DF yD A UY ERa 3 18 3 5 Intrinsic Functions FFF FFF RR RA 3 19 3 6 Using Assembly in the C Source _ asm 3 20 3 7 Controlling the Compiler Pragmas 3 26 3 8 Predefined Macros 1 0 0 ccc eens 3 30 3 9 FUNCUONS iaei see En Adan A NS Rte AN ADU 3 31 3 9 1 Inlining Functions inline 0 ee eee 3 31 3 9 2 Interrupt and Trap Functions 0 00 eee 3 33 3 9 2 1 Defining an Interrupt Service Routine 3 34 3 9 2 2 Defining a Trap Service Routine 3 35 3 9 2 3 Defining a Trap Service Routine Class 6 _ syscallfunc 3 37 3 9 2 4 Enabling Interrupt Requests _enable_ __bisr O 3 38 3 9 3 Function C
60. ACRO ARGUMENTS The assembler recognizes certain text operators within macro definitions which allow text substitution of arguments during macro expansion You can use these operators for text concatenation numeric conversion and string handling Operator Name Description Macro argument Concatenates a macro argument with concatenation adjacent alphanumeric characters Return decimal Substitutes the symbol seguence with a value of symbol character string that represents the decimal value of the symbol 96 Return hex Substitutes the symbo sequence with a value of symbol character string that represents the hexadecimal value of the symbol Macro string delimiter Allows the use of macro arguments as literal strings Causes local labels in its term to be evaluated at normal scope rather than at macro scope Macro local label override Argument Concatenation Operator Consider the following macro definition SWAP_MEM MACRO REG1 REG2 LD W DO AXREG1 LD W D1 A REG2 swap memory contents use DO as temp use D1 as temp ST W AXREG1 Dl ST W AXREG2 DO ENDM The macro is called as follows SWAP MEM 0 1 The macro expands as follows LD W DO A0 LD W DI1 A1 ST W A0 D1 ST W A1 DO 4 27 4 28 TriCore User s Manual The macro preprocessor substitutes the character 0 for the argument REG1 and the character 1 for the argument REG2 The concatenation o
61. ISRA C rules see Chapter 10 MISRA C Rules in the Reference Manual 5 18 TriCore User s Manual Implementation issues 6 The MISRA C implementation in the compiler supports nearly all rules Only a few rules are not supported because they address documentation run time behavior or other issues that cannot be checked by static source code inspection or because they require an application wide overview During compilation of the code violations of the enabled MISRA C rules are indicated with error messages and the build process is halted MISRA C rules are divided in required rules and advisory rules If rules are violated errors are generated causing the compiler to stop With the following options warnings instead of errors are ggenerated for either or both the reguired rules and the advisory rules misrac reguired warnings misrac advisory warnings Note that not all MISRA C violations will be reported when other errors are detected in the input source For instance when there is a syntax error all semantic checks will be skipped including some of the MISRA C checks Also note that some checks cannot be performed when the optimizations are switched off Quality Assurance report To ensure compliance to the MISRA C rules throughout the entire project the TASKING TriCore linker can generate a MISRA C Quality Assurance report This report lists the various modules in the project with the respective MISRA C
62. If you have not received such a license key follow the steps below to obtain one Otherwise you can install the license Windows 1 Run the License Administrator during installation and follow the steps to Request a license key from Altium by E mail E mail the license request to your local TASKING sales representative The license key will be sent to you by E mail Software Installation and Configuration 1 13 UNIX 1 If you need a floating license on UNIX you must determine the host ID and host name of the computer where you want to use the license manager Also decide how many users will be using the product See section 1 4 5 How to Determine the Host ID and section 1 4 6 How to Determine the Host Name When you order a TASKING product provide the host ID host name and number of users to your local TASKING sales representative The license key will be sent to you by E mail 1 4 2 INSTALLING NODE LOCKED LICENSES 2 If you do not have received your license key read section 1 4 1 Obtaining License Information before continuing Install the TASKING software product following the installation procedure described in section 1 2 1 Installation for Windows if you have not done this already Create a license file by importing a license key or create one manually Import a license key During installation you will be asked to run the License Administrator Otherwise start the License Administrator licadm
63. NG THE COMMAND LINE ENVIRONMENT To facilitate the invocation of the tools from the command line either using a Windows command prompt or using Linux or UNIX you can set environment variables You can set the following variables Environment Variable Description PATH With this variable you specify the directory in which the executables reside for example c ctc bin This allows you to call the executables when you are not in the bin directory Usually your system already uses the PATH variable for other purposes To keep these settings you need to add rather than replace the path Use a semicolon to separate pathnames CTCINC With this variable you specify one or more additional directories in which the C compiler ctc looks for include files The compiler first looks in these directories then always looks in the default include directory relative to the installation directory ASTCINC With this variable you specify one or more additional directories in which the assembler astc looks for include files The assembler first looks in these directories then always looks in the default include directory relative to the installation directory ASPCPINC With this variable you specify one or more additional directories in which the assembler aspep looks for include files The assembler first looks in these directories then always looks in the default include directory relative to th
64. OS are tightly coupled All these memory qualifiers near far a0 _ al _ a8 and ___a9 are related to the object being defined they influence where the object will be located in memory They are not part of the type of the object defined Therefore you cannot use these qualifiers in typedefs type casts or for members of a struct or union 3 12 TriCore User s Manual Examples To declare a fast accessible integer in directly addressable memory int _ near Var in near To allocate a pointer in far memory the compiler will not use absolute addressing mode _ far int Ptr in far To declare and initialize a string in AO memory char _ a0 string TriCore If you use the __ near memory gualifier the compiler generates faster access code for those freguently used variables Pointers are always 32 bit Functions are by default allocated in ROM In this case you can omit the a memory qualifier You cannot use memory qualifiers for function return values Some examples of using memory qualifiers int _ near p pointer to int in _ near memory pointer has 32 bit size int _ far g pointer to int in _ far memory pointer has 32 bit size g p the compiler issues a warning You cannot use memory qualifiers in structure declarations struct S __near int i put an integer in near memory Incorrect _ far int p put an integer pointer in far memory Incorrect
65. Project Options dialog box appears 2 Expand the Linker entry and select Map File 3 Select Generate a map file map 4 Optional Enable the options to include that information in the map file Example on the command line ltc Mtest map test o With this command the list file test map is created d gt See section 6 2 Linker Map File Format in Chapter List File Formats of the Reference Manual for an explanation of the format of the map file 7 42 TriCore User s Manual 7 10 LINKER ERROR MESSAGES The linker produces error messages of the following types Fatal errors After a fatal error the linker immediately aborts the link locate process Errors Errors are reported but the linker continues linking and locating No output files are produced unless you have set the linker option keep output files Warnings Warning messages do not result into an erroneous output file They are meant to draw your attention to assumptions of the linker for a situation which may not be correct You can control warnings in the Linker Warnings page of the Project Project Options menu linker option w Information Verbose information messages do not indicate an error but tell something about a process or the state of the linker To see verbose information use the linker option v System errors System errors occur when internal consistency checks fail and should never occur When you still receive the sy
66. R EDE uses a makefile to build your entire project This means that you cannot run the compiler only If you compile a single C source file from within EDE the file is also automatically assembled However you can set options specific for the compiler After you have build your project the output files of the compilation step are available in your project directory unless you specified an alternative output directory in the Build Options dialog To compile your program click either one of the following buttons Compiles and assembles the currently selected file This results in a relocatable object file o Builds your entire project but looks whether there are already files available that are needed in the building process If so these files will not be generated again which saves time Builds your entire project unconditionally All steps necessary to obtain the final e1f file are performed To only check for syntax errors click the following button a Checks the currently selected file for syntax errors but does not generate code Select a predefined target processor 1 From the Project menu select Project Options Tbe Project Options dialog appears 2 Expand the Processor entry and select Processor Definition 3 In the Target processor list select the target processor 4 Click OK to accept the new project settings The compiler includes the register file regcpu sfr Based on the target processor the com
67. TriCore User s Manual The must always directly be followed by the token Whitespace is not removed when it is at the end of the previous command line or when it is in front of the next command line The use of the as an operator for a command like a semicolon separated list with each item on one line and the V as a layout tool is not supported unless they are separated with whitespace The make utility can generate inline temporary files If a line contains lt lt LABEL no whitespaces then all subseguent lines are placed in a temporary file until the line LABEL is encountered Next lt lt LABEL is replaced by the name of the temporary file Example ltc o f lt lt EOF separate n match o separate n match a LKFLAGS EOF The three lines between lt lt EOF and EOF are written to a temporary file for example mkce4c0a tmp and the rule is rewritten as Ltc o f mkce4c0a tmp Instead of specifying a specific target you can also define a general target A general target specifies the rules to generate a file with extension ex1 to a file with extension ex2 For example SUFFIXES C C src ctc lt Read this as to build a file with extension src out of a file with extension c call the compiler with lt lt is a predefined macro that is replaced with the name of the current dependency file The special target SUFFIXES is followed by a list of
68. User s Guide This assembles the file test asm and generates the file test o which serves as input for the linker For a complete overview of all options with extensive description see section 5 2 Assembler Options of Chapter Tool Options of the TriCore Reference Guide 6 5 SPECIFYING A TARGET PROCESSOR Before you call the assembler you need to tell the assembler for which target processor it needs to assemble Based on the processor type the assembler includes a special function register file This is a regular include file which enables you to use virtual registers that are located in memory amp The settings in EDE affect your whole project If you already specified these settings you do not need to specify them again for the assembler When you use the command line you must specify the same options to the assembler as you did for the compiler Select a predefined target processor 1 From the Project menu select Project Options Tbe Project Options dialog appears 2 Expand the Processor entry and select Processor Definition 3 In the Target processor list select the target processor 4 Click OK to accept the new project settings The assembler includes the register file cegcpu def Define a user defined target processor 1 From the Project menu select Project Options The Project Options dialog box appears 2 Expand the Processor entry and select Processor Definition 3 In the Target proces
69. V Table 7 3 Linker command line options Using the Linker 7 13 EE The invocation syntax on the command line is ltc option file When you are linking multiple files either relocatable object files o or libraries a it is important to specify the files in the right order This is explained in Section 7 4 1 Specifying Libraries to the Linker d gt For a complete overview of all options with extensive description see section 5 3 Linker Options of the Reference Manual 7 14 TriCore User s Manual 7 4 LINKING WITH LIBRARIES There are two kinds of libraries system libraries and user libraries System library The system libraries are installed in subdirectories of the Lib directory of the toolchain An overview of the system libraries is given in the following table Library to link Description libc a C library Some functions require the floating point library Also includes the startup code libcs a C library single precision compiler option F Some functions require the floating point library Also includes the startup code libc_fpu a C library with FPU instructions compiler option fpu present libcs_fpu a C library single precision with FPU instructions compiler option F and fpu present libfp a Floating point library non trapping libfpt a Floating point library trapping Control program option fp trap libfp_fpu a
70. VHD Using the Compiler 5 3 5 1 INTRODUCTION EDE uses a makefile to build your entire project from C source till the final ELF DWARF object file which serves as input for the debugger Although in EDE you cannot run the compiler separately from the other tools this chapter discusses the options that you can specify for the compiler On the command line it is possible to call the compiler separately from the other tools However it is recommended to use the control program cctc for command line invocations of the toolchain see section 8 2 Control Program in Chapter Using the Utilities With the control program it is possible to call the entire toolchain with only one command line The compiler takes the following files for input and output Csourcefile c C source file hand coded ic eh C compiler F e ctc error messages err assembly file Src Figure 5 1 C compiler This chapter first describes the compilation process which consists of a frontend and a backend part During compilation the code is optimized in several ways The various optimizations are described in the second section Third it is described how to call the compiler and how to use its options An extensive list of all options and their descriptions is included in the section 5 1 Compiler Options in Chapter 5 Tool Options of the Reference Manual Finally a few important basic tasks are described 5 4 TriCore
71. _name Name of the register you want to reserve Typical example multiplying two C variables using assembly int a b result void main void _ asm mulXt 0 1 2 d result d a d b generated code ld w d15 a ld w d0 b mul d15 d15 d0 st w result d15 0 corresponds to the first C variable 1 corresponds to the second and so on The escape seguence Xt generates a tab Specifying registers for C variables With a constraint character you specify the register type for a parameter In the example above the d is used to force the use of data registers for the paramcters a b and result You can reserve the registers that are used in the assembly instructions either in the parameter lists or in the reserved register list register _save_list The compiler takes account of these lists so no unnecessary register saves and restores are placed around the inline assembly instructions 3 22 TriCore User s Manual Constraint Type Operand Remark character a Address register a0 a15 d Data register dO d15 e Data register pair e0 e2 e14 e0 pair d0 d1 e2 d2 d3 m Memory variable Stack or memory operand number Type of operand it same as Indicates that number and is associated with number number are the same register Table 3 6 Available input output operand constraints Loops and conditional jumps The compiler does not detect loops
72. able 7 6 Linker labels The linker only allocates space for the stack and or heap when a reference to either of the section labels exists in one of the input object files If you want to use linker labels in your C source for sections that have a dot in the name you have to replace all dots by underscores Using the Linker 7 39 Additionally the linker script file defines the following symbols Symbol Description _lc cp Start of copy table Same as _1c_ub_ table The copy table gives the source and destination addresses of sections to be copied This table will be generated by the linker only if this label is used _lc_bh Begin of heap Same as _lc_ub heap _lc_eh End of heap Same as _lc_ue heap Example refer to a label with section name witb dots from C Suppose the C source file foo c contains the following int myfunc int a some source lines This results in a section with the name text foo myfunc In the following source file main c all dots of the section name are replaced by underscores include lt stdio h gt extern void lc ub text foo myfunc int main void printf The function myfunc is located at X An amp lc ub _ text foo myfunc Example refer to a PCP variable from TriCore C source When memory is shared between two or more cores for instance TriCore and PCP the addresses of variables or functions on that memory may be dif
73. al off chip memory and buses Given the above definitions the linker can convert a logical address into an offset into an on chip or off chip memory device 7 24 TriCore User s Manual The board specification The processor definition and memory and bus definitions together form a board specification LSL provides language constructs to easily describe single core and heterogeneous or homogeneous multi core systems The board specification describes all characteristics of your target board s system buses memory devices I O sub systems and cores that are of interest to the linker Based on the information provided in the board specification the linker can for each core e convert a logical address to a physical addresses offsets within a memory device e locate sections in physical memory e maintain an overall view of the used and free physical memory within the whole system while locating Tbe section layout definition optional The optional section layout definition enables you to exactly control where input sections are located Features are provided such as the ability to place sections at a given load address or run time address to place sections in a given order and to overlay code and or data sections Example Skeleton of a Linker Script File A linker script file that defines a derivative X based on the TC1V1 3 architecture its external memory and how sections are located in memory may have the followin
74. alling Modes _ indirect 3 39 3 9 4 Parameter Passing and the Stack Model _ stackparm 3 40 3 10 Compiler Generated Sections ie 3 43 3 11 Switch Statement 0 eee 3 47 3 12 Tiranesh uu seks ies BA ete aris eee ak es OR TA 3 48 3 12 1 Overview of Libraries 0 0 00 cee eee 3 49 3 12 2 Printf and Scanf Formatting Routines 3 50 3 12 3 Rebuilding Libraries 00 0 0 00 0 eee 3 52 TRICORE ASSEMBLY LANGUAGE 4 1 4 1 Introduction 3044 45 wih heed eae DF YG DY OD O BE 4 3 4 2 Assembly SyntaX a ese aN EN WA ao lee WU 4 3 4 3 Assembler Significant Characters 4 4 Table of Contents 4 4 Operands uu nd an y BD nth Fd 4 5 4 4 1 Operands and Addressing Modes e 4 5 4 4 2 PCP Addressing Modes 0 0 00 YF YY eee 4 8 4 5 Symbol Names V YF FR FFR ER FFA 4 8 4 6 Assembly Expressions 0000000 eee 4 9 4 6 1 Numeric Constants V tees 4 10 4 6 2 SUIT OS akan m AUS ac etanes ahh bea ce aA EA acne Adres 4 11 4 6 3 Expression Operators 0 ee 4 12 4 7 Built in Assembly Functions Ie 4 14 4 8 Assembler Directives and Controls 4 18 4 8 1 Overview of Assembler Directives 4 19 4 8 2 Overview of Assembler Controls 4 21 4 9 Working with Sections 00 0 0 FR 4 22 4 10 Macro Operations O 4 24 4 10 1 Defining a Macro rna ia edima sae cae eA Ee 4
75. ant propagation in the initial loop test and code motion of loop invariant code by the CSE optimization Forward store option Oo OO A temporary variable is used to cache multiple assignments stores to the same non automatic variable 5 8 TriCore User s Manual Core specific optimizations backend Coalescer option Oa OA The coalescer seeks for possibilities to reduce the number of moves MOV instruction by smart use of registers This optimizes both speed as code size Peephole optimizations option Oy OY The generated assembly code is improved by replacing instruction seguences by eguivalent but faster and or shorter seguences or by deleting unnecessary instructions Align loop bodies option On ON Loop bodies are aligned to lower the number of fetches reguired to retrieve the loop body Instruction Scheduler option Ok OK Instructions are rearranged with the following purposes e Pairing a L S instruction with a data arithmetic instruction in order to fill both pipelines as much as possible e Avoiding structural hazards by inserting another non related instruction IFconversion option Ov OV IF ELSE constructions are transformed into predicated instructions This avoids unnecessary jumps while the predicated instructions are optimized by the pipeline scheduler and the predicate optimization Software pipelining option Ow OW A number of techniques to optimize loop
76. apping Control program option fp trap libfp_fpu a Floating point library non trapping with FPU instructions Compiler option fpu present libfpt_fpu a Floating point library trapping with FPU instructions Control program option fp trap compiler option fpu present librt a Run time library Table 3 11 Overview of libraries d gt See section 2 2 Library Functions in Chapter Libraries of the Reference Manual for an extensive description of all standard C library functions 3 49 3 50 TriCore User s Manual 3 12 2 PRINTF AND SCANF FORMATTING ROUTINES The C library functions printf fprintf vfprintf vsprintf call one single function doprint that deals with the format string and arguments The same applies to all scanf type functions which call the function _ doscan and also for the wprintf and wscanf type functions which call dowprint and _ dowscan respectively The C library contains three versions of these routines int long and long long versions If you use floating point the formatter function for floating point_doflt or _ dowflt is called Depending on the formatting arguments you use the correct routine is used from the library Of course the larger the version of the routine the larger your produced code will be Note that when you call any of the printf scanf routines indirect the arguments are not known and always the long long version with floating
77. as the following contents cstart o calc o mod3 o Move an object module to anotber position To move mod3 o to the beginning of the library position it just before cstart o artc mb cstart o mylib a mod3 o Delete an object module from tbe library To delete the object module cstart o from the library mylib a artc d mylib a cstart o Extract all modules from tbe library Extract all modules from the library mylib a artc x mylib a INDEX all TASKING M XSAGNI Index Index 3 Symbols syniax 3 20 writing intrinsics 3 25 BUILD _ 3 30 _ circ 3 15 __ REVISION _ 3 30 _ sat 3 18 _ VERSION __ 3 30 A absolute address 3 13 absolute variable 3 13 address space 7 26 addressing modes 4 5 absolute 4 6 base offset 4 6 bit reverse 4 7 circular 4 7 indexed 4 7 PCP assembler 4 8 post increment 4 6 pre increment 4 6 align loop bodies 5 8 architecture definition 7 22 7 26 archiver 8 23 invocation 8 23 options overview 8 24 artc 8 23 assembler controls overview 4 21 assembler directives overview 4 19 assembler error messages 6 10 assembler options overview 6 6 assembly programming in C 3 20 assembly syntax 4 3 backend compiler phase 5 5 optimization 5 5 board specification 7 24 buffers circular 3 15 build viewing results 2 16 bus definition 7 23 cC C prepocessor 7 21 cctc 8 4 CCTCOPT 8 8 character 4 4 circular buffers 3 15
78. be checked by the compiler The next example illustrates the definition of a class 6 trap service routine and the corresponding system call Example __syscallfunc 1 int syscall_a int int _ syscallfunc 2 int syscall_b int int int x void main void I m x syscall _a 1 2 causes a trap class 6 with TIN x syscall b 4 3 causes a trap class 6 with TIN 2 int _ trap 6 trap6 int a int b trap class 6 handler int tin _ asm mov 0 d15 d tin put d15 in C variable tin 3 38 TriCore User s Manual switch tin case 1 a b break case 2 a b break default break return a 3 9 2 4 ENABLING INTERRUPT REQUESTS _ enable bisr Enabling interrupt service requests During the execution of an interrupt service routine or trap service routine the system blocks the CPU from taking further interrupt requests You can immediately re enable the system to accept interrupt requests _ interrupt vector _ enable_ isr void __trap class _ enable_ tsr void The compiler generates an enable instruction as first instruction in the routine The enable instruction sets the interrupt enable bit ICR IE in the interrupt control register You can also generate the enable instruction with the __ enable intrinsic function but it is not guaranteed that it will be the first instruction in the routine Enabling interrupt service requests
79. between logical address spaces and buses and the address translations between buses Address spaces A logical address space is a memory range for which the core has a separate way to encode an address into instructions For example the Tricore s 32 bit linear address space encloses 16 24 bit sub spaces and 16 14 bit sub spaces See also the Tricore Architecture Manual sections Memory Model and Addressing Model Most microcontrollers and DSPs support multiple address spaces An address space is a range of addresses starting from zero Normally the size of an address space is to 2N with N the number of bits used to encode the addresses The relation of an address space with another address space can be one of the following e one space is a subset of the other These are often used for small absolute and relative addressing e the addresses in the two address spaces represent different locations so they do not overlap This means the core must have separate sets of address lines for the address spaces For example in Harvard architectures we can identify at least a code and a data memory space Address spaces even nested can have different minimal addressable units MAU alignment restrictions and page sizes All address spaces have a number that identifies the logical space id The following table lists the different address spaces for the TriCore as defined in the LSL file tc arch lsl Using the Linker
80. bss tells the linker to locate the section in address space abs18 and that the section content should be filled with zeros at startup As a result of the pragma section all non volatile the data objects between the pragma pair are placed in zbss non volatile Note that zbss sections are cleared at startup However battery back upped sections should not be cleared and therefore we used the pragma noclear The generated assembly may look like name bat extern printf extern _ printf int sdecl text bat main CODE sect text bat main align 4 Using the Linker global Function main extern main type subl6 a mov u ld w jeg j main _start func al0 8 d15 42480 d0 battery backup_tag d15 d0 L 2 printf main function end size main main function end main End of function End of section sdecl zbss bat uninitialized data DATA sect Zbss bat uninitialized data align 4 global uninitialized data align 2 uninitialized data type object size uninitialized data 4 Space 4 End of section sdecl zdata bat initialized data DATA sect zdata bat initialized data align 4 global initialized data align 2 initialized data type object size initialized data 4 word 1 End of section Sdecl zbss non volatile DATA NOCLEAR sect Zzbss non volatile align 4 global battery backup_ tag align 2 batte
81. c A utility program to maintain update and reconstruct groups of programs The make utility looks whether files are out of date rebuilds them and determines which other files as a consequence also need to be rebuild artc An ELF archiver With this utility you create and maintain object library files 8 4 TriCore User s Manual 8 2 CONTROL PROGRAM The control program cctc is a tool that invokes all tools in the toolchain for you It provides a guick and easy way to generate the final absolute object file out of your C sources without the need to invoke the compiler assembler and linker manually 8 2 1 CALLING THE CONTROL PROGRAM You can only call the control program from the command line The invocation syntax is cctc option file For example cctc v test c The control program calls all tools in the toolchain and generates the absolute object file test elf With the control program option v you can see how the control program calls the tools e ctc bin ctc o test src test c c ctc bin astc o test o test src e ctc bin ltc o test elf ddefault lsl dextmem lsl map file test o Le ctc lib tcl lc lfp lrt By default the control program removes the intermediate output files test src and test o in the example above afterwards unless you specify the command line option t keep temporary files Recognized input files The control program recognizes the following input fi
82. can specify the size of data objects which the compiler then by default places in near memory _ a0 The data object is located in a section that is addressable with a sign extended 16 bit offset from address register A0 _ al The data object is located in a section that is addressable with a sign extended 16 bit offset from address register A1 __a8 The data object is located in a section that is addressable with a sign extended 16 bit offset from address register A8 __ a9 The data object is located in a section that is addressable with a sign extended 16 bit offset from address register A9 Address registers AO A1 A8 and A9 are designated as system global registers They are not part of either context partition and are not saved restored across calls They can be protected against write access by user applications By convention A0 and A1 are reserved for compiler use while A8 and A9 are reserved for OS or application use A0 is used as a base pointer to the small data section where global data elements can be accessed using base offset addressing A0 is initialized by the execution environment A1 is used as a base pointer to the literal data section The literal data section is a read only data section intended for holding address constants and program literal values Like A0 it is initialized by the execution environment As noted A8 and A9 are reserved for OS use or for application use in cases where the application and
83. cept the new project settings Set tool options 1 From the Project menu select Project Options The Project Options dialog appears Here you can specify options that are valid for the entire project To overrule the project options for the currently active file instead from the Project menu select Current File Options GETTING STARTED Getting Started 2 Expand the C Compiler entry The C Compiler entry contains several pages where you can specify C compiler settings m Optimization Processor H Saj saig Optimization level Release purpose default z E ompiler Preprocessing Size speed ease Level 2 Language Guster optimization Debug Information Code Generation Allocation Warnings MISRAC Miscellaneous Assembler PCP Assembler J7 All addresses available for CSE evaluation E Linker Maximum size increment inlining 25 CrossView Pro Maximum size for functions to always inline fi 0 Options string Cte11ib We c99 AWc Ax We g switch gt auto We 02 Wc t2 inline max incr 25 inline max size 10 We NB We l PRODDIR include We s Wc align 1 S OK _ Carca Hep 3 For each page make your changes If you have made all changes click OK amp The Cancel button closes the dialog without saving your changes With the Defaults button you can restore the default project options for the cur
84. ct the invocation of all tools in the toolchain In EDE you only need to set them once The corresponding options for the assembler are listed in table 6 1 To get access to the assembler options 1 From the Project menu select Project Options The Project Options dialog box appears 2 Expand the Assembler entry fill in the various pages and click OK to accept the compiler options The command line variant is shown simultaneously 6 6 The following processor options are available TriCore User s Guide EDE options Command line Target Target processor User defined TriCore 2 FPU present MMU present Ccpu is tricore2 fpu present mmu present Bypasses CPU functional problem bypasses silicon bug bug Startup Automatically add cstart asm to your project EDE only Bus Configuration Initialize bus configuration registers in startup code EDE only Table 6 1 Processor options The following assembler options are available EDE options Command line Preprocessing Select TASKING preprocessor or no preprocessor Define preprocessor macro Include def file m t n Dmacro def no tasking sfr List File Generate list file Include section summary in list file Suboptions for the Generate list file option Lfiags Debug Information No debug information gAHLS Automatic HLL or assembly level debug information
85. d Configuration After installation you are ready to follow the Getting Started in Chapter 2 Next move on with the other chapters which explain how to use the compiler assembler linker and the various utilities Once you are familiar with these tools you can use the Reference Manual to lookup specific options and details to make full use of the TriCore toolchain XII TriCore User s Manual SHORT TABLE OF CONTENTS Chapter 1 Software Installation and Configuration Guides you through the installation of the software Describes the most important settings paths and filenames that you must specify to get the package up and running Chapter 2 Getting Started Overview of the toolchain and its individual elements Describes the relation between the toolchain and specific features of the TriCore Explains step by step how to write compile assemble and debug your application Teaches how you can use projects to organize your files Chapter 3 TriCore C Language The TASKING TriCore C compiler is fully compatible with ISO C This chapter describes the specific TriCore features of the C language including language extensions that are not standard in ISO C For example pragmas are a way to control the compiler from within the C source Chapter 4 TriCore Assembly Language Describes the specific features of the TriCore assembly language as well as directives which are pseudo instructions that are interpreted by the a
86. d func4 double dl int il double d2 int i2 E4 D6 stack D7 All function arguments passed on the stack are aligned on a multiple of 4 bytes As a result the stack offsets for all types except float are compatible with the stack offsets used by a function declared without a prototype Structures up to eight bytes are passed via a data register or data register pair Larger structures are passed via the stack Arithmetic function results of up to 32 bits are returned in the D2 register 64 bit arithmetic types are returned in the register pair D2 D3 E2 Pointers are returned in A2 and circular pointers are returned in A2 A3 When the function return type is a structure it is copied to a return area that is allocated by the caller The address of this area is passed as an implicit first argument in A4 The following table summarize the registers used by the TriCore compiler cte Register Usage Register Usage DO scratch AO global EO D1 scratch Al global TriCore C Language Register Usage Register Usage D2 return register for A2 return register for arithmetic types pointers D3 Ee most significant part of A3 scratch 64 bit result D4 parameter A4 parameter D5 parameter A5 parameter D6 parameter A6 parameter D7 a parameter AT parameter D8 saved register A8 global D9 Ee saved register A9 gl
87. d into a target Address A specification of a location in an address space Address space The set of possible addresses A core can support multiple spaces for example in a Harvard architecture the addresses that identify the location of an instruction refer to code space whereas addresses that identify the location of a data object refer to a data space Architecture A description of the characteristics of a core that are of interest for the linker This encompasses the address space s and the internal bus structure Given this information the linker can convert logical addresses into physical addresses Copy table A section created by the linker This section contains data that specifies how the startup code initializes the data and BSS sections For each section the copy table contains the following fields action defines whether a section is copied or zeroed destination defines the section s address in RAM source defines the sections address in ROM zero for BSS sections length defines the size of the section in MAUs of the destination space Core An instance of an architecture Derivative The design of a processor A description of one or more cores including internal memory and any number of buses Library Collection of relocatable object files Usually each object file in a library contains one symbol definition for example a function Using the Linker Term Definition Logical a
88. ddress LSL file MAU Object code Physical address Processor Relocatable object file Relocation Relocation information Section Section attributes Target Unresolved reference An address as encoded in an instruction word an address generated by a core CPU The set of linker script files that are passed to the linker Minimum Addressable Unit For a given processor the number of bits between an address and the next address This is not necessarily a byte or a word The binary machine language representation of the C source An addresses generated by the memory system An instance of a derivative Usually implemented as a custom chip but can also be implemented in an FPGA in which case the derivative can be designed by the developer Object code in which addresses are represented by symbols and thus relocatable The process of assigning absolute addresses Information about how the linker must modify the machine code instructions when it relocates addresses A group of instructions and or data objects that occupy a contiguous range of addresses Attributes that define how the section should be linked or located The hardware board on which an application is executing A board contains at least one processor However a complex target may contain multiple processors and external memory that may be shared between processors A reference to a symbol for which the linker did not find a def
89. debug directives Function Description CALLS Passes call information to object file Used by the linker to build a call graph TriCore Assembly Language 4 21 4 8 2 OVERVIEW OF ASSEMBLER CONTROLS The following tables provide an overview of all assembler controls For a detailed description see section 3 3 4 Detailed Description of Assembler Controls in Chapter Assembly Language of the Reference Manual Overview of assembler listing controls Function Description LIST ON OFF Generation of assembly list file temporary ON OFF LIST flags Exclude include lines in assembly list file PAGE Generate formfeed in assembly list file PAGE settings Define page layout for assemly list file PRCTL Send control string to printer STITLE program subtitle in header of assembly list ile TITLE Set program title in headerof assembly list file Overview of miscellaneous assembler controls Function Description defect_TCnum ON OFF DEBUG ON OFF DEBUG flags FPU HW_ONLY IDENT LOCAL GLOBAL MMU OBJECT TC2 WARNING OFF num Enable disable assembler check for specified functional problem defect is one of CPU DMU PMI or PMU Generation of symbolic debug ON OFF Generation of symbolic debug ON OFF Allow single precision floating point instructions Prevent substitution of assembly instructions by smaller or faster instructions Assembl
90. direct error messages and verbose messages to a file err file Ignore error codes returned by commands i Redirect messages to standard out instead of standard error W Show extended error messages X Table 8 3 Overview of control program options For a complete list and description of all control program options see section 5 5 Make Utility Options in Chapter Tool Options of the Reference Manual 8 3 2 WRITING A MAKEFILE In addition to the standard makefile makefile the make utility always reads the makefile mktc mk before other inputs This system makefile contains implicit rules and predefined macros that you can use in the makefile makefile amp With the option r Do not read the mktc mk file you can prevent the make utility from reading mktc mk The default name of the makefile is makefile in the current directory If on a UNIX system this file is not found the file Makefile is used as the default If you want to use other makefiles use the option f my_makefile Using the Utilities 8 13 The makefile can contain a mixture of targets and dependencies e rules macro definitions or functions e comment lines include lines e export lines To continue a line on the next line terminate it with a backslash this comment line is continued on the next line If a line must end with a backslash add an empty macro this comment line ends with a backslash EMPTY this is a new
91. e Macro Description _ DOUBLE FP__ Defined when you do not use compiler option F Treat double as float _ SINGLE FP__ Defined when you use compiler option F Treat double as float _ FPU _ Defined when you use compiler option fpu present Use hardware floating point instructions _ CTC __ Identifies the compiler You can use this symbol to flag parts of the source which must be recognized by the ctc compiler only It expands to the version number of the compiler __TASKING__ Identifies the compiler as the TASKING TriCore compiler It expands to 1 _ DSPC__ Indicates conformation to the DSP C standard It expands to 1 _ DSPC VERSION _ Expands to the decimal constant 200001L _ VERSION _ Identifies the version number of the compiler For example if you use version 2 1r1 of the compiler _ VERSION ___ expands to 2001 dot and revision number are omitted minor version number in 3 digits _ REVISION __ Identifies the revision number of the compiler For example if you use version 2 1r1 of the compiler __REVISION__ expands to 1 _ BUILD _ Identifies the build number of the compiler composed of decimal digits for the build number three digits for the major branch number and three digits for the minor branch number For example if you use build 1 22 1 of the compiler _BUILD__ expands to 1022001 If there is no branch number the branch digits expand to zero For exampl
92. e Ccpu Generate symbolic debug information g Use hardware floating point instructions Allow use of TriCore2 instructions Allow use of MMU instructions Enable silicon bug workaround fpu present is tricore2 mmu present silicon bug arg Libraries Add library directory Add library Ignore the default search path for libraries Do not include default list of libraries Ldir llib ignore default library path no default libraries Using the Utilities Do not include the SFR file as indicated by C Description Option Use trapped floating point library fp trap Input files Specify linker script file d file Read options from file f file Add include directory ldir no tasking sfr Output files Redirect diagnostic messages to a file Select final output file C file relocatable output file object file s assembly file s Specify linker output format ELF IEEE Set the address size for linker IHEX SREC files Set linker output space name Keep output file s after errors Do not generate linker map file Specify name of output file Do not delete intermediate temporary files error file cc cl co CS format type address size n space name k no map file o file t Table 8 1 Overview of control program options d gt For a complete list and description of all control program options
93. e build 127 results in 127000000 Table 3 8 Predefined macros TriCore C Language 3 31 3 9 FUNCTIONS 3 9 1 INLINING FUNCTIONS INLINE With the compiler option optimize inline Oi the compiler automatically inlines small functions to reduce execution time The compiler inserts the function body at the place the function is called If the function is not called at all the compiler does not generate code for it With the inline keyword you tell the compiler to inline the function body instead of calling the function Use the __ noinline keyword to tell the compiler not to inline the function body These keywords overrule the compiler option optimize inline You must define inline functions in the same source module as in which you call the function because the compiler only inlines a function in the module that contains the function definition When you need to call the inline function from several source modules you must include the definition of the inline function in each module for example using a header file Example inline int w x y Z inline int add int a int b int i 4 return a b void main void w add 1 2 z add x y The function add is defined before it is called The compiler inserts optimized code for both calls to the add function The generated assembly is 3 32 TriCore User s Manual main movl6 dl15 73 st w w d15 ld w d15 x
94. e called tc since EDE uses this name in the generated LSL file If you want to specify external memory in EDE the custom derivative must contain a bus named fpi bus for the same reason In EDE you have to define a target processor as specified in section 5 4 Calling tbe Compiler in Chapter Using the Compiler EDE places a copy of the selected derivative LSL file in your project directory Any changes you make to the derivative in EDE for example internal memory are made to this file 7 7 6 THE MEMORY DEFINITION DEFINING EXTERNAL MEMORY Once the core architecture is defined in LSL you may want to extend the processor with external or off chip memory You need to specify the location and size of the physical external memory devices in the target system The principle is the same as defining the core s architecture but now you need to fill the memory definition memory name External memory definitions 7 32 TriCore User s Manual memory code_rom Y ym TH 0 mau 8 wn i 16k _ mr mau 8 a memory my_nvsram Figure 7 4 Adding external memory to the TriCore architecture Suppose your embedded system has 16k of external ROM named code_rom and 2k of external NVRAM named my_nvsram See figure above Both memories are connected to the bus fpi_bus In LSL this looks like follows memory code_rom type rom mau 8 size 16k map dest bus X fpi_bus des
95. e definition required In essence an architecture definition describes how the linker should convert logical addresses into physical addresses for a given type of core If the core supports multiple address spaces then for each space the linker must know how to perform this conversion In this context a physical address is an offset on a given internal or external bus Additionally the architecture definition contains information about items such as the hardware stack and the interrupt vector table This specification is normally written by Altium For each TriCore core architecture a separate LSL file is provided These are tclv1_2 1s1 tclv1_3 lsl and tc2 1s1 These files include and extend the generic architecture file tc_arch 1s1 The generic file tc_arch 1s1 includes an interrupt vector table inttab 1s1 and an trap vector table traptab lsl Using the Linker 7 23 The architecture definition of the LSL file should not be changed by you unless you also modify the core s hardware architecture If the LSL file describes a multi core system an architecture definition must be available for each different type of core The derivative definition required The derivative definition describes the configuration of the internal on chip bus and memory system Basically it tells the linker how to convert offsets on the buses specified in the architecture definition into offsets in internal memory A derivative definition must be prese
96. e flag and pragma endoptimize Nesting is allowed pragma optimize e Enable expression simplification C source pragma optimize c Enable common expression elimination Expression e C source simplification still enabled pragma endoptimize Disable common expression kes elimination pragma endoptimize Disable expression simplification The compiler optimizes the code between the pragma pair as specified You can enable or disable the optimizations described below The command line option for each optimization is given in brackets See also option O optimize in section 5 1 Compiler Options of Chapter Tool Options of the TriCore Reference Manual Generic optimizations frontend Common subexpression elimination CSE option Oc OC The compiler detects repeated use of the same sub expression Such a common expression is replaced by a variable that is initialized with the value of the expression to avoid recomputation This method is called common subexpression elimination CSE Expression simplification option Oe OE Multiplication by 0 or 1 and additions or subtractions of 0 are removed Such useless expressions may be introduced by macros or by the compiler itself for example array subscription Constant propagation option Op OP A variable with a known constant value is replaced by that value Using the Compiler 5 7 Function Inlining option
97. e installation directory CCTCBIN With this variable you specify the directory in which the control program cctc looks for the executable tools The path you specify here should match the path that you specified for the PATH variable CCTCOPT With this variable you specify options and or arguments to each invocation of the control program cctc The control program processes these arguments before the command line arguments 1 10 TriCore User s Manual Environment Description Variable LIBTC1V1_2 With this variable you specify one or more LIBTC1V1_3 alternative directories in which the linker Ite looks for LIBTC2 library files for a specific core The linker first looks in these directories then always looks in the default lib directory LM_LICENSE_FILE With this variable you specify the location of the license data file You only need to specify this variable if the license file is not on its default location c lex1m for Windows usr local flexlm licenses for UNIX TASKING_LIC_WAIT If you set this variable the tool will wait for a license to become available if all licenses are taken If you have not set this variable the tool aborts with an error message Only useful with floating licenses TMPDIR With this variable you specify the location where programs can create temporary files Usually your system already uses this variable In this case you do not need to change it
98. e section 8 3 2 Writing a Makefile The makefile contains the relationships among your files called dependencies and the commands that are necessary to create each of the files called rules Typically the absolute object file elf is updated when one of its dependencies has changed The absolute file depends on o files and libraries that must be linked together The o files on their turn depend on src files that must be assembled and finally src files depend on the C source files c that must be compiled In the makefile makefile this looks like test src test c dependency ctc test c rule test o test src astc test src test elf test o ltc otest elf test o lc lfp lrt 8 10 TriCore User s Manual You can use any command that is valid on the command line as a rule in the makefile So rules are not restricted to invocation of the toolchain Example amp amp e To build the target test e1f call mktc with one of the following lines mktc test elf mktc f mymake mak test elf By default the make utility reads makefile so you do not need to specify it on the command line If you want to use another name for the makefile use the option f my_makefile If you do not specify a target mktc uses the first target defined in the makefile In this example it would build test src instead of test elf The make utility now tries to build test e1f based on the makefile and peforms the following st
99. ect Project Options The Project Options dialog box appears 2 Expand the Linker entry and select Optimization You can enable or disable the optimizations described below The command line option for each optimization is given in brackets See also option O optimize in section 5 3 Linker Options in Chapter Tool Options of the TriCore Reference Manudl First fit decreasing option Ol OL When the physical memory is fragmented or when address spaces are nested it may be possible that a given application cannot be located although the size of available physical memory is larger than the sum of the section sizes Enable the first fit decreasing optimization when this occurs and re link your application The linker s default behavior is to place sections in the order that is specified in the LSL file that is working from low to high memory addresses or vice versa This also applies to sections within an unrestricted group If a memory range is partially filled and a section must be located that is larger than the remainder of this range then the section and all subseguent sections are placed in a next memory range As a result of this gaps occur at the end of a memory range When the first fit decreasing optimization is enabled the linker will first place the largest sections in the smallest memory ranges that can contain the section Small sections are located last and can likely fit in the remaining gaps 7 10 TriCore User
100. ed Because shorter instructions may influence the number of cycles you may want to disable this option when you have written timed code In that case the assembler encodes all instructions as they are Optimize instruction size option Os OS When this option is enabled the assembler tries to find the shortest possible operand encoding for instructions By default this option is enabled Using the Assembler 6 5 6 4 CALLING THE ASSEMBLER EDE uses a makefile to build your entire project You can set options specific for the assembler After you have build your project the output files of the assembling step are available in your project directory To assemble your program click either one of the following buttons Assembles the currently selected assembly file asm or src This results in a relocatable object file o Builds your entire project but looks whether there are already files available that are needed in the building process If so these files will not be generated again which saves time Builds your entire project unconditionally All steps necessary to obtain the final e1f file are performed To access the TriCore processor options 1 From the Project menu select Project Options Tbe Project Options dialog box appears 2 Expand the Processor entry fill in the Processor Definition page and optionally the Startup page and click OK to accept the processor options Processor options affe
101. elect Debug Information 3 Enable the option Generate symbolic debug information Using the Compiler 5 17 4 Click OK to accept the new project settings EE ctc g Due to different compiler opimizations it might be possible that certain debug information is optimized away Therefore it is best to specify No optimization O0 when you want to debug your application 1 From the Project menu select Project Options The Project Options dialog box appears 2 Expand the C Compiler entry and select Optimization 3 In the Optimization level box select No optimization 5 7 C CODE CHECKING MISRA C db The C programming language is a standard for high level language programming in embedded systems yet it is considered somewhat unsuitable for programming safety related applications Through enhanced code checking and strict enforcement of best practice programming rules TASKING MISRA C code checking helps you to produce more robust code MISRA C specifies a subset of the C programming language which is intended to be suitable for embedded automotive systems It consists of a set of rules defined in MISRA C 2004 Guidelines for the Use of the C Language in Critical Systems Motor Industry Research Association MIRA 2004 The compiler also supports MISRA C 1998 the first version of MISRA C You can select this version with the following C compiler option misrac version 1998 For a complete overview of all M
102. ename sections You can change the default section names with one of the following pragmas pragma section type string All sections of the specified type will be named prefix string For example pragma section neardata where all sections of type neardata have the name zdata where pragma section type will restore the default section naming for sections of this type pragma section type restore will restore the previous setting of pragma section type pragma section all string All sections will be named prefix string unless you use a type specific renaming pragma For example pragma section all here all sections have the syntax preffx here For example sections of type neardata have the name zdata here pragma section all will restore the default section naming not for sections that have a type specific renaming pragma pragma section all restore will restore the previous setting of pragma section all Example pragma section all rename_1 text rename_l data rename_l pragma section code rename 2 text rename 2 data rename_l d gt See also compiler option R in section Compiler Options in Chapter Tool Options of the Reference Manual TriCore C Language 3 45 Influence section definition The following pragmas also influence the section definition pragma section code init Code sections are copied from ROM to RAM at prog
103. ent program location counter A label can consist of letters digits and underscore characters _ The first character cannot be a digit A label which is prefixed by whitespace spaces or tabs has to be followed by a colon The size of an identifier is only limited by the amount of available memory Note that if you use a reserved symbol as a label it has to be followed by a colon Examples LAB1 This label is followed by a colon and can start with a space or tab LAB1 This label has to start at the beginning of a line 4 4 7 TriCore User s Manual instruction An instruction consists of a mnemonic and zero one or more operands It must not start in the first column Operands are described in section 4 4 Operands of an Assembly Instruction The instructions are described in the TriCore Architecture Manuals Examples ret No operand call label One operand mov DO 1 Two operands jne DO 0 loop Three operands madd D2 D3 D0 D1 Four operands insert D1 D2 3 16 2 Five operands directive With directives you can control the assembler from within the assembly source These must not start in the first column Directives are described in section 4 8 Assembler Directives and Controls macro_call A call to a previously defined macro It must not start in the first column Macros are described in section 4 10 Macro Operations You can use empty lines or lines with only comments Apart from the assembly sta
104. ent they are read by the make utility Normally macros are not expanded until the moment they are actually used Special Targets There are a number of special targets Their names begin with a period DEFAULT If you call the make utility with a target that has no definition in the makefile this target is built DONE When the make utility has finished building the specified targets it continues with the rules following this target IGNORE _ Non zero error codes returned from commands are ignored Encountering this in a makefile is the same as specifying the option i on the command line NIT The rules following this target are executed before any other targets are built SILENT Commands are not echoed before executing them Encountering this in a makefile is the same as specifying the option s on the command line SUFFIXES This target specifies a list of file extensions Instead of building a completely specified target you now can build a target that has a certain file extension Implicit rules to build files with a number of extensions are included in the system makefile mktc mk Using the Utilities 8 15 If you specify this target with dependencies these are added to the existing SUFFIXES target in mktc mk If you specify this target without dependencies the existing list is cleared PRECIOUS Dependency files mentioned for this target are never removed Normally if a command in a rule returns an erro
105. enumeration d gt See also the TriCore Embedded Applications Binary Interface EABI 3 2 2 FRACTIONAL DATA TYPES The TASKIN G TriCore C compiler cte additionally supports the following fractional types Type Keyword ah On Ranges Fract __sfract 16 16 1 1 gt __fract 32 32 1 1 gt Accum _ laccum 64 32 131072 131072 gt Table 3 2 Fractional Data Types The __sfract type has 1 sign bit 15 mantissa bits The __ fract type has 1 sign bit 31 mantissa bits The __ laccum type has 1 sign bit 17 integral bits 46 mantissa bits amp The __ accum type is only included for compatibility reasons and is mapped to __ laccum The TASKING C compiler ctc fully supports fractional data types which allow you to use normal expressions 3 6 amp TriCore User s Manual _ fract f fl f2 Declaration of fractional variables fl 0 5 Assignment of a fractional constants f2 0 242 f fl 2 Multiplication of two fractionals The TriCore instruction set supports most basic operation on fractional types directly To obtain more portable code you can use several intrinsic functions that use fractional types Fractional values are automatically saturated Section 3 5 Jnirinsic Functions explains intrinsic functions Section 1 5 2 Fractional Arithmetic Support in Chapter TriCore C Language of the Reference Manual lists the intrinsic functions Promotion rules
106. eps 1 From the makefile the make utility reads that test elf depends on test o 2 If test o does not exist or is out of date the make utility first tries to build this file and reads from the makefile test o depends on test src 3 If test src does exist the make utility now creates test o by executing the rule for it astc test src 4 There are no other files necessary to create test elf so the make utility now can use test o to create test elf by executing the rule ltc otest elf test o lc lfp lrt The make utility has now built test e1 but it only used the assembler to update test o and the linker to create test elf If you compare this to the control program cctc test c This invocation has the same effect but now d files are recompiled assembled linked and located Using the Utilities 8 11 8 3 1_ CALLING THE MAKE UTILITY You can only call the make utility from the command line The invocation syntax is mktc options targets macro def For example mktc test elf target You can specify any target that is defined in the makefile A target can also be one of the intermediate files specified in the makefile macro def Macro definition This definition remains fixed for the mktc invocation It overrides any regular definitions for the specified macro within the makefiles and from the environment It is inherited by subordinate mkte s but act as an environment variable for these That is
107. er Directives in Chapter Assembly Language of the Reference Manual 4 10 5 CONDITIONAL ASSEMBLY IF ELIF AND ELSE DIRECTIVES With the conditional assembly directives you can instruct the macro preprocessor to use a part of the code that matches a certain condition You can specify assembly conditions with arguments in the case of macros or through definition of symbols via the DEFINE SET and EOU directives 4 32 d gt TriCore User s Manual The built in functions of the assembler provide a versatile means of testing many conditions of the assembly environment You can use conditional directives also within a macro definition to check at expansion time if arguments fall within a certain range of values In this way macros become self checking and can generate error messages to any desired level of detail The conditional assembly directive IF has the following form IF expression ELIF expression the ELIF directive is optional ELSE the ELSE directive is optional ENDIF The expression must evaluate to an absolute integer and cannot contain forward references If expression evaluates to zero the IF condition is considered FALSE Any non zero result of expression is considered as TRUE For a detailed description of these directives see section 3 3 Assembler Directives in Chapter Assembly Language of the Reference Manual USING THE COMPILER all TASKING M dald
108. er treats labels by default as local or global Allow memory management instructions Alternative name for the generated object file Allow TriCore 2 instructions Suppress all or some warnings 4 22 TriCore User s Manual 4 9 WORKING WITH SECTIONS db Sections are absolute or relocatable blocks of contiguous memory that can contain code or data Some sections contain code or data that your program declared and uses directly while other sections are created by the compiler or linker and contain debug information or code or data to initialize your application These sections can be named in such a way that different modules can implement different parts of these sections These sections are located in memory by the linker using the linker script language LSL so that concerns about memory placement are postponed until after the assembly process All instructions and directives which generate data or code must be within an active section The assembler emits a warning if code or data starts without a section definition and activation The compiler automatically generates sections If you program in assembly you have to define sections yourself For more information about locating sections see section 7 7 7 The Section Layout Definition Locating Sections in chapter Using the Linker Section definition Sections are defined with the SDECL directive and have a name A section may have attributes to instruct the linker
109. es this information and can consist of line numbers C source code local symbols and descriptions of data structures The linker resolves the external references between the supplied relocatable object files and or libraries and combines the files into a single relocatable linker object file The linker starts its task by scanning all specified relocatable object files and libraries If the linker encounters an unresolved symbol it remembers its name and continues scanning The symbol may be defined elsewhere in the same file or in one of the other files or libraries that you specified to the linker If the symbol is defined in a library the linker extracts the object file with the symbol definition from the library This way the linker collects all definitions and references of all of the symbols Using the Linker 727 Next the linker combines sections with the same section name and attributes into single sections The linker also substitutes external symbol references by relocatable numerical addresses where possible At the end of the linking phase the linker either writes the results to a file a single relocatable object file or keeps the results in memory for further processing during the locating phase The resulting file of the linking phase is a single relocatable object file out If this file contains unresolved references you can link this file with other relocatable object files o or libraries a to resolve t
110. et the environment variable MAKEFLAGS the set of options is processed before any command line options You can pass this macro explicitly to nested mktc s but it is also available to these invocations as an environment variable PRODDIR Holds the name of the directory where mktc is installed You can use this macro to refer to files belonging to the product for example a library source file DOPRINT PRODDIR lib src doprint c When mktc is installed in the directory ctc bin this line expands to DOPRINT ctc lib src doprint c Using the Utilities 8 19 SHELLCMD Holds the default list of commands which are local to the SHELL If a rule is an invocation of one of these commands a SHELL is automatically spawned to handle it TMP_CCPROG Holds the name of the control program cctc If this macro and the TMP_CCOPT macro are set and the command line argument list for the control program exceeds 127 characters then mktc creates a temporary file with the command line arguments mktc calls the control program with the temporary file as command input file TMP_CCOPT Holds f the control program option that tells it to read options from a file This macro is only available for the Windows command prompt version of mktc This macro translates to a dollar sign Thus you can use in the makefile to represent a single There are several dynamically maintained macros that are useful as abbreviations within ru
111. ferent for the cores For the TriCore the variable will be defined and you can access it in the usual way For the PCP when you would use the variable directly in your TriCore source this would use an incorrect address PCP address The linker can map the address of the variable from one space to another if you prefix the variable name with _Ic_s_ 7 40 TriCore User s Manual When a symbol foo is defind in a PCP assembly source file by default it gets the symbol name foo To use this symbol from a TriCore C source file write extern long _lc s foo int main int argc char argv _lc s foo 7 Example refer to the stack Suppose in an LSL file a user stack section is defined with the name ustack with the keyword stack You can refer to the begin and end of the stack from your C source as follows include lt stdio h gt extern char _lc ub ustack extern char _lc ue ustack int main printf Size of user stack is d n _lc ue ustack _lc ub ustack From assembly you can refer to the end of the user stack with extern _lc ue ustack user stack end Using the Linker 7 41 7 9 GENERATING A MAP FILE The map file is an additional output file that contains information about the location of sections and symbols You can customize the type of information that should be included in the map file To generate a map file 1 From the Project menu select Project Options Tbe
112. file extensions of the files that are reguired to build the target Implicit Rules Implicit rules are stored in the system makefile mktc mk and are intimately tied to the SUFFIXES special target Each dependency that follows the SUFFIXES target defines an extension to a filename which must be used to build another file The implicit rules then define how to actually build one file from another These files share a common basename but have different extensions Using the Utilities 8 17 If the specified target on the command line is not defined in the makefile or has not rules in the makefile the make utility looks if there is an implicit rule to build the target Example This makefile says that prog out depends on two files prog o and sub o and that they in turn depend on their corresponding source files prog c and sub c along with the common file inc h LIB lc macro prog elf prog o sub o ltc prog o sub o LIB o prog elf prog o prog c inc h ctc prog c astc prog src sub o sub c inc h ctc sub c astc sub src The following makefile uses implicit rules from mktc mk to perform the same job LKFLAGS lc macro used by implicit rules prog elf prog o sub o implicit rule used prog o prog c inc h implicit rule used sub o sub c inc h implicit rule used Files makefile Description of dependencies and rules Makefile Alternative to makefile for UNIX mktc mk Default dependencies and rules
113. for C show c compilations warnings C Language ISO C standard 90 or 99 default 99 iso 90 99 Treat external definitions as static static Single precision floating point F Double precision floating point use double precision fp C Language Treat C files as C files force c Force C compilation and linking force c Force invocation of C muncher Force invocation of C prelinker force munch force prelink TriCore User s Manual Description Option Show the list of object files handled by the C prelinker Copy C prelink ii files from outside the current directory Use only C prelink files in the current directory Remove C instantiation flags after prelinking Enable C exception handling C instantiation mode C instantiation directory C instantiation file Disable automatic C instantiation Allow multiple instantiations in a single object file list object files prelink copy if nonlocal prelink local only prelink remove instantiation flags exceptions instantiate type instantiation dir dir instantiation file file no auto instantiation no one instantiat ion per object Preprocessing Define preprocessor macro Dmacro def Remove preprocessor macro Umacro Store the C compiler preprocess output file pre Eflag Code generation Select CPU typ
114. g skeleton architecture TC1V1 3 Specification of the TC1v1 3 core architecture Written by Altium Using the Linker 7 25 derivative X derivative name is arbitrary Specification of the derivative Written by Altium core tc always specify the core architecture TClV1 3 bus fpi_bus internal bus maps to fpi bus in tc core internal memory processor spe processor name is arbitrary derivative X You can omit this part except if you use a multi core system memory ext_name external memory definition section_layout spe tc linear section layout section placement statements sections are located in address space linear of core tc of processor spe 7 26 TriCore User s Manual 7 7 4 THE ARCHITECTURE DEFINITION SELF DESIGNED CORES Although you will probably not need to program the architecture definition unless you are building your own processor core it helps to understand the Linker Script Language and how the definitions are interrelated Within an architecture definition the characteristics of a target processor core that are important for the linking process are defined These include e space definitions the logical address spaces and their properties e bus definitions the I O buses of the core architecture e mappings the address translations between logical address spaces the connections
115. gger with getstart elf and see how it executes Start CrossView Pro e Click on the Debug application button El CrossView Pro is launched Cross View Pro will automatically download the file getstart elf for debugging d gt See the CrossView Pro Debugger User s Manual for more information TRICORE C LANGUAGE all TASKING M daldVHD TriCore C Language 3 3 3 1 INTRODUCTION The TASKING C cross compiler ctc fully supports the ISO C standard and adds extra possibilities to program the special functions of the TriCore In addition to the standard C language the compiler supports the following extra data types like __ fract __ laccum and __ packb intrinsic built in functions that result in TriCore specific assembly instructions pragmas to control the compiler from within the C source predefined macros the possibility to use assembly instructions in the C source keywords to specify memory types for data and functions attributes to specify alignment and absolute addresses All non standard keywords have two leading underscores ___ In this chapter the TriCore specific characteristics of the C language are described including the above mentioned extensions 3 2 DATA TYPES 3 2 1 FUNDAMENTAL DATA TYPES The TriCore architecture defines the following fundamental data types An 8 bit byte A 16 bit short A 32 bit word A 64 bit double word The next table shows the map
116. he default include directory relative to the installation directory 6 7 GENERATING A LIST FILE The list file is an additional output file that contains information about the generated code With the options in the List File page of the Assembler entry in the Project Options dialog you choose to generate a list file or to skip it I option You can also customize the amount and form of information L option If the assembler generates errors or warnings these are reported in the list file just below the source line that caused the error or warning 6 10 TriCore User s Guide See section 6 1 Assembler List File Format in Chapter List File Formats of the Reference Guide for an explanation of the format of the list file Example astc l test src With this command the list file test lst is created 6 8 ASSEMBLER ERROR MESSAGES The assembler produces error messages of the following types F Fatal errors After a fatal error the assembler immediately aborts the assembling process E Errors Errors are reported but the assembler continues assembling No output files are produced unless you have set the assembler option keep output files the resulting output file may be incomplete W Warnings Warning messages do not result into an erroneous assembly output file They are meant to draw your attention to assumptions of the assembler for a situation which may not be correct You can control warnings i
117. he remaining unresolved references With the linker command line option link only you can tell the linker to only perform this linking phase and skip the locating phase The linker complains if any unresolved references are left 7 2 2 PHASE 2 LOCATING In the locating phase the linker assigns absolute addresses to the object code placing each section in a specific part of the target memory The linker also replaces references to symbols by the actual address of those symbols The resulting file is an absolute object file which you can actually load into a target memory Optionally when the resulting file should be loaded into a ROM device the linker creates a so called copy table section which is used by the startup code to initialize the data and BSS sections Code modification When the linker assigns absolute addresses to the object code it needs to modify this code according to certain rules or relocation expressions to reflect the new addresses These relocation expressions are stored in the relocatable object file Consider the following snippet of x86 code that moves the contents of variable a to variable b via the eax register Al 3412 0000 mov a eax a defined at 0x1234 byte reversed A3 0000 0000 mov eax b bis imported so the instruction refers to 0x0000 since its location is unknown Now assume that the linker links this code so that the section in which a is located is relocated by 0x10000 bytes and b turns out t
118. he TriCore instruction set supports some operations of the __ bit type directly The following rules apply to __ bit type variables A _ bit type variable is always unsigned A _ bit type variable can be exchanged with all other type variables The compiler generates the correct conversion A _ bit type variable is like a boolean Therefore if you convert an int type variable to a __ bit type variable it becomes 1 true if the integer is not equal to 0 and 0 false if the integer is 0 The next two C source lines have the same effect bit variable int_variable bit_variable int_variable 1 0 Pointer to __ bit is not allowed when it has the __ atbit qualifier The __ bit type is allowed as a structure member A __ bit type variable is allowed as a parameter of a function A _ bit type variable is allowed as a return type of a function A __bit typed expression is allowed as switch expression The sizeof ofa _ bit type is 1 3 8 TriCore User s Manual e Global or static __ bit type variable can be initialized e A__ bit type variable can be declared absolute using the __ atbit attribute See section 3 3 2 Declare a Data Object at an Absolute Address _ at and __ albit for more details e A_ bit type variable can be declared volatile Promotion Rules For the __ bit type the promotion rules are similar to the promotion rules for char short int long and long long 3 2 4 PACKED DATA TYPES The
119. iCore User s Manual BUILT IN ASSEMBLY FUNCTIONS The assembler has several built in functions to support data conversion string comparison and math computations You can use functions as terms in any expression Functions have the following syntax Syntax of an assembly function GOfunctiion name argument argumeni Functions start with the character and have zero or more arguments and are always followed by opening and closing parentheses White space a blank or tab is not allowed between the function name and the opening parenthesis and between the comma separated arguments The built in assembler functions are grouped into the following types Mathematical functions comprise among others transcendental random value and min max functions Conversion functions provide conversion between integer floating point and fixed point fractional values String functions compare strings return the length of a string and return the position of a substring within a string Macro functions return information about macros Address calculation functions return the high or low part of an address Assembler mode functions relating assembler operation The following tables provide an overview of all built in assembler functions For a detailed description of these functions see section 3 2 Built in Assembly Function in Chapter Assembly Language of the Reference Manual TriCore Assembly Language Overvie
120. iable will be performed using saturating arithmetic When an operation is performed on a plain variable and a __ sat variable the __ sat takes precedence and the operation is done using saturating arithmetic The type of the result of such an operation also includes the qualifier __ sat so that another operation on the result will also be saturated In this respect the behavior of the type gualifier __ sat is comparable to the unsigned keyword You can overrule this behavior by inserting type casts with or without the type qualifier _ sat in an expression You can only use the type qualifier __ sat on type int fractional types are always saturated Care should be taken when combining signed and unsigned integers since no saturation between signed and unsigned is done Examples _sat int si 0x7FFFFFFF int i 0x12345 unsigned int ui OxFFFFFFFF si i a saturated addition is performed yielding a saturated int TriCore C Language 3 19 si ui a saturated unsigned addition is performed yielding a saturated unsigned int i ui a normal unsigned addition is performed yielding an unsigned int 3 5 INTRINSIC FUNCTIONS Some specific TriCore assembly instructions have no equivalence in C Intrinsic functions give the possibility to use these instructions Intrinsic functions are predefined functions that are recognized by the compiler The compiler then generates the most efficient assembly code for the
121. ibrary in the current directory only 7 4 3_ HOW THE LINKER EXTRACTS OBJECTS FROM LIBRARIES A library built with arte always contains an index part at the beginning of the library The linker scans this index while searching for unresolved externals However to keep the index as small as possible only the defined symbols of the library members are recorded in this area 7 18 TriCore User s Manual When the linker finds a symbol that matches an unresolved external the corresponding object file is extracted from the library and is processed After processing the object file the remaining library index is searched If after a complete search of the library unresolved externals are introduced the library index will be scanned again After all files and libraries are processed and there are still unresolved externals and you did not specify the linker option no rescan all libraries are rescanned again This way you do not have to worry about the library order on the command line and the order of the object files in the libraries However this rescanning does not work for weak symbols If you use a weak symbol construction like printf in an object file or your own library you must position this object library before the C library The v option shows how libraries have been searched and which objects have been extracted Resolving symbols If you are linking from libraries only the objects that contain symbol definitio
122. ignment Please note that this means that you will have to use your own initialization code Furthermore you will have to remove the copy_unit 4 part of the copytable declaration within the LSL file TriCore C Language 3 47 3 11 SWITCH STATEMENT ctc supports three ways of code generation for a switch statement a jump chain linear switch a jump table or a lookup table A jump chain is comparable with an if else if else if else construction A jump table is a table filled with target addresses for each possible switch value The switch argument is used as an index within this table A lookup table is a table filled with a value to compare the switch argument with and a target address to jump to A binary search lookup is performed to select the correct target address By default the compiler will automatically choose the most efficient switch implementation based on code and data size and execution speed You can influence the selection of the switch method with compiler option t tradeoff which determines the speed size tradeoff It is obvious that especially for large switch statements the jump table approach executes faster than the lookup table approach Also the jump table has a predictable behavior in execution speed No matter the switch argument every case is reached in the same execution time However when the case labels are distributed far apart the jump table becomes sparse wasting code memory The compi
123. ilities for an extensive description of the make utility and makefiles 3 Assuming the lib sre tc2 libc directory is still the current working directory type mktc to build the library The new library is created in the 1ib sre tc2 libe directory 4 Make a backup copy of the original library and copy the new library to the 1ibXtc2 directory of the product 3 54 C LANGUAGE TriCore User s Manual TRICORE ASSEMBLY LANGUAGE all TASKING M daldVHD TriCore Assembly Language 4 3 4 1 INTRODUCTION In this chapter the most important aspects of the TriCore assembly language are described For a complete overview of the TriCore2 architecture refer to the 77iCore2 Architecture Overview Handbook 2002 Infineon 4 2 ASSEMBLY SYNTAX An assembly program consists of zero or more statements A statement may optionally be followed by a comment Any source statement can be extended to more lines by including the line continuation character as the last character on the line The length of a source statement first line and continuation lines is only limited by the amount of available memory Mnemonics and directives are case insensitive Labels symbols directive arguments and literal strings are case sensitive The syntax of an assembly statement is label instruction directive macro_call comment label A label is a special symbol which is assigned the value and type of the curr
124. in exe manually In the License Administrator follow the steps to Import a license key received from Altium by E mail The License Administrator creates a license file for you Create a license file manually B If you prefer to create a license file manually create a file called License dat in the c Xflexlm directory using an ASCII editor and insert the license key information received by E mail in this file This file is called the license file If the directory c flex1m does not exist create the directory If you wish to install the license file in a different directory see section 1 4 4 Modifying the License File Location 1 14 amp TriCore User s Manual If you already have a license file add the license key information to the existing license file If the license file already contains any SERVER lines you must use another license file See section 1 4 4 Modifying tbe License File Location for additional information The software product and license file are now properly installed 1 4 3 INSTALLING FLOATING LICENSES If you do not have received your license key read section 1 4 1 Obtaining License Information before continuing Install the TASKING software product following the installation procedure described earlier in this chapter on each computer or workstation where you will use the software product On each PC or workstation where you will use the TASKING software product the locati
125. in the output file until all o files are linked and the final out or e1f file has been reached The option r for incremental linking also suppresses warnings and errors because of unresolved symbols 7 6 LINKING THE C STARTUP CODE You need the run time startup code to build an executable application The default startup code consists of the following components e Initialization code This code is executed when the program is initiated and before the function main is called e Exit code This controls the closedown of the application after the program s main function terminates e Tbe trap vector table This contains default trap vectors See also section 3 9 2 Interrupt and Trap Functions in Chapter TriCore C Language The startup code is part of the C library libc a and the source is present in the file cstart asm in the directory lib src If the default run time startup code does not match your configuration you need to modify the startup code accordingly To link the default startup code 1 From the Project menu select Project Options The Project Options dialog box appears 2 Expand the Linker entry and select Libraries 3 Enable the option Link default C libraries 4 Click OK to accept the linker options 7 20 TriCore User s Manual To use your own startup code 1 Make a copy backup of the file lib src cstart asm 2 From the Project menu select Project Options The Project Options dialog box ap
126. in the C source and pass C variables as operands to the assembly code Be aware that C modules that contain assembly are not portable and harder to compile in other environments The compiler does not interpret assembly blocks but passes the assembly code to the assembly source file Possible errors can only be detected by the assembler General syntax of tbe _ asm keyword __asm instruction template output param list input param list register save list instruction_template Assembly instructions that may contain parameters from the input list or output list in the form parm_nr parm_nr regnum Parameter number in the range 0 9 With the a E 8 optional regnum you can access an individual register from a register pair or register quad For example with register pair d0 d1 0 selects register d0 output param _list amp constraint_char C_expression input_param_list constraint_char C_expression amp Says that an output operand is written to before the inputs are read so this output must not be the same register as any input TriCore C Language 3 21 constraint _char Constraint character the type of register to be used for the C_expression see table 3 6 C_expression Any C expression For output parameters it must be an lvalue that is something that is legal to have on the left side of an assignment register_save_list Pregister_name register
127. ing message A description of tbe selected message appears Ee ctc diag format all number See compiler option diag in section 5 1 Compiler Options in Chapter Tool Options of the TriCore Reference Manudl USING THE ASSEMBLER all TASKING M daldVHD Using the Assembler 6 3 6 1 INTRODUCTION The TriCore toolset contains two assemblers a TriCore assembler and a PCP assembler The syntax and rules for both assemblers are almost the same In the remainder of the manual it is clearly explained where they differ The assembler converts hand written or compiler generated assembly language programs into machine language using the Executable and Linking Format ELF for object files The assembler takes the following files for input and output assembly file 7 e SIC assemblyfile asm hand coded assembler gt listfile lst astc l gt error messages ers relocatable object file eO Figure 6 1 Assembler This chapter first describes the assembly process The various assembler optimizations are described in the second section Third it is described how to call the assebmler and how to use its options An extensive list of all options and their descriptions is included in the Reference Guide Finally a few important basic tasks are described 6 2 ASSEMBLY PROCESS The assembler generates relocatable output files with the extension o These files se
128. inition yet Table 7 1 Glossary of terms 7 5 7 6 TriCore User s Manual 7 7 2 1 PHASE 1 LINKING The linker takes one or more relocatable object files and or libraries as input A relocatable object file as generated by the assembler contains the following information e Header information Overall information about the file such as the code size name of the source file it was assembled from and creation date e Object code Binary code and data divided into various named sections Sections are contiguous chunks of code or data that have to be placed in specific parts of the memory The program addresses start at zero for each section in the object file e Symbols Some symbols are exported defined within the file for use in other files Other symbols are imported used in the file but not defined external symbols Generally these symbols are names of routines or names of data objects e Relocation information A list of places with symbolic references that the linker has to replace with actual addresses When in the code an external symbol a symbol defined in another file or in a library is referenced the assembler does not know the symbol s size and address Instead the assembler generates a call to a preliminary relocatable address usually 0000 while stating the symbol name e Debug information Other information about the object code that is used by a debugger The assembler optionally generat
129. ions Command line Language ISO C standard 90 or 99 default 99 c 90 99 Treat char variables as unsigned instead of signed u Use 32 bits integers for enumeration integer enumeration Single precision floating point treat double as float F Double precision floating point control program option use double precision fp Language extensions Aflag Allow C style comments in C source Ap Allow relaxed const check for string literals Ax Debug Information Generate symbolic debug information g Code Generation Algorithm for switch statements Choose optimal code switch auto Generate jump tables Use linear jump code Generate lookup tables Minimum alignment Generate a section for each data object Call functions indirectly Call run time functions indirectly switch jumptab switch linear switch lookup align value section per data object indirect indirect runtime Optimization No optimization Debug purpose optimization Release purpose optimization default Aggressive optimization Custom optimization Size speed trade off default speed 0 All addresses available for CSE evaluation Maximum size increment inlining Maximum size for functions to always inline 00 01 02 03 Oflag t 0 1 2 3 4 cse all addresses inline max incr inline max size 5 14 TriCore User s Manual EDE options Command li
130. ip memory Core Each derivative must have a specification of its core architecture This core architecture must be defined somewhere in the LSL file s core tc architecture TC1V1 3 Bus Each derivative must contain a bus definition for connecting external memory In this example the bus fpi_bus maps to the bus fpi_bus defined in the architecture definition of core tc 7 30 TriCore User s Manual bus fpi bus mau 8 width 32 map dest bus tc fpi bus dest_offset 0 size 4G Memory 0xF0020000 h NY code N p 4 0 N mau 8 Uae An ON 0x04000 Figure 7 3 Internal memory definition for a derivalive According to the drawing the TriCore contains internal memory called pcode with a size 0x04000 16k This is physical memory which is mapped to the internal bus pep_code_bus and to the fpi_bus so both the tc unit and the pcp can access the memory memory pcode mau 8 size 16k type ram map dest bus tc fpi_bus dest_offset 0xF0020000 size 16k map dest bus tc pcp code bus size 16k Using the Linker 7 31 This completes the LSL code in the derivative definition Note that all code above goes into the derivative definition thus between derivative X name of derivative All code above goes here amp If you want to create a custom derivative and you want to use EDE to select sections the core of the derivative must b
131. ision of the first operand by the second With integers the divide operation produces a truncated integer modulo Integer only yields the remainder from a division of the first operand by the second addtion Yields the sum of its operands subtraction Yields the difference of its operands TriCore Assembly Language Type Oper Name Description ator Shift lt lt shift left Integer only shifts the left operand to the left zero filled by the number of bits specified by the right operand gt gt shift right Integer only shifts the left operand to the right sign bit extended by the number of bits specified by the right operand Relational lt less than If the indicated condition is lt less or equal True result is an integer 1 gt greater than False result is an integer O gt greater or equal Be cautious when you use e floating point values in an equality qual test rounding errors can cause l not equal unexpected results Bitwise amp AND Integer only yields bitwise AND OR Integer only yields bitwise OR exclusive OR Integer only yields bitwise exclusive OR Logical amp amp logical AND Returns an integer 1 if both operands are nonzero otherwise it returns an integer 0 ll logical OR Returns an integer 1 if either of the operands is nonzero otherwise it returns an integer 1 Table 4 2 Assembly expression operalors 4 14 4 7 Tr
132. ity an ee tj hak gn Ry ST eh FD LD 8 9 83 1 Calling the Make Utility V aa 8 11 8 3 2 Writing a Makefile FA 8 12 8 4 APCHIVED aa See NY oo ke RWY DY Sethe Reb eee i 8 23 8 4 1 Calling the Archiver oeu Gopi ag ls hate ee 8 23 8 4 2 Examples yf Mu le ie Gag DR LU to oes 8 26 INDEX CONTENTS Table of Contents Manual Purpose and Structure XI MANUAL PURPOSE AND STRUCTURE Windows Users The documentation explains and describes how to use the TriCore toolchain to program a TriCore DSP The documentation is primarily aimed at Windows users You can use the tools either with the graphical Embedded Development Environment EDE or from the command line in a command prompt window UNIX Users For UNIX the toolchain works the same as it works for the Windows command line Directory paths are specified in the Windows way with back slashes as in include Simply replace the back slashes by forward slashes for use with UNIX include Some characters have a special meaning in a UNIX shell In such cases you must escape the special characters For example must be specified as V in some shells See your UNIX documentation for more information Struciure The toolchain documentation consists of a User s Manual this manual which includes a Getting Started section and a separate Reference Manual First you need to install the software This is described in Chapter 1 Software Installation an
133. l Tar gz Installation 1 Login as a user Be sure you have read write and execute permissions in the installation directory Otherwise login as root or use the su command Insert the CD ROM into the CD ROM drive Mount the CD ROM on a directory for example cdrom See the Linux manual pages about mount for details Go to the directory on which the CD ROM is mounted cd cdrom To install the products from the tar gz files in the directory usr local issue the following command for each product tar xzf SWproduct version tar gz C usr local Every tar gz file creates a single directory in the directory where it is extracted 1 6 TriCore User s Manual 1 2 3 INSTALLATION FOR UNIX HOSTS 1 Login as a user Be sure you have read write and execute permissions in the installation directory Otherwise login as root or use the su command If you are a first time user decide where you want to install the product By default it will be installed in usr local Insert the CD ROM into the CD ROM drive and mount the CD ROM on a directory for example cdrom Be sure to use an ISO 9660 file system with Rock Ridge extensions enabled See the UNIX manual pages about mount for details Go to the directory on which the CD ROM is mounted cd cdrom Run the installation script sh install Follow the instructions appearing on your screen First a guestion appears about where to install the softwa
134. l f2 void foo double d __asm ld w 0 2 0 n tld w 1 2 1 amp d 1 d 2 e d The first Ld w instruction uses index 0 of argument 2 which is a double placed in a DxDx register and the second 1d w instruction uses index 1 The input operand is located in register pair d4 d5 The assembly output becomes ld w d15 d4 ld w d0 e4 1 note that e4 1 corresponds to d5 st w f1 d15 st w f2 d0 retl6 If the index is not a valid index for example the register is not a register pair or the argument has not a register constraint the is passed into the assembly output This way you can still use the in assembly instructions 3 7 CONTROLLING THE COMPILER PRAGMAS Pragmas are keywords in the C source that control the behavior of the compiler Pragmas sometimes overrule compiler options In general pragmas give directions to the code generator of the compiler The syntax is pragma pragma spec ON OFF RESTORE DEFAULT OT _Pragma pragma spec ON OFF RESTORE DEFAULT TriCore C Language d gt For example you can set a compiler option to specify which optimizations the compiler should perform With the pragma optimize flags you can set an optimization level for a specific part of the C source This overrules the general optimization level that is set in the compiler options dialog command line option O Some pragmas have an eguivalent command line o
135. l warnings Suppress all warnings Suppress specific warnings omit option w w wnum num 7 12 TriCore User s Manual EDE options Command line Treat warnings as errors warnings as errors num Miscellaneous Do not include symbolic debug information Print the name of each file as it is processed Link case sensitive required for C language Dump processor and memory info from LSL file Additional options S strip debug v omit option case insensitive Isl dumpl file options Table 7 2 Linker options The following options are only available on the command line Description Command line Display invocation syntax Define preprocessor macro for LSL file Specify a symbol as unresolved external Redirect errors to a file with extension e1k Set the maximum number of emitted errors Read options from file Scan libraries in given order Add dir to LSL include file search path Search only in L directories not in default path Keep output files after errors Link only do not locate Check LSL file s and exit Do not generate ROM copy Locate all ROM sections in RAM Link incrementally Display version header only Dmacro def esymbol error file file error limit number f file first library first ldir ignore default library path k link only Isl check N non romable r
136. la S record IEEE 695 absolute object file absolute object file absolute object file absolute object file hex elf sre abs Figure 7 1 lic Linker This chapter first describes the linking process Then it describes how to call the linker and how to use its options An extensive list of all options and their descriptions is included in section 5 3 Linker Options of the Reference Manual To control the link process you can write a script for the linker This chapter shortly describes the purpose and basic principles of the Linker Script Language LSL on the basis of an example A complete description of the LSL is included in Chapter 8 Linker Script Language of the Reference Manual The end of the chapter describes how to generate a map file and contains an overview of the different types of messages of the linker 7 4 TriCore User s Manual 7 2 LINKING PROCESS The linker combines and transforms relocatable object files o into a single absolute object file This process consists of two phases the linking phase and the locating phase In the first phase the linker combines the supplied relocatable object files and libraries into a single relocatable object file In the second phase the linker assigns absolute addresses to the object file so it can actually be loaded into a target Glossary of terms Term Definition Absolute object file Object code in which addresses have fixed absolute values ready to loa
137. ld w d0 y add16 d0 d15 st w z d0 Example pragma inline pragma noinline Instead of the inline qualifier you can also use pragma inline and pragma noinline to inline a function body int w x y Z pragma inline int add int a int b int i 4 return a b pragma noinline void main void WwW Z add 1 2 add x y If a function has an inline _ noinline function qualifier then this gualifier will overrule the current pragma setting If you set pragma inline at the beginning of a source file all functions without the function qualifier _ noinline are inlined This is the same as using compiler option inline pragma smartinline With the compiler option optimize inline Oi the compiler inlines small fuctions that are not too often called This reduces execution time at the cost of code size With the pragma noinline pragma smartinline you can temporarily disable this optimization TriCore C Language 3 33 With the compiler options inline max incr and inline max size you have more control over the function inlining process of the compiler See for more information of these options section Compiler Options in Chapter Tool Options of the TriCore Reference Manual Combining inline with __asm to create intrinsic functions With the keyword __ asm it is possible to use assembly instructions in the body of an inline function Because the compiler inse
138. le of Contents SOFTWARE INSTALLATION AND CONFIGURATION 1 1 11 Introduction aeg yg YA YW GWA EGYR 1 3 1 2 Software Installation 00 0 0 00 eee 1 3 1 2 1 Installation for Windows 00 00 cece 1 3 1 2 2 Installation for Linux 0 00 0 eee 1 4 1 2 3 Installation for UNIX Hosts 00 00 00 0p eee 1 6 13 Software Configuration FF Y ua 1 7 13 1 Configuring the Embedded Development Environment 1 7 1 3 2 Configuring the Command Line Environment 1 9 1 4 Licensing TASKING Products 00 0000 cues 1 12 1 4 1 Obtaining License Information 1 12 1 4 2 Installing Node Locked Licenses 1 13 1 4 3 Installing Floating Licenses 00 00 0005 1 14 1 4 4 Modifying the License File Location 1 16 1 4 5 How to Determine the Host ID 1 17 1 4 6 How to Determine the Host Name 1 17 GETTING STARTED 2 1 2 1 Inter GGUCHOM ang Fo pends Ge seas hey YR od eee Arcee endo a 2 3 2 Working With Projects in EDE 2 7 2 3 Star EIDDEW sew FU E y DG eee EES 2 8 2 4 Using the Sample Projects 5 0 0 0 uag 2 9 2 5 Create a New Project Space with a Project 2 9 2 6 Set Options for the Tools in the Toolchain 2 14 2 7 Build your Application 0 0 0 eee ee 2 16 2 8 How to Build Your Application on the Command Line 2 17 2 9 Debug getstart elf FY Y ua 2 1
139. le or directory Example S nexist test src cctc test c Conditional Processing Lines containing ifdef ifndef else or endif are used for conditional processing of the makefile They are used in the following way ifdef macro name if lines else else lines endif The 7f lines and else lines may contain any number of lines or text of any kind even other ifdef ifndef else and endif lines or no lines at all The else line may be omitted along with the e se ines following it 8 22 TriCore User s Manual First the macro name after the if command is checked for definition If the macro is defined then the f ines are interpreted and the else ines are discarded if present Otherwise the 7 ines are discarded and if there is an else line the e se ines are interpreted but if there is no else line then no lines are interpreted When using the ifndef line instead of ifdef the macro is tested for not being defined These conditional lines can be nested up to 6 levels deep d gt See also Defining Macros in section 5 5 Make Utility Options in Chapter Tools Options of the Reference Manual Comment lines Anything after a 7 is considered as a comment and is ignored If the is inside a guoted string it is not treated as a comment Completely blank lines are ignored test src test c this is comment and is ctc test c ignored by the make utility Include lines An include line is used to incl
140. ler will not use the jump table method when the waste becomes excessive With a small number of cases the jump chain method can be faster in execution and shorter in size How to overrule the default switch method You can overrule the compiler chosen switch method with a pragma pragma switch linear force jump chain code pragma switch jumptab force jump table code pragma switch lookup force lookup table code pragma switch auto let the compiler decide the switch method used pragma switch restore restore previous switch method Pragma switch auto is also the default of the compiler On the command line you can use compiler option switch 3 48 TriCore User s Manual 3 12 LIBRARIES The compiler ctc comes with standard C libraries ISO IEC 9899 1999 and header files with the appropriate prototypes for the library functions The standard C libraries are available in object format and in C or assembly source code A number of standard operations within C are too complex to generate inline code for These operations are implemented as run time library functions The lib directory contains subdirectories with separate libraries for the TriCore 1 and the TriCore 2 Also special MMU libraries are available for derivatives that have a MMU on board These MMU libraries contain a natural alignment for data objects For example word sized data is word aligned and double word sized data i
141. les e Files with a cc cxx or cpp suffix are interpreted as C source programs and are passed to the C compiler e Files with a c suffix are interpreted as C source programs and are passed to the compiler e Files with a asm suffix are interpreted as hand written assembly source files which have to be passed to the assembler e Files with a src suffix are interpreted as compiled assembly source files They are directly passed to the assembler Using the Utilities 8 5 e Files with a a suffix are interpreted as library files and are passed to the linker e Files with a o suffix are interpreted as object files and are passed to the linker e Files with a out suffix are interpreted as linked object files and are passed to the locating phase of the linker The linker accepts only one out file in the invocation e An argument with a 1s1 suffix is interpreted as a linker script file and is passed to the linker Options of the control program The following control program options are available Description Option Information Display invocation options Display version header V Check the source but do not generate code check Show description of diagnostics diag fmt all nr Verbose option show commands invoked V Verbose option show commands without executing n Suppress all warnings W Treat warnings as errors warnings as errors Show C and assembly warnings
142. les It is best not to define them explicitly The basename of the current target lt The name of the current dependency file The name of the current target The names of dependents which are younger than the target The names of all dependents The lt and macros are normally used for implicit rules They may be unreliable when used within explicit target command lines All macros may be suffixed with F to specify the Filename components e g F F Likewise the macros lt and may be suffixed by D to specify the directory component amp The result of the macro is always without double quotes regardless of the original target having double guotes around it or not The result of using the suffix F Filename component or D Directory component is also always without double guotes regardless of the original contents having double quotes around it or not 8 20 Functions TriCore User s Manual A function not only expands but also performs a certain operation Functions syntactically look like macros but have embedded spaces in the macro name e g match arg1 arg2 arg3 Y All functions are built in and currently there are five of them match separate protect exist and nexist match separate protect The match function yields all arguments which match a certain suffix match o prog o sub o mylib a yields prog o sub o The separate func
143. lute object file hex elf sre abs Figure 2 2 TriCore toolchain 2 5 TriCore User s Manual The following table lists the file types used by the TriCore toolchain Extension Description Source files CC C source file input for the C compiler Cc C source file input for the C compiler asm Assembler source file hand coded Isl Linker script file using the Linker Script Language Generated source files ic C source file generated by the C compiler input for the C compiler SIC Assembler source file generated by the C compiler does not contain macros Object files O ELF DWARF relocatable object file generated by the assembler a Archive with ELF DWARF object files abs IEEE 695 absolute object file generated by the locating part of the linker Out Relocatable linker output file elf ELF DWARF absolute object file generated by the locating part of the linker hex Absolute Intel Hex object file sre Absolute Motorola S record object file List files st Assembler list file map Linker map file mdf Memory definition file mcr MISRA C report file Error list files err ers elk Compiler error messages file Assembler error messages file Linker error messages file Table 2 1 File extensions Getting Started 2 7 2 2 WORKING WITH PROJECTS IN EDE EDE is a complete project environment in which you can create and maintain project
144. m always with the option no map file do not generate a linker map file you can specify no map file to the environment variable CCTCOPT See section 1 3 2 Configuring the Command Line Environment in Chapter Software Installation Using the Utilities 8 9 8 3 MAKE UTILITY If you are working with large quantities of files or if you need to build several targets it is rather time consuming to call the individual tools to compile assemble link and locate all your files You save already a lot of typing if you use the control program cctc and define an options file You can even create a batch file or script that invokes the control program for each target you want to create But with these methods all files are completely compiled assembled linked and located to obtain the target file even if you changed just one C source This may demand a lot of CPU time on your host The make utility mktc is a tool to maintain update and reconstruct groups of programs The make utility looks which files are out of date and only recreates these files to obtain the updated target Make process amp In order to build a target the make utility needs the following input e the target it should build specified as argument on the command line e the rules to build the target stored in a file usually called makefile In addition the make utility also reads the file mktc mk which contains predefined rules and macros Se
145. me conditions and restrictions as any other statements Macros can be nested The assembler processes nested macros when the outer macro is expanded 4 10 1 DEFINING A MACRO The first step in using a macro is to define it in the source file The definition of a macro consists of three parts e Header which assigns a name to the macro and defines the arguments e Body which contains the code or instructions to be inserted when te macro is called e Terminator which indicates the end of the macro definition ENDM directive A macro definition takes the following form Header macro_name MACRO arg arg comment Body source statements Terminator ENDM If the macro name is the same as an existing assembler directive or mnemonic opcode the assembler replaces the directive or mnemonic opcode with the macro and issues a waming TriCore Assembly Language 4 25 The arguments are symbolic names that the macro preprocessor replaces with the literal arguments when the macro is expanded called Each argument must follow the same rules as global symbol names Argument names cannot start with a percent sign Example The macro definition CONSTD MACRO reg value header mov u reg 1lo value body addih reg reg hi value ENDM terminator The macro call SDECL data DATA SECT data CONSTD d4 0x12345678 END The macro expands as follows mov u _d4 10 0x12345678 addih d4 d4
146. mounted cd cdrom 4 To install or upgrade all products at once issue the following command rpm U SW rpm This will install or upgrade all products in the default installation directory usr local Every RPM package will create a single directory in the installation directory The RPM packages are relocatable so it is possible to select a different installation directory with the prefix option For instance when you want to install the products in opt use the following command rpm U prefix opt SW rpm For Red Hat 6 0 users The prefix option does not work with RPM version 3 0 included in the Red Hat 6 0 distribution Please upgrade to RPM verion 3 0 3 or higher or use the tar gz file installation described in the next section if you want to install in a non standard directory Software Installation and Configuration 1 5 Debian Installation 1 Login as a user Be sure you have read write and execute permissions in the installation directory Otherwise login as root or use the su command Insert the CD ROM into the CD ROM drive Mount the CD ROM on a directory for example cdrom See the Linux manual pages about mount for details Go to the directory on which the CD ROM is mounted cd cdrom To install or upgrade all products at once issue the following command dpkg i sw deb This will install or upgrade all products in a subdirectory of the default installation directory usr loca
147. n s to which you refer are extracted from the library This implies that if you invoke the linker like ltc mylib a nothing is linked and no output file will be produced because there are no unresolved symbols when the linker searches through mylib a It is possible to force a symbol as external unresolved symbol with the option e ltc e main mylib a In this case the linker searches for the symbol main in the library and if found extracts the object that contains main If this module contains new unresolved symbols the linker looks again in mylib a This process repeats until no new unresolved symbols are found 7 5 INCREMENTAL LINKING With the TriCore linker Itc it is possible to link incrementally Incremental linking means that you link some but not all o modules to a relocatable object file out In this case the linker does not perform the locating phase With the second invocation you specify both new o files and the out file you had created with the first invocation Using the Linker 7 19 amp Incremental linking is only possible on the command line ltc r testl o otest out ltc test2 o test out This links the file test1 o and generates the file test out This file is used again and linked together with test2 o to create the file taskl elf the default name if no output filename is given in the default ELF DWARF 2 format With incremental linking it is normal to have unresolved references
148. n the Assembler Warnings page of the Project Project Options menu assembler option w Display detailed information on diagnostics 1 In the Help menu enable the option Show Help on Tool Errors 2 In the Build tab of the Output window double click on an error or warning message A description of tbe selected message appears Ea astc diag format all number See assembler option diag in section 5 2 Assembler Options in Chapter Tool Options of the TriCore Reference Guide USING THE LINKER all TASKING M daldVHD Using the Linker 7 3 7 1 INTRODUCTION The linker Itc is a combined linker locator The linker phase combines relocatable object files o files generated by the assembler and libraries into a single relocatable linker object file out The locator phase assigns absolute addresses to the linker object file and creates an absolute object file which you can load into a target processor From this point the term linker is used for the combined linker locator The linker takes the following files for input and output relocatable object file o m relocatable linker object file out relocatable object library a linker script file 1s1 gt linker gt linker map file map Itc F error messages elk L relocatable linker object file out i memory definition file mdf Intel Hex ELF DWARF 2 Motoro
149. ne Allocation Default __ near allocation for objects below treshold Default __ a0 allocation for objects below treshold Default __a1 allocation for objects below treshold Nthreshold Zthreshold Ythreshold Warnings Report all warnings Suppress all warnings Suppress specific warnings Treat warnings as errors omit option w W wnum num warnings as errors num MISRA C MISRA C standard Disable MISRA C code checking MISRA C 1998 or MISRA C 2004 Supported MISRA C reguired rules Supported MISRA C reguired and advisory rules Custom MISRA C configuration Turn reguired rule violation into warning Turn advisory rule violation into warning Use external MISRA C configuration file Produce MISRA C report file omit option misrac misrac version 1998 2004 misrac 4all nr nr misrac reguired warnings misrac advisory warnings no option linker option misra c report Miscellaneous Merge C source code with assembly in output file src Comment in object file Additional command line options S object comment value options Table 5 3 Compiler options Using the Compiler Ee The invocation syntax on the command line is gb The following options are only available on the command line Description Command line Display invocation syntax Check the source but do not generate code Sh
150. nitialized data_use memory Specify a memory for the type of data mentioned in the pragma You can specify near far a0 a8 a9 or a1 only for constant data immediate_in_code Forces the compiler to encode all immediate values into instructions See compiler option immediate in code in section 5 1 Compiler Options in Chapter Tool Options of the Reference Manual indirect Generates code for indirect function calling See compiler option indirect in section 5 1 Compiler Options in Chapter Tool Options of the Reference Manual indirect runtime Generates code for indirect function calling to all runtime functions See compiler option indirect runtime in section 5 1 Compiler Options in Chapter Tool Options of the Reference Manual inline Specifies function inlining noinline See section 3 9 1 Inlining smartinline Functions macro Turns macro expansion on nomacro default or off message string Emits a message to standard output object_ comment string Generates a comment section with string in the src file which then appears in the object file optimize flags Controls compiler optimizations endoptimize See section 5 3 Compiler Optimizations in Chapter Using the Compiler pack 2 0 Specifies packing of structures See section 3 2 4 Packed Data Types TriCore C Language Pragma name Description section code init section
151. nning of a section the alignment becomes a word because of the minimum reguired alignment of data sections and stack objects A stack or data section can contain any type of object To avoid wrong word alignment of objects in the section the section base is also word aligned 3 3 MEMORY GUALIFIERS You can use static memory qualifiers to allocate static objects in a particular part of the addressing space of the processor In addition you can place variables at absolute addresses with the keyword __ at If you declare an integer at an absolute address you can declare a single bit of that variable as bit variable with the keyword _ atbit 3 3 1 DECLARE A DATA OBJECT IN A SPECIAL PART OF MEMORY With a memory gualifier you can declare a variable in a specific part of the addressing space You can use the following memory gualifiers __ near The declared data object will be located in the first 16 kB of a 256 MB block These parts of memory are directly addressable with the absolute addressing mode see section 4 4 1 Operands and Addressing Modes in Chapter TriCore Assembly Language __ far The data object can be located anywhere in the indirect addressable memory region TriCore C Language 3 11 If you do not specify __ near or __ far the compiler chooses where to place the declared object With the compiler option N maximum size in bytes for data elements that are default located in __ near sections you
152. nt in an LSL file Microcontrollers and DSPs often have internal memory and I O sub systems apart from one or more cores The design of such a chip is called a derivative Altium provides LSL descriptions of supported derivatives along with SFR files which provide easy access to registers in I O sub systems from C and assembly programs When you build an ASIC or use a derivative that is not yet supported by the TASKING tools you may have to write a derivative definition When you want to use multiple cores of the same type you must instantiate the cores in a derivative definition since the linker automatically instantiates only a single core for an unused architecture The processor definition The processor definition describes an instance of a derivative A processor definition is only needed in a multi processor embedded system It allows you to define multiple processors of the same type If for a derivative A no processor is defined in the LSL file the linker automatically creates a processor named A of derivative A This is why for single processor applications it is enough to specify the derivative in the LSL file for example with dtc1920b Isl Tbe memory and bus definitions optional Memory and bus definition are used within the context of a derivative definition to specify internal memory and on chip buses In the context of a board specification the memory and bus definitions are used to define extern
153. nvsram Section placement statements group ordered run addr mem my nvsram select zbss non_volatile Section placement from EDE To specify the above settings using EDE follow these steps 1 From the Project menu select Project Options The Project Options dialog box appears Using the Linker 7 37 db 2 Expand the Linker entry 3 Expand the Script File entry and open the Sections page Here you can specify where sections are located in memory A In the Space field select abs18 In the Sections field enter zbss non_volatile Da y In the Group field select ordered N In the Copy field select NO 8 In the Alloc field select extmem This adds the mem prefix to the location 9 In the Location field enter my_nvsram 10 Optionally enter a group Name 11 Click OK This completes the LSL file for the sample architecture and sample program You can now call the linker with this file and the sample program to obtain an application that works for this architecture For a complete description of the Linker Script Language refer to Chapter 8 Linker Script Language in the Reference Manual 7 7 8 THE PROCESSOR DEFINITION USING MULTI PROCESSOR SYSTEMS The processor definition is only needed when you write an LSL file for a multi processor embedded system The processor definition explicitly instantiates a derivative allowing multiple processors of the same ty
154. o as labels It is allowed to use reserved symbols as labels as long as the label is followed by a colon Reserved symbols Register names and names of assembler directives and controls are reserved for the system so you cannot use these for user defined symbols The case of these built in symbols is insignificant Symbol names and other identifiers beginning with a period are also reserved for the system TriCore Assembly Language The following symbols are predefined Symbol Description _ ASTC__ Contains the name of the assembler astc __ASPCP__ Contains the name of the PCP assembler aspcp __FPU__ Defined when you use assembler option fpu present allow use of FPU instructions MMU__ Defined when you use assembler option mmu present allow use of MMU instructions _ TC2__ Defined when you use assembler option is tricore2 allow use of TriCore 2 instructions Table 4 1 Predefined symbols Examples Valid symbol names Invalid symbol names loop_1 1 loop starts with a number ENTRY d15 reserved register name a_B c Space reserved directive name aBC 4 6_ ASSEMBLY EXPRESSIONS An expression is a combination of symbols constants operators and parentheses which represent a value that is used as an operand of an assembler instruction or directive Expressions can contain user defined labels and their associated integer or floating point values and
155. o be at 0x9A12 The linker modifies the code to be A1 3412 0100 mov a eax 0x10000 added to the address A3 129A 0000 mov eax b Ox9A12 patched in for b 7 8 7 TriCore User s Manual These adjustments affect instructions but keep in mind that any pointers in the data part of a relocatable object file have to be modified as well Output formats The linker can produce its output in different file formats The default ELF DWARF2 format elf contains an image of the executable code and data and can contain additional debug information The Intel Hex format hex and Motorola S record format sre only contain an image of the executable code and data You can specify a format with the options o output and c chip output Controlling tbe linker Via a so called linker script file you can gain complete control over the linker The script language is called the Linker Script Language LSL Using LSL you can define The memory installed in the embedded target system To assign locations to code and data sections the linker must know what memory devices are actually installed in the embedded target system For each physical memory device the linker must know its start address its size and whether the memory is read write accessible RAM or read only accessible ROM How and where code and data should be placed in the physical memory Embedded systems can have complex memory systems If for example on chip
156. o change the default settings follow the next steps 1 Double click on the EDE icon on your desktop to start the Embedded Development Environment EDE 2 From the Project menu select Directories The Directories dialog box appears 3 Fill in the following fields e In the Executable Files Path field type the pathname of the directory where the executables are located The default directory is PRODDIR bin e In the Include Files Path field add the pathnames of the directories where the compiler and assembler should look for include files The default directory is PRODDIR include Separate pathnames with a semicolon The first path in the list is the first path where the compiler and assembler look for include files To change the search order simply change the order of pathnames 1 8 TriCore User s Manual e In the Library Files Path field add the pathnames of the directories where the linker should look for library files The default directory is PRODDIR lib Separate pathnames with a semicolon The first path in the list is the first path where the linker looks for library files To change the search order simply change the order of pathnames amp Instead of typing the pathnames you can click on the Configure button A dialog box appears in which you can select and add directories remove them again and change their order Software Installation and Configuration 1 3 2 CONFIGURI
157. obal D10 saved register A10 stack pointer D11 EM saved register A11 link register D12 saved register A12 saved register D13 Eb saved register A13 saved register D14 saved register A14 saved register D15 E14 saved register implicit A15 saved register implicit register pointer Table 3 9 Register usage Stack Model __stackparm The function gualifier __ stackparm changes the standard calling convention of a function into a convention where all function arguments are passed via the stack conforming a so called stack model This qualifier is only needed for situations where you need to use an indirect call to a function for which you do not have a valid prototype The compiler sets the least significant bit of the function pointer when you take the address of a function declared with the __ stackparm qualifier so that these function pointers can be identified at run time The least significant bit of a function pointer address is ignored by the hardware 3 41 3 42 P Example void void TriCore User s Manual plain func int __Stackparm stack func int void call indirect unsigned int fp int arg typedef typedef SFP RFP if fp fp_ fp_ else fp_ fp_ __stackparm void SFP int void RFP int fp stack fp reg amp 1l stack SFP fp stack arg reg RFP fp reg arg void main void call indirect unsinged
158. oc N s circbuf _ initcirc ptr_to_circbuf N s 0 s 3 4 2 DECLARE AN SFR BIT FIELD _ sfrbit146 AND Sfrbit32 With the data type qualifiers sfrbit16 and __ sfrbit32 you can declare bit fields in special function registers According to the 77iCore Embedded Applications Binary Interface normal bit fields are accessed as char short or int Thus e fields with a width of 8 bits or less impose only byte alignments e fields with a width from 9 to 16 bits impose halfword alignment e fields with a width from 17 to 32 bits impose word alignment TriCore C Language 3 17 If you declare bit fields in special function registers this behavior is not always desired some special function registers require 16 bit or 32 bit access To force 16 bit or 32 bit access you can use the data type gualifiers_ sfrbit16 and _ sfrbit32 amp For each supported target a special function register file regcpu name sfr is delivered with the TriCore toolchain In normal circumstances you should not need to declare SFR bit fields Example The next example is part of an SFR file and illustrates the declaration of a special function register using the data type gualifier_ sfrbit32 typedef volatile union struct unsigned _ sfrbit32 SRPN 1 BCU Service Priority Number unsigned int 2 unsigned _ sfrbit32 TOS 2 BCU Type of Service Control unsigned _ sfrbit32 SRE 1 BCU Service Request Enable C
159. on of a license file must be known containing the information of all licenses Either create a local license file or point to a license file on a server Add a licence key to a local license file ee A local license file can reduce network traffic On Windows you can follow the same steps to import a license key or create a license file manually as explained in the previous section with the installation of a node locked license On UNIX you have to insert the license key manually in the license file The default location of the license file License dat is in directory usr local flexlm licenses for UNIX If you wish to install the license file in a different directory see section 1 4 4 Modifying tbe License File Location If you already have a license file add the license key information to the existing license file If the license file already contains any SERVER lines make sure that the number of SERVER lines and their contents match otherwise you must use another license file See section 1 4 4 Modifying tbe License File Location for additional information Software Installation and Configuration 1 15 Point to a license file on the server db Set the environment variable LM_LICENSE_FILE to port host where host and port come from the SERVER line in the license file On Windows you can use the License Administrator to do this for you In the License Administrator follow the steps to Point to a FLEXIm License
160. ontrol unsigned _ sfrbit32 SRR 1 BCU SerService Request Flag unsigned _ sfrbit32 CLRR 1 BCU Request Clear Bit unsigned _ sfrbit32 SETR 1 BCU Request Set Bit unsigned int 16 B int I BCU SRC type define BCU SRC BCU SRC type 0xF00002FC BCU Service Reguest Node You can now access the register and bit fields as follows finclude lt regtcl0gp sfr gt BCU SRC I 0xb32a access BCU Service Reguest Control register as a whole BCU SRC B SRE 0x1 access SRE bit field of BCU Service Reguest Control register 3 18 TriCore User s Manual Restrictions You can use the _ sfrbit32 and __ sfrbit16 data type qualifiers only for int types The compiler issues an error if you use for example _ Sfrbit32 char x 8 When you use the _ sfrbit32 and __ sfrbit16 data type qualifiers for other types than a bit field the compiler ignores this without a warning For example _ sfrbit32 int global is equal to int global Structures or unions that contain a member qualified with _ sfrbit16 are zero padded to complete a halfword if necessary The structure or union will be halfword aligned Structures or unions that contain a member qualified with _ sfrbit32 are zero padded to complete a full word if necessary The structure or union will be word aligned 3 4 3 SATURATION _ sat When a variable is declared with the type qualifier __ sat all operations on that var
161. outine or use the intrinsic function __ mtcr to set both the ICR IE bit and the ICR CCPN value 3 9 3 FUNCTION CALLING MODES _ indirect Functions are default called with a single word direct call However when you link the application and the target address appears to be out of reach 16 MB from the callg or jg instruction the linker generates an error In this case you can use the __ indirect keyword to force the less efficient two and a half word indirect call to the function int _ indirect foo void With compiler option indirect you tell the compiler to generate far calls for all functions 3 39 3 40 TriCore User s Manual 3 9 4 PARAMETER PASSING AND THE STACK MODEL stackparm The parameter registers D4 D7 and A4 A7 are used to pass the initial function arguments Up to 4 arithmetic types and 4 pointers can be passed this way A 64 bit argument is passed in an even odd data register pair Parameter registers skipped because of alignment for a 64 bit argument are used by subsequent 32 bit arguments Any remaining function arguments are passed on the stack Stack arguments are pushed in reversed order so that the first one is at the lowest address On function entry the first stack parameter is at the address SP 0 void funcl int i char p char c D4 A4 D5 void func2 int il double d int i2 D4 E6 D5 void func3 char cl char c2 char c3 D4 D5 A4 voi
162. ow description of diagnostic s Redirect diagnostic messages to a file Read options from file Encode all immediate values into instructions Always inline function calls Keep output file after errors Send output to standard output Do not align all sections to minimal 4 bytes Skip the standard include files directory Specify name of output file Rename sections Treat external definitions as static Remove preprocessor macro Display version header only check diag fmt Hall nr error file file f file immediate in code inline k n no default section alignment no stdinc 0 file Rname static Umacro V Table 5 4 Compiler options only available on the command line ctc option file The input file must be a C source file c or ic ctc test c This compiles the file test c and generates the file test src which serves as input for the assembler For a complete overview of all options with extensive description see section 5 1 Compiler Options of Chapter Tool Options of the TriCore Reference Manual 5 15 5 16 TriCore User s Manual 5 5 HOW THE COMPILER SEARCHES INCLUDE FILES When you use include files you can specify their location in several ways The compiler searches the specified locations in the following order 1 If the include statement contains a pathname the compiler looks for this file If no path
163. ow this by zero or more options and specify a filename The following input lines are all valid ctc test c ctc g test c ctc g E test c Not valid is ctc g According to the syntax description you have to specify a filename XIV e TriCore User s Manual Icons The following illustrations are used in this manual amp Note notes give you extra information Warning read the information carefully It prevents you from making serious mistakes or from loosing information This illustration indicates actions you can perform with the mouse Such as EDE menu entries and dialogs Ee Command line type your input on the command line d gt Reference follow this reference to find related topics Manual Purpose and Structure XV RELATED PUBLICATIONS C Standards e CA Reference Manual fifth edition by Samual P Harbison and Guy L Steele Jr 2002 Prentice Hall e The C Programming Language second edition by B Kernighan and D Ritchie 1988 Prentice Hall e ISO IEC 9899 1999 E Programming languages C ISO IEC More information on the standards can be found at http www ansi org e DSP C An Extension to ISO IEC 9899 1999 E Programming languages C TASKING TK0071 14 MISRA C e MISRA C 2004 Guidelines for the Use of the C Language in Critical Systems MIRA Ltd 2004 See also http www misra c com e Guidelines for the Use of the C Language in Vehicle Based Software MIRA Ltd 199
164. ows application that facilitates working with the tools in the toolchain and also offers project management and an integrated editor EDE has three main functions Edit Project management Build and Debug The figure below shows how these main functionalities relate to each other toolchain selection editor project management tool options makefile make compiler assembler linker absolute file debugger Figure 2 1 EDE development flow 2 4 7 TriCore User s Manual In the Edit part you make all your changes create a project space create and maintain one or more projects in a project space add create and edit source files in a project set the options for each tool in the toolchain select another toolchain if you want to create an application for another target than the TriCore In the Build part you build your files a makefile created by the Edit part is used to invoke the needed toolchain components resulting in an absolute object file In the Debug part you can debug your project call the TASKING debugger CrossView Pro with the generated absolute object file This Getting Started Chapter guides you step by step through the most important features of EDE The TASKING EDE is an embedded environment and differs from a native program development A native program development environment is often used to develop applications for systems where the host system and
165. pe processor proc_name derivative deriv_name If no processor definition is available that instantiates a derivative a processor is created with the same name as the derivative 7 38 TriCore User s Manual 7 8_ LINKER LABELS b The linker creates labels that you can use to refer to from within the application software Some of these labels are real labels at the beginning or the end of a section Other labels have a second function these labels are used to address generated data in the locating phase The data is only generated if the label is used Linker labels are labels starting with _Ic_ The linker assigns addresses to the following labels when they are referenced Label Description _lc ub name _lc_b name Begin of section name Also used to mark the begin of the stack or heap or copy table _lc ue name _lc_e name End of section name Also used to mark the end of the stack or heap _lc_ cb name Start address of an overlay section in ROM _lc ce name End address of an overlay section in ROM _lc_ gb name Begin of group name This label appears in the output file even if no reference to the label exists in the input file _lc ge name End of group name This label appears in the output file even if no reference to the label exists in the input file _lc_s_name Variable name is mapped through memory in shared memory situations T
166. pears 3 Expand the Processor entry and select Startup 4 Enable the option Automatically copy and link cstart asm to your project 5 Modify the file cstart asm to match your configuration EDE adds the startup code to your project before the libraries So the linker finds your startup code first d gt See section 4 2 Startup Code in Chapter Run time Environment of the Reference Manual for an extensive description of the C startup code 7 7 CONTROLLING THE LINKER WITH A SCRIPT With the options on the command line you can control the linker s behavior to a certain degree From EDE it is also possible to determine where your sections will be located how much memory is available which sorts of memory are available and so on EDE passes these locating directions to the linker via a script file If you want even more control over the locating process you can supply your own script The language for the script is called the Linker Script Language or shortly LSL You can specify the script file to the linker which reads it and locates your application exactly as defined in the script If you do not specify your own script file the linker always reads a standard script file which is supplied with the toolchain 7 7 1 PURPOSE OF THE LINKER SCRIPT LANGUAGE The Linker Script Language LSL serves three purposes 1 It provides the linker with a definition of the target s core architecture and its internal memory this i
167. perator indicates to the macro preprocessor that the substitution characters for the arguments are to be concatenated with the character A Without the operator the macro would expand as LD W DO AREG1 LD W D1 AREG2 ST W AREG1 D1 ST W AREG2 D0 which results in an assembler error Decimal value Operator Instead of substituting the formal arguments with the actual macro call arguments you can also use the value of the macro call arguments Consider the following source code that calls the macro SWAP_SYM after the argument AREG has been set to 0 and BREG has been set to 1 AREG SET 0 BREG SET 1 SWAP SYM AREG BREG If you want to replace the arguments with the value of AREG and BREG rather than with the literal strings AREG and BREG you can use the operator and modify the macro as follows SWAP _ SYM MACRO REG1 REG2 Swap memory contents LD W DO lab REG1 use DO as temp LD W Dl labX REG2 use D1 as temp ST W _lab REG1 D1 ST W _lab REG2 D0 ENDM The macro first expands as follows LD W DO labX AREG LD W Dl lab BREG ST W labXA AREG Dl ST W _lab BREG DO TriCore Assembly Language 4 29 Then AREG is replaced by 0 and BREG is replaced by 1 LD W DO lab 1l LD W D1 lab 2 ST W _lab 1 D1 ST W _lab 2 D0 Because of the concatenation operator the strings are concatenated LD W DO labl LD W Dl lab2 ST W labl Dl ST W _lab2 D0 Hex Value Operator
168. piler includes a special function register file regcpu sfr This is an include file written in C syntax which is shared by the compiler assembler and debugger Once the compiler reads an SFR file you can reference the special function registers SFR and bits within an SFR using symbols defined in the SFR file Using the Compiler 5 11 Define a user defined target processor 1 From the Project menu select Project Options The Project Options dialog box appears Expand the Processor entry and select Processor Definition In the Target processor list select one of the user defined entries Specify part of the name of the user defined SFR files The compiler uses this name to include the register file regname sfr Optional Specify if your user defined target processor has an FPU Floating Point Unit and or an MMU Memory Management Unit Click OK to accept the new project settings Processor options affect the invocation of all tools in the toolchain In EDE you only need to set them once The corresponding options for the compiler are listed in table 5 1 To specify the search path and include directories 1 2 From the Project menu select Directories The Directories dialog box appears Fill in the directory path settings and click OK To access the compiler options 1 2 From the Project menu select Project Options The Project Options dialog box appears Expand the C Compiler ent
169. ping between these fundamental data types and the C language data types 3 4 TriCore User s Manual Size Align Type Keyword bit bit Ranges Boolean _Bool 8 8 Oor1 Character char 8 8 2 27 4 signed char unsigned char 8 8 O 28 4 Integral short 915 915_ signed short 16 16 a rU unsigned short 16 16 o 216 4 int signed int 32 16 231 91 4 ong signed long unsigned int A 32 16 0 232 1 unsigned long enum 8 8 27 21 1 16 16 215 215_4 32 231 2314 long long signed 64 32 263 _2683_j long long simen 64 32 O 264 4 ong long Pointer pointer to data 32 32 0 282_4 pointer to func Floating 3 402e38 1 175e738 Point flost 32 y3 1 175e 98 3 402938 double 1 797e308 _2 2250 308 long double 64 32 2 225e7308 17970308 float 32 16 3 402e38i 1 175e 98i _Imaginary 1 175e 98i 3 402 38 float Complex 32432 32 real part imaginary part TriCore C Language Size Align Type Keyword bit bit Ranges double 308 308j 1 797e i 2 225e long double 64 32 308 308 _ Imaginary 2 225e i 1 797e979i double long double 64464 32 real part imaginary part _Complex Table 3 1 Data Types When you use the enum type the compiler will use the smallest sufficient integer type unless you use compiler option integer enumeration always use 32 bit integers for
170. point support is used from the library Example include lt stdio h gt long L void main void printf This is a long ld n L The linker extracts the long version without floating point support from the library Fixed point format specifiers The printf and scanf type functions support two additional format specifiers for the conversion of fixed point types fractional and accumulator types TriCore C Language 3 51 For printf type functions IR An __laccum argument representing a fixed point accumulator number is converted to decimal notation in the style ddd ddd where the number of digits after the decimal point character is equal to the precision specification r A __ fract argument representing a fixed point fractional number is converted to decimal notation in the style d ddd where there is one digit which is non zero if the argument is 1 0 before the decimal point character and the number of digits after it is egual to the precision For scanf type functions IR Matches an optionally signed fixed point accumulator number The corresponding argument shall be a pointer to __ laccum r Matches an optionally signed fixed point fractional number The corresponding argument shall be a pointer to __ fract Example include lt stdio h gt _ fract fvalue 1 0 3 __laccum lacvalue 1 234 void main void printf fvalue is r n fvalue printf lacvalue is
171. pond to a TriCore processor instruction with an opcode operands and information used within the compiler Peephole optimizer instruction scheduler software pipelining phase This phase replaces instruction sequences by equivalent but faster and or shorter sequences rearranges instructions and deletes unnecessary instructions Register allocator phase This phase chooses a physical register to use for each virtual register The backend optimization phase Performs target processor independent and dependent optimizations which operate on the Low level Intermediate Language The code generation formatter phase This phase reads through the LIL operations to generate assembly language output 5 3 COMPILER OPTIMIZATIONS The compiler has a number of optimizations which you can enable or disable To enable or disable optimizations 1 From the Project menu select Project Options The Project Options dialog box appears 2 Expand the C Compiler entry and select Optimization 3 Select an optimization level in the Optimization level box or In the Optimization level box select Custom optimization and enable the optimizations you want in the Custom optimization box 5 6 TriCore User s Manual Optimization pragmas gb If you specify a certain optimization all code in the module is subject to that optimization Within the C source file you can overrule the compiler options for optimizations with pragma optimiz
172. ption CAT str1 str2 Concatenate strings LEN string Length of string Position of substring in string Returns 1 if two strings are equal Returns substring in string Overview of macro functions Function Description ARG symbol expr Test if macro argument is present oCNT Return number of macro arguments MAC symbol Test if macro is defined MXP Test if macro expansion is active TriCore Assembly Language Overview of address calculation functions INIT_R7 start dptr flags LO expr LOS expr OLSB expr MSB expr Function Description DPTR expr PCP only returns bits 6 13 of the pcpdata address HI expr Returns upper 16 bits of expression value OHIS expr Returns upper 16 bits of expression value adjusted for signed addition PCP only returns the 32 bit value to initialize R7 Returns lower 16 bits of expression value Returns lower 16 bits of expression value adjusted for signed addition Get least significant byte of a word Get most significant byte of a word Overview of assembler mode functions Function Description ASPCP Returns the name of the PCP assembler executable ASTC Returns the name of the assembler executable CPU string Test if CPU type is selected DEF symbol symbol Returns 1 if symbol has been defined EXP expr Expression check OINT expr Integer check LST LIST control flag value
173. ption This is useful if you want to overrule certain keywords in the C source without the need to change the C source itself See section 5 1 Compiler Options in Chapter 5 Tool Options of the Reference Manual ignored The compiler recognizes the following pragmas other pragmas are Pragma name Description alias symbol defined symbol Defines an alias for a symbol align n restore Specifies object alignment See compiler option align in section 5 1 Compiler Options in Chapter Tool Options of the Reference Manual clear noclear Specifies clearing of non initialized static public variables CPU functional problem DMU functional problem Use software workarounds for the specified functional problem See compiler option silicon bug in section 5 1 Compiler Options in Chapter Tool Options of the Reference Manual default a0 size value Threshold for __ aO allocation default_ al size value Threshold for __ a1 allocation default_ near size value Threshold for __ near allocation extension isuffix Enables the language extension to specify imaginary floating point constants by adding an i to the constant extern symbol Forces an external reference 3 27 3 28 TriCore User s Manual Pragma name Description for constant data use memory for extern data use memory for initialized data_use memory for uni
174. r map src_offset 0x20000000 dest_offset 0x20000000 size 16k dest space linear law space pcp code id 8 mau 16 map src_offset 0x00000000 dest_offset 0 size 0x04000000 dest bus pcp code bus The keyword map corresponds with the arrows in the drawing You can map e address space gt address space e address space gt bus memory gt bus not shown in the drawing e bus gt bus not shown in the drawing Next the two internal buses named fpi_bus and pep _code_bus must be defined in LSL bus fpi_bus mau 8 width 32 there are 32 data lines on the bus Using the Linker 7 29 bus pcp code bus mau 8 width 8 This completes the LSL code in the architecture definition Note that all code above goes into the architecture definition thus between architecture TClV1 3 All code above goes here 7 7 5 THE DERIVATIVE DEFINITION SELF DESIGNED PROCESSORS Although you will probably not need to program the derivative definition unless you are using multiple cores it helps to understand the Linker Script Language and how the definitions are interrelated A derivative is the design of a processor as implemented on a chip or FPGA It comprises one or more cores and on chip memory The derivative definition includes e core definition the core architecture e bus definition the I O buses of the core architecture e memory definitions internal or on ch
175. r or when the target construction is interrupted the make utility removes that target file You can use the p command line option to make all target files precious Rules A line with leading white space tabs or spaces is considered as a rule and associated with the most recently preceding dependency line A rule is a line with commands that are executed to build the associated target A target dependency line can be followed by one or more rules final src final c target and dependency mv test c final c rulel ctc final c rule2 You can precede a rule with one or more of the following characters does not echo the command line except if n is used the make utility ignores the exit code of the command ERRORLEVEL in MS DOS Normally the make utility stops if a non zero exit code is returned This is the same as specifying the option i on the command line or specifying the special IGNORE target The make utility uses a shell or COMMAND COM to execute the command If the is not followed by a shell line but the command is a DOS command or if redirection is used lt gt the shell line is passed to COMMAND COM anyway For UNIX redirection backguote parentheses and variables force the use of a shell You can force mktc to execute multiple command lines in one shell environment This is accomplished with the token combination For example cd ctc bin cctc V 8 16 amp
176. ram startup pragma section const_init Sections with constant data are copied from ROM to RAM at program startup pragma section vector init Sections with interrupts and trap vectors are copied from ROM to RAM at program startup pragma section data_overlay The nearnoclear and farnoclear sections can be overlaid by other sections with the same name Since default section naming never leads to sections with the same name you must force the same name by using one of the section renaming pragmas To get noclear sections instead of BSS sections you must also use pragma noclear pragma section_name_with_module All section renaming pragmas will use a renaming scheme like prefix module name pragma value pragma section_name_with_symbol All section renaming pragmas will use a renaming scheme like prefix symbol_name pragma_value pragma section_per_data_object All data objects get their own section using a naming scheme like prefix module_ name symbol_name d gt See also compiler option section per data object 3 46 TriCore User s Manual No default section alignment By default the compiler generates a 4 byte alignment for sections this is done because the default initialization code does not know where code ends up and hardware could require a word aligned read access to the memory With the compiler option no default section alignment sections are no longer forced to a 4 byte al
177. re The default answer is usr local On some hosts the installation script asks if you want to install SW000098 the Flexible License Manager FLEXlm If you do not already have FLEXIm on your system you must install it otherwise the product will not work on those hosts See section 1 4 Licensing TASKING Products If the script detects that the software has been installed before the following messages appear on the screen WARNING SWXXXXXX xxxx xxxx already installed Do you want to REINSTALL y n Answering n no to this guestion causes installation to abort and the following message being displayed gt Installation stopped on user request lt Software Installation and Configuration 1 7 Answer y yes to continue with the installation The last message will be Installation of SWxxxxxx xxxx xxxx completed 5 If you purchased a protected TASKING product license the software product as explained in section 1 4 Licensing TASKING Products 1 3 SOFTWARE CONFIGURATION Now you have installed the software you can configure both the Embedded Development Environment and the command line environment for Windows Linux and UNIX 1 3 1 CONFIGURING THE EMBEDDED DEVELOPMENT ENVIRONMENT After installation on Windows the Embedded Development Environment is automatically configured with default search paths to find the executables include files and libraries In most cases you can use these settings T
178. rent page or all pages in the dialog 4 Make your changes for all other entries Assembler Linker CrossView Pro of the Project Options dialog in a similar way as described above for the C compiler amp If available the Options string field shows the command line options that correspond to your graphical selections 2 16 TriCore User s Manual 2 7 BUILD YOUR APPLICATION If you have set all options you can actually compile the file s This results in an absolute ELF DWARF object file which is ready to be debugged Build your Application To build the currently active project e Click on the Execute Make command button The file is compiled assembled linked and located The resulting file is getstart elf amp The build process only builds files that are out of date So if you click Make again in this example nothing is done because all files are up to date Viewing the Results of a Build Once the files have been processed you can see which commands have been executed and inspect generated messages by the build process in the Build tab of the Output window This window is normally open but if it is closed you can open it by selecting the Output menu item in the Window menu Compiling a Single File 1 Select the window document containing the file you want to compile or assemble 2 Click on the Execute Compile command button The following button is the execute Compile button which is loca
179. rmat 7 8 interrupt function 3 33 interrupt request disabling 3 34 3 38 enabling 3 38 interrupt service routine 3 33 defining 3 34 intrinsic functions 3 19 J jump chain 3 47 jump chaining 5 7 jump table 3 47 L labels 4 3 4 8 libraries rebuilding 3 52 selling search directories 1 8 1 10 library user 7 14 library maintainer 8 23 Index 6 license floating 1 12 node locked 1 12 obtaining 1 12 wait for available license 1 10 license file location 1 16 setting search directory 1 10 licensing 1 12 linker optimizations 7 9 linker error messages 7 42 linker options overview 7 11 linker output formats ELF DWARF2 format 7 8 Intel Hex format 7 8 Motorola S record format 7 8 linker script file 7 8 architecture definition 7 22 7 26 boad specification 7 24 bus definition 7 23 derivative definition 7 23 7 29 memory definition 7 25 7 31 processor definition 7 23 7 37 section layout definition 7 24 7 33 linker script language LSL 7 8 7 20 external memory 7 31 internal memory 7 29 off chip memory 7 31 on chip memory 7 29 linking process 7 4 linking 7 6 locating 7 7 optimizing 7 9 LM_LICENSE_FILE 1 16 local label override 4 30 lookup table 3 47 loop transformations 5 7 Isl 7 20 Index macro 4 4 argument concatenation 4 27 argument operator 4 27 argument string 4 29 call 4 25 conditional assembly 4 31 definition 4 24 dup directive 4 31 local label
180. routine Trap functions cannot accept arguments and do not return anything void _trap class tsr void The argument class identifies the entry into the trap vector table TriCore defines eight classes of trap functions Each class has its own trap handler 3 36 TriCore User s Manual When a trap service routine is called the d15 register contains the so called Trap Identification Number TIN This number identifies the cause of the trap In the trap service routine you can test and branch on the value in d15 to reach the sub handler for a specific TIN The next table shows the classes supported by TriCore Class Description Class 0 Reset Class 1 Internal Protection Traps Class 2 Instruction Errors Class 3 Context Management Class 4 System Bus and Peripheral Errors Class 5 Assertion Traps Class 6 System Call Class 7 Non Maskable Interrupt For a complete overview of the trap system and the meaning of the trap identification numbers see the 7riCore 1 Unified Processor Core v1 3 Architecture Manual Doc v1 3 3 2002 09 Infineon Analogous to interrupt service routines the compiler generates a trap service frame for interrupts When you define a trap service routine with the __ trap qualifier the compiler generates an entry for the interrupt vector table This vector jumps to the trap handler When you define a trap service routine with the _ trap fast qualifier
181. rt EDE for the first time see section 2 3 Start EDE EDE opens with a ready defined project space that contains several sample projects Each project has its own subdirectory in the examples directory Each directory contains a file readme txt with information about the example The default project is called demo pjt and contains a CrossView Pro debugger example Select a sample project To select a project from the list of projects in a project space 1 In the Project Window right click on the project you want to open A menu appears 2 Select Set as Current Project The selected project opens 3 Read the file readme txt for more information about the selected sample project Building a sample project To build the currently active sample project e Click on the Execute Make command button Once the files have been processed you can inspect the generated messages in the Build tab of the Output window 2 5 CREATE A NEW PROJECT SPACE WITH A PROJECT Creating a project space is in fact nothing more than creating a project space file psp in an existing or new directory Create a new project space 1 From the File menu select New Project Space The Create a New Project Space dialog appears 2 10 TriCore User s Manual Create a New Project Space 2 In the the Filename field enter a name for your project space for example MyProjects Click the Browse button to select a directory first and en
182. rts the assembly body at the place the function is called you can create your own intrinsic function d gt See section 3 6 Using Assembly in tbe C Source for more information about the __ asm keyword Example 6 in that section shows how in combination with the inline keyword an intrinsic function is created 3 9 2 INTERRUPT AND TRAP FUNCTIONS The TriCore C compiler supports a number of function qualifiers and keywords to program interrupt service routines ISR or trap handlers Trap handlers may also be defined by the operating system if your target system uses one An interrupt service routine or interrupt function or interrupt handler is called when an interrupt event or service request occurs This is always an external event peripherals or external inputs can generate an interrupt signals to the CPU to request for service Unlike other interrupt systems each interrupt has a unique interrupt request priority number IRPN This number is 0 to 255 is set as the pending interrupt priority number PIPN in the interrupt control register ICR by the interrupt control unit If multiple interrupts occur at the same time the priority number of the request with the hightest priority is set so this interrupt is handled The TriCore vector table provides an entry for each pending interrupt priority number not for a specific interrupt source A request is handled if the priority number is higher then the CPU priority number
183. rve as input for the linker Pbases of the assembly process 1 2 3 Preprocess directives Check syntax of instructions Instruction grouping and reordering Optimization instruction size and generic instructions Generation of the relocatable object file and optionally a list file TriCore User s Guide The assembler integrates file inclusion and macro facilities See section 4 10 Macro Operations in Chapter TriCore Assembly Language for more information 6 3 ASSEMBLER OPTIMIZATIONS gb The astc assembler performs various optimizations to reduce the size of the assembled applications There are two options available to influence the degree of optimization To enable or disable optimizations 1 From the Project menu select Project Options The Project Options dialog box appears 2 Expand the Assembler entry and select Optimization You can enable or disable the optimizations described below The command line option for each optimization is given in brackets See also option O optimize in section 5 2 Assembler Options in Chapter Tool Options of the TriCore Reference Guide Allow generic instructions option Og OG When this option is enabled you can use generic instructions in your assembly source The assembler tries to replace the generic instructions by faster or smaller instructions For example the instruction jeq d0 F0 labell is replaced by jz d0 labell By default this option is enabl
184. ry fill in the various pages and click OK to accept the compiler options The compiler command line equivalences of your EDE selections are shown simultaneously in the Options string box 5 12 The following processor options are available TriCore User s Manual EDE options Command line Processor definition Target processor User defined TriCore 2 FPU present use hardware floating point instructions MMU present Use the MMU Ccpu is tricore2 fpu present mmu present mmu on Bypasses CPU functional problem bypasses silicon bug bug Startup Automatically add cstart asm to your project EDE only Bus Configuration Initialize bus configuration registers in startup code EDE only Table 5 1 Processor options The following project directories can be defined EDE options Command line Directories Executable files path Include files path Library files path PATH environment lair linker option Ldir Table 5 2 Project directories The following compiler options are available EDE options Command line Preprocessing Store the C compiler preprocess output file pre Automatic inclusion of sfr file Define user macros Include this file before source Eflag omit option no tasking sfr Dmacro def Hfile Using the Compiler EDE opt
185. ry backup tag type object size battery backup tag 4 Space 4 global battery_ backup invok align 2 battery backup invok type object size battery backup invok 4 Space 4 End of section 7 35 7 36 TriCore User s Manual sdecl rodata bat l ini DATA ROM sect rodata bat l ini align 2 _l ini type object size _1 ini 44 byte 84 T byte 104 h This application has been invoked d times n byte 10 An byte 0 NULL End of section Module end Section placement The number of invocations of the example program should be saved in non volatile battery back upped memory This is the memory my_nvsram from the example in the previous section To control the locating of sections you need to write one or more section definitions in the LSL file At least one for each address space where you want to change the default behavior of the linker In our example we need to locate sections in the address space abs18 section layout abs18 To locate sections you must create a group in which you select sections from your program For the battery back up example we need to define one group which contains the section zbss_non_volatile All other sections are located using the defaults specified in the architecture definition Section zbss_non_volatile should be placed in non volatile ram To achieve this the run address refers to our non volatile memory called my_
186. s For example within a loop the most efficient order of instructions is chosen by the pipeline scheduler and it is examined what instructions can be executed parallel Use of SIMD instructions option Om OM The iteration counts of loops are reduced where possible by taking advantage of the TriCore SIMD instructions This optimizes speed but may cause a slight increase in code size Using the Compiler 5 9 Generic assembly optimizations option Og OG A set of target independent optimizations that increase speed and decrease code size 5 3 1 OPTIMIZE FOR SIZE OR SPEED You can tell the compiler to focus on execution speed or code size during optimizations You can do this by specifying a size speed trade off level from 0 speed to 4 size This trade off does not turn optimization phases on or off Instead its level is a weight factor that is used in the different optimization phases to influence the heuristics The higher the level the more the compiler focuses on code size optimization To specify the size speed trade off optimization level 1 From the Project menu select Project Options Tbe Project Options dialog box appears 2 Expand the C Compiler entry and select Optimization 3 Select a Size speed trade off level See also option t tradeoff in section 5 1 Compiler Options in Chapter Tool Options of the TriCore Reference Manual 5 10 TriCore User s Manual 5 4 CALLING THE COMPILE
187. s called the derivative These definitions are written by Altium and supplied with the toolchain Using the Linker 7 21 db 2 It provides the linker with a specification of the external memory attached to the target processor The template extmem 1s1 is supplied with the toolchain 3 It provides the linker with information on how your application should be located in memory This gives you for example the possibility to create overlaying sections The linker accepts multiple LSL files You can use the specifications of the TriCore architectures and derivatives that Altium has supplied in the include 1s1 directory Do not change these files If you attached external memory to a derivative you must specify this in a separate LSL file and pass both the LSL file that describes the derivative s architecture and your LSL file that contains the memory specification to the linker Next you may also want to specify how sections should be located and overlaid You can do this in the same file or in another LSL file LSL has its own syntax In addition you can use the standard C preprocessor keywords such as include and define because the linker sends the script file first to the C preprocessor before it starts interpreting the script The complete syntax is described in Chapter 8 Linker Script Language in the Reference Manual 7 7 2 EDE AND LSL In EDE you can specify the size of the stack and heap the physical memory at
188. s double word aligned Furthermore protected libraries are available for several functional problems The protected library sets provide software bypasses for all supported CPU functional problems They must be used in conjunction with the appropriate C compiler workarounds for CPU functional problems For more details refer to Chapter 9 CPU Functional Problems in the Reference Manual The directory structure is ctc lib tcl TriCore 1 libraries tc2 TriCore 2 libraries tc1_mmuM TriCore 1 MMU libraries tc2_mmu TriCore 2 MMU libraries p tcl Protected libraries for TC1 problems For example tcllib Protected libraries for TC11IB problems tc1766 Protected libraries for TC1766 problems tc1920 Protected libraries for TC1920 problems TriCore C Language 3 12 1 OVERVIEW OF LIBRARIES Table 3 11 lists the libraries included in the TriCore ctc toolchain Library to link Description libc a C library Some functions require the floating point library Also includes the startup code libcs a C library single precision compiler option F Some functions require the floating point library Also includes the startup code libc_fpu a C library with FPU instructions compiler option fpu present libcs_fpu a C library single precision with FPU instructions compiler option F and fpu present libfp a Floating point library non trapping libfpt a Floating point library tr
189. scription symbol A symbolic name as described in section 4 5 Symbol Names Symbols can also occur in expressions register Any valid register or a register pair register quad register extension register part or special function register expression Any valid expression as described in the section 4 6 Assembly Expressions address A combination of expression register and symbol 4 4 1 OPERANDS AND ADDRESSING MODES The TriCore assembly language has several addressing modes These are listed below with a short description For details see the TriCore 1 Unified Processor Core v1 3 Architecture Manual Doc v1 3 3 2002 09 Infineon 4 5 4 6 TriCore User s Manual Absolute addressing The instruction uses an 18 bit constant as the memory address The full 32 bit address results from moving the most significant 4 bits of the 18 bit constant to the most significant bits of the 32 bit address The other bits are zero filled Syntax consiant18 Basetoffset The effective address is the sum of an address register and the sign extended 10 bit or 16 bit offset Syntax An offset10 An offset16 Pre increment decrement This addressing mode uses the sum of the address register and the offset both as the effective address and as the value written back into the address register Use the minus sign for a pre decrement Syntax An offset10 Post increment decrement This addressing mode uses the value of
190. se functions The compiler always inlines the corresponding assembly instructions in the assembly source rather than calling the function This avoids unnecessary parameter passing and register saving instructions which are normally necessary when a function is called Intrinsic functions produce very efficient assembly code Though it is possible to inline assembly code by hand registers are used even more efficient by intrinsic functions At the same time your C source remains very readable You can use intrinsic functions in C as if they were ordinary C library functions All intrinsics begin with a double underscore character The following example illustrates the use of an intrinsic function and its resulting assembly code x _ min 4 5 The resulting assembly code is inlined rather than being called movl6 d2 4 min d2 d2 75 The intrinsics cover the following subjects e Minimum and maximum of short integers e Fractional data type support e Packed data type support e Interrupt handling e Insert single assembly instruction e Register handling 3 20 db TriCore User s Manual e Insert extract bitfields and bits e Miscellaneous For extended information about all available intrinsic functions refer to section 1 5 Intrinsic Functions in Chapter TriCore C Language of the Reference Manual 3 6 USING ASSEMBLY IN THE C SOURCE _asm With the __ asm keyword you can use assembly instructions
191. settings at the time of compilation You can use this in your company s quality assurance system to provide proof that company rules for best practice programming have been applied in the particular project Apply MISRA C code checking to your application 1 From the Project menu select Project Options The Project Options dialog box appears 2 Expand the C Compiler entry and select MISRA C 3 Select a MISRA C configuration Select a predefined configuration for conformance with the required rules in the MISRA C guidelines Using the Compiler 5 19 It is also possible to have a project team work with a MISRA C configuration common to the whole project In this case the MISRA C configuration can be read from an external settings file 4 Optional In the MISRA C Rules entry specify the individual rules Eg ctc misrac all number number d gt See compiler option misrac in section 5 1 Compiler Options in Chapter Tool Options of the TriCore Reference Manudl See linker option misra c report in section 5 3 Linker Options in Chapter Tool Options of the TriCore Reference Manual 5 8_ C COMPILER ERROR MESSAGES The csc compiler reports the following types of error messages F Fatal errors After a fatal error the compiler immediately aborts compilation E Errors Errors are reported but the compiler continues compilation No output files are produced unless you have set the compiler option
192. sor list select one of the user defined entries 4 Specify part of the name of the user defined SFR files Using the Assembler 6 9 The assembler uses this name to include the register file regname def 5 Optional Specify if your user defined target processor has an FPU Floating Point Unit and or an MMU Memory Management Unit 6 Click OK to accept the new project settings EE astc Ctc2 test src 6 6_ HOW THE ASSEMBLER SEARCHES INCLUDE FILES When you use include files you can specify their location in several ways The assembler searches the specified locations in the following order 1 If the INCLUDE directive contains a pathname the assembler looks for this file If no path is specified the assembler looks in the same directory as the source file 2 When the assembler did not find the include file it looks in the directories that are specified in the Directories dialog I option 3 When the assembler did not find the include file because it is not in the specified include directory or because no directory is specified it looks which paths were set during installation You can still change these paths if you like d gt See section 1 3 1 Configuring the Embedded Development Environment and environment variable ASTCINC in section 1 3 2 Configuring the Command Line Environment in Chapter Software Installation 4 When the assembler still did not find the include file it finally tries t
193. spaces and projects EDE gives you direct access to the tools and features you need to create an application from your project A project space holds a set of projects and must always contain at least one project Before you can create a project you have to setup a project space All information of a project space is saved in a project space file psp e alist of projects in the project space e history information Within a project space you can create projects Projects are bound to a target You can create add or edit files in the project which together form your application All information of a project is saved in a project file pjt e the target for which the project is created e a list of the source files in the project e the options for the compiler assembler linker and debugger e the default directories for the include files libraries and executables e the build options e history information When you build your project EDE handles file dependencies and the exact seguence of operations reguired to build your application When you push the Build button EDE generates a makefile including all dependencies and builds your application Overview of steps to create and build an application 1 Create a project space 2 Add one or more projects to the project space 3 Add files to the project 4 Edit the files 5 Set development tool options 6 Build the application 2 8 z TriCore User s Manual 2 3 START EDE
194. ss with the locator description file Example 2 eSDECL CONST CODE AT 0x1000 SECT CONST Defines and activates an absolute section named CONST starting on address 0x1000 Example 3 SDECL fardata DATA CLEAR SECT fardata Defines a relocatable named section in DATA memory The CLEAR attribute instructs the linker to clear the memory located to this section When this section is used in another module it must be defined identically Continuations of this section in the same module are as follows SECT fardata 4 24 TriCore User s Manual 4 10 MACRO OPERATIONS Macros provide a shorthand method for inserting a repeated pattern of code or group of instructions Yuo can define the pattern as a macro and then call the macro at the points in the program where the pattern would repeat Some patterns contain variable entries which change for each repetition of the pattern Others are subject to conditional assembly When a macro is called the assembler executes the macro and replaces the call by the resulting in line source statements In line means that all replacements act as if they are one the same line as the macro call The generated statements may contain substitutable arguments The statements produced by a macro can be any processor instruction almost any assembler directive or any previously defined macro Source statements resulting from a macro call are subject to the sa
195. ssembler Chapter 5 Using the Compiler Describes how you can use the compiler An extensive overview of all options is included in the Reference Manual Chapter 6 Using the Assembler Describes how you can use the assembler An extensive overview of all options is included in the Reference Manual Chapter 7 Using the Linker Describes how you can use the linker An extensive overview of all options is included in the Reference Manual Chapter 8 Using the Utilities Describes several utilities and how you can use them to facilitate various tasks The following utilities are included control program make utility and archiver Manual Purpose and Structure XIII CONVENTIONS USED IN THIS MANUAL Notation for syntax The following notation is used to describe the syntax of command line input bold Type this part of the syntax literally italics Substitute the italic word by an instance For example filename Type the name of a file in place of the word filename Encloses a list from which you must choose an item Encloses items that are optional For example ctc Both ctc and cte are valid commands Separates items in a list Read it as OR You can repeat the preceding item zero or more times ni You can repeat the preceding item zero or more times separating each item with a comma Example ctc option filename You can read this line as follows enter the command cte with or without an option foll
196. stem error message S6 message please report the error number and as many details as possible about the context in which the error occurred The following helps you to prepare an e mail using EDE 1 From the Help menu select Technical Support gt Prepare Email Tbe Prepare Email form appears 2 Fill out the the form State the error number and attach relevant files 3 Click the Copy to Email client button to open your email application A prepared e mail opens in your e mail application Using the Linker 7 43 4 Finish the e mail and send it Display detailed information on diagnostics 1 In the Help menu enable the option Show Help on Tool Errors 2 In the Build tab of the Output window double click on an error or warning message A description of tbe selected message appears Eg ltc diag format all number d gt See linker option diag in section 5 3 Limker Options in Chapter Tool Options of the TriCore Reference Manual 7 44 TriCore User s Manual USING THE UTILITIES all TASKING M daldVHD Using the Utilities 8 3 8 1 INTRODUCTION The TASKING toolchain for the TriCore processor family comes with a number of utilities that provide useful extra features cctc A control program for the TriCore toolchain The control program invokes all tools in the toolchain and lets you quickly generate an absolute object file from C source input files mkt
197. t_offset 0xa0000000 size 16k The memory my_nvsram is connected to the bus with an offset of 0xc0000000 memory my nvsram mau 8 size 2k type ram map dest bus X fpi_bus dest_offset 0xc0000000 size 2k Using the Linker 7 33 B If you use a different memory layout than described in the LSL file supplied for the target core you can specify this in EDE or you can specify this in a separate LSL file and pass both the LSL file that describes the core architecture and your LSL file that contains the memory specification to the linker Adding memory using EDE 1 From the Project menu select Project Options The Project Options dialog box appears 2 Expand the Linker entry 3 Expand the Script File entry and open the External Memory page 4 Add your memory Specify a name for example my_nvsram type start address and size and specify if sections can be located in this memory by default or not 7 7 7 THE SECTION LAYOUT DEFINITION LOCATING SECTIONS Once you have defined the internal core architecture and optional external memory you can actually define where your application must be located in the physical memory During compilation the compiler divides the application into sections Sections have a name an indication in which address space it should be located and attributes like writable or read only In the section layout definition you can exactly define how input sections
198. table For an extensive description of the TriCore interrupt system see the TriCore 1 Unified Processor Core v1 3 Architecture Manual Doc v1 3 3 2002 09 Infineon TriCore C Language 3 35 The compiler generates an interrupt service frame for interrupts The difference between a normal function and an interrupt function is that an interrupt function ends with an RFE instruction instead of a RET and that the lower context is saved and restored with a pair of SVLCX RSLCX instructions when one of the lower context registers is used in the interrupt handler When you define an interrupt service routine with the__ interrupt qualifier the compiler generates an entry for the interrupt vector table This vector jumps to the interrupt handler When you define an interrupt service routine with the _ interrupt fast qualifier the interrupt handler is directly placed in the interrupt vector table thereby eliminating the jump code You should only use this when the interrupt handler is very small as there is only 32 bytes of space available in the vector table The compiler does not check this restriction Example The next example illustrates the function definition for a function for a software interrupt with vector number 0x30 int c void _ interrupt 0x30 transmit void c 1 3 9 2 2 DEFINING A TRAP SERVICE ROUTINE The definition of a trap service routine is similar to the definition of an interrupt service
199. tached to the processor identify that particular address ranges are reserved and specify which sections are located where in memory EDE translates your input into an LSL file that is stored in the project directory under the name _project 1s1 and passes this file to the linker If you want to learn more about LSL you can inspect the generated file _project lsl To change tbe LSL settings 1 From the Project menu select Project Options Tbe Project Options dialog box appears 2 Expand the Linker entry and select Script File 7 22 TriCore User s Manual 3 In each of the pages make your changes Each time you close the Project Options dialog the file project 1s1 is updated and you can immediately see how your settings are encoded in LSL Note that EDE supports ChromaCoding applying color coding to text and template expansion when you edit LSL files Specify your own LSL file If you want to write your own linker script file you can use the EDE generated file_project 1ls1 as an example Specify this file to EDE as follows 1 From the Project menu select Project Options Tbe Project Options dialog box appears 2 Expand the Linker entry and select Script File 3 Select Use project specific memory and section LSL file and add your own file in the edit field 7 7 3 STRUCTURE OF A LINKER SCRIPT FILE A script file consists of several definitions The definitions can appear in any order Tbe architectur
200. tax An r Indexed addressing The indexed addressing mode uses an address register pair to hold the required state The Aeven register is the base address of the array B The Aodd register is divided equally between the index into the array 1 and the modifier N which is added to I after every access Aodd N Aeven B All load LD xxx instructions all store ST xxx except ST T instructions the load modify store SWAP W LDMST instructions and the cache management CACHEA xxx instructions are able to use the indexed addressing mode Syntax 4 8 TriCore User s Manual Aa Ab i ld w d0 a0 al i st w a2 a3 i d0 load word indexed addressing mode store word indexed addressing mode se Ne 4 4 2 PCP ADDRESSING MODES The PCP assembly language has several addressing modes These addressing modes are used for FPI addressing PRAM data indirect addressing or flow control destination addressing For details see the PCP DMA Architecture manual from Siemens 4 5 SYMBOL NAMES User defined symbols A user defined symbol can consist of letters digits and underscore characters _ The first character cannot be a digit The size of an identifier is only limited by the amount of available memory The case of these characters is significant You can define a symbol by means of a label declaration or an equate or set directive Labels Symbols used for memory locations are referred t
201. ted in the toolbar If you selected the file hello c this results in the compiled and assembled file hello o Getting Started 2 17 Rebuild your Entire Application If you want to compile assemble and link locate all files of your project from scratch regardless of their date time stamp you can perform a rebuild e Click on the Execute Rebuild command button The following button is the execute Rebuild button which is located in the toolbar 2 8 HOW TO BUILD YOUR APPLICATION ON THE COMMAND LINE If you are not using EDE you can build your entire application on the command line The easiest way is to use the control program cctc 1 In a text editor write the file hello c with the following contents include lt stdio h gt void main void printf Hello World An 2 Build the file getstart elf cctc ogetstart elf hello c v Tbe control program calls all tools in the toolchain The v option shows all the individual steps The resulting file is getstart elf 2 18 TriCore User s Manual 2 9 DEBUG GETSTART ELF The application getstart e1f is the final result ready for execution and or debugging The debugger uses getstart elf for debugging but needs symbolic debug information for the debugging process This information must be included in getstart elf and therefore you need to compile and assemble hello c once again cctc g ogetstart elf hello c Now you can start the debu
202. tements as described above you can put a so called control line in your assembly source file These lines start with a in the first column and alter the default behavior of the assembler control For more information on controls see section 4 8 Assembler Directives and Controls 4 3 ASSEMBLER SIGNIFICANT CHARACTERS You can use all ASCII characters in the assembly source both in strings and in comments Also the extended characters from the ISO 8859 1 Latin 1 set are allowed Some characters have a special meaning to the assembler Special characters associated with expression evaluation are described in section 4 6 3 Expression Operators Other special assembler characters are TriCore Assembly Language Character Description Start of a comment Line continuation character or Macro operator argument concatenation Macro operator return decimal value of a symbol Macro operator return hex value of a symbol Macro operator override local label Macro string delimiter or Quoted string DEFINE expansion character String constants delimiter Start of a built in assembly function Location counter substitution Constant number String concatenation operator Substring delimiter 4 4 OPERANDS In an instruction the mnemonic is followed by zero one or more operands An operand has one of the following types Operand De
203. ter a filename 3 Check the directory and filename and click OK to create the psp file in the directory shown in the dialog A project space information file with the name MyProjects psp is created and the Project Properties dialog box appears with the project space selected GETTING STARTED Getting Started 2 11 Project Properties Add a new project to the project space 4 In the Project Properties dialog click on the Add new project to project space button see previous figure Tbe Add New Project to Project Space dialog appears Add New Project to Project Space getstartgetstart pjt M Ej BOG sye makene 2 12 GETTING STARTED TriCore User s Manual 5 Give your project a name for example getstart getstart pjt a directory name to hold your project files is optional and click OK A project file with the name getstart pjt is created in the directory getstart which is also created The Project Properties dialog box appears with the project selected Project Properties xl lt Default Settings gt b ea ear Add new file Add existing files Scan existing files Add new files to the project Now you can add all the files you want to be part of your project 6 Click on the Add new file to project button The Add New File to Project dialog appears Add New File to Project IM Greate new window Browse _Cencel _ Heb
204. ter can jump from the last location in the array to the first or vice versa the pointer wraps around This way the buffer appears to be continuous The TriCore C compiler supports the __ circ keyword circular addressing mode for this type of buffer Example __circ _ fract _ circ circbuffer 10 _ fract _ circ ptr_to circbuffer circbuffer 3 16 TriCore User s Manual Here circbuffer is declared as a circular buffer The compiler aligns the base address of the buffer on the access width in this example an int so 4 bytes The compiler keeps the buffer size and uses it to control pointer arithmetic of pointers that are assigned to the buffer later You can perform operations on circular pointers with the usual C pointer arithmetic with the difference that the pointer will wrap When you acces the circular buffer with a circular pointer it wraps at the buffer limits Circular pointer variables are 64 bits in size Example while Pptr_to circbuf Indexing in the circular buffer using an integer index is treated equally to indexing in a non circular array Example int i circbuf 3 The index is not calculated modulo indexing outside the array boundaries yields undefined results If you want to initialize a circular pointer with a dynamically allocated buffer at run time you should use the intrinsic function _ initcirc define N 100 unsigned short s sizeof _ fract _ fract ptr_to_circbuf call
205. the trap handler is directly placed in the trap vector table thereby eliminating the jump code You should only use this when the trap handler is very small as there is only 32 bytes of space available in the vector table The compiler does not check this restriction TriCore C Language 3 37 3 9 2 3 DEFINING A TRAP SERVICE ROUTINE CLASS 6 _ syscallfunc A special kind of trap service routine is the system call trap With a system call the trap service routine of class 6 is called For the system call trap the trap identification number TIN is taken from the immediate constant specified with the function qualifier _ syscallfunc _ syscallfunc TIN The TIN is a value in the range 0 and 255 You can only use _ syscallfunc in the function declaration A function body is useless because when you call the function declared with _ syscallfunc a trap class 6 occurs which calls the corresponding trap service routine amp In case of the other traps when a trap service routine is called the system places a trap identification number in d15 Unlike the other traps a class 6 trap service routine can contain arguments and return a value the lower context is not saved and restored Arguments that are passed via the stack remain on the stack of the caller because it is not possible to pass arguments from the user stack to the interrupt stack on a system call This restriction caused by the TriCore s run time behavior cannot
206. tion concatenates its arguments using the first argument as the separator If the first argument is enclosed in double quotes then n is interpreted as a newline character t is interpreted as a tab Nooo is interpreted as an octal value where ooo is one to three octal digits and spaces are taken literally For example separate n prog o sub o results in prog o sub o Function arguments may be macros or functions themselves SO separate n match o yields all object files the current target depends on separated by a newline string The protect function adds one level of guoting This function has one argument which can contain white space If the argument contains any white space single guotes double guotes or backslashes it is enclosed in double guotes In addition any double guote or backslash is escaped with a backslash Using the Utilities 8 21 Example echo protect I ll show you the protect function yields echo I ll show you the protect function exist The exist function expands to its second argument if the first argument is an existing file or directory Example S exist test c cctc test c When the file test c exists it yields cctc test c When the file test c does not exist nothing is expanded nexist The nexist function is the opposite of the exist function It expands to its second argument if the first argument is not an existing fi
207. ton and select Run In the dialog box type d setup substitute the correct drive letter for your CD ROM drive and click on the OK button The TASKING Showroom dialog box appears Select a product and click on the Install button Follow the instructions that appear on your screen You can find your serial number on the invoice delivery note or picking slip delivered with the product License the software product as explained in section 1 4 Licensing TASKING Products 1 4 7 TriCore User s Manual 1 2 2 INSTALLATION FOR LINUX Each product on the CD ROM is available as an RPM package Debian package and as a gzipped tar file For each product the following files are present SWproduct version RPMrelease i386 rpm swproduct_version release_i386 deb SWproduct version tar gz These three files contain exactly the same information so you only have to install one of them When your Linux distribution supports RPM packages you can install the rpm file For a Debian based distribution you can use the deb file Otherwise you can install the product from the tar gz file RPM Installation 1 In most situations you have to be root to install RPM packages so either login as root or use the su command 2 Insert the CD ROM into the CD ROM drive Mount the CD ROM on a directory for example cdrom See the Linux manual pages about mount for details 3 Go to the directory on which the CD ROM is
208. trictions Take note of the following restrictions if you place a variable at an absolute address e You can place only global variables at absolute addresses Parameters of functions or automatic variables within functions cannot be placed at absolute addresses e When declared extern the variable is not allocated by the compiler When the same variable is allocated within another module but on a different address the compiler assembler or linker will not notice because an assembler external object cannot specify an absolute address e When the variable is declared static no public symbol will be generated normal C behavior e You cannot place functions at absolute addresses e Absolute variables cannot overlap each other If you declare two absolute variables at the same address the assembler and or linker issues an error The compiler does not check this e When you declare the same absolute variable within two modules this produces conflicts during link time except when one of the modules declares the variable extern Declaring a bit variable with _atbit If you have defined a 32 bits base variable int long you can declare a single bit of that variable as a bit variable with the keyword __ atbit The syntax is __ atbit name offset name is the name of an integer variable in which the bit is located offset range 0 31 is the bit offset within the variable If you have defined an absolute integer
209. ude the text of another makefile like including a h file in a C source Macros in the name of the included file are expanded before the file is included Include files may be nested include makefile2 Export lines An export line is used to export a macro definition to the environment of any command executed by the make utility GREETING Hello export GREETING This example creates the environment variable GREETING with the value Hello The macros is exported at the moment the export line is read so the macro definition has to precede the export line Using the Utilities 8 23 8 4 ARCHIVER The archiver artc is a program to build and maintain your own library files A library file is a file with extension a and contains one or more object files o that may be used by the linker The archiver has five main functionalities e Deleting an object module from the library e Moving an object module to another position in the library file e Replacing an object module in the library or add a new object module e Showing a table of contents of the library file e Extracting an object module from the library The archiver takes the following files for input and output assembler astc archiver lm relocatable object file artc e O relocatable Un library linker E Itc Figure 8 1 artc ELF DWARF archiver and library maintainer The linker optionally includes object modules from a library
210. used in expression a null string 0x64636261 ef are ignored warning string value truncated word abcdef se Ne abc de you can concatenate two strings with the operator This results in abcde se Ne Ne TriCore 0 3 results in the substring Tri TriCore User s Manual 4 6 3 EXPRESSION OPERATORS The next table shows the assembler operators They are ordered according to their precedence Operators of the same precedence are evaluated left to right Expressions between parentheses have the highest priority innermost first Valid operands include numeric constants literal ASCII strings and symbols Most assembler operators can be used with both integer and floating point values If one operand has an integer value and the other operand has a floating point value the integer is converted to a floating point value before the operator is applied The result is a floating point value Type Oper Name Description ator parentheses Expressions enclosed by parenthesis are evaluated first Unary plus Returns the value of its operand minus Returns the negative of its operand p complement Returns complement integer only logical negate Returns 1 if the operands value is 0 otherwise 0 For example if buf is 0 then buf is 1 Arithmetic multiplication Yields the product of two operands division Yields the quotient of the div
211. variable with the keyword __at you can declare a single bit of that variable as an absolute bit variable with _atbit Example int bw __at 0x100 _ bit myb _ atbit bw 3 TriCore C Language 3 15 Note that the keyword __ bit is used to declare the variable myb as a bit and that the keyword __ atbit is used to declare that variable at an absolute offset in variable bw d gt See also section 3 2 3 Bit Dala Type Restrictions e You can only use the __ atbit qualifier on variables of type __ bit e When a variable is _ atbit qualified it represents an alias of a bit in another variable Therefore it cannot be initialized e You can only use the __ atbit qualifier on variables which have either a global scope or file scope 3 4 DATA TYPE QUALIFIERS 3 4 1_ CIRCULAR BUFFERS _ circ The TriCore core has support for implementing specific DSP tasks such as finite impulse response FIR and infinite impulse response IIR filters and fast Fourier transforms FFTs For the FIR and IIR filters the TriCore architecture supports the circular addressing mode and for the FFT the bit reverse addressing mode The TriCore C compiler supports circular buffers for these DSP tasks This way the TriCore C compiler makes hardware features available at C source level instead of at assembly level only A circular buffer is a linear one dimensional array that you can access by moving a pointer through the data The poin
212. w of mathematical functions Function Description ABS expr Absolute value ACS expr Arc cosine ASN expr Arc sine AT2 expr1 expr2 Arc tangent ATN expr Arc tangent CEL expr Ceiling function COH expr Hyperbolic cosine COS expr Cosine FLR expr Floor function L10 expr Log base 10 GLOG expr Natural logarithm OMAX expr exprN OMIN expr exprN OPOW expr1 expr2 RND SGN expr SIN expr SNH expr SAQAT expr TAN expr TNH expr OXPN expr Maximum value Minimum value Raise to a power Random value Returns the sign of an expression as 1 0 or 1 Sine Hyperbolic sine Square root Tangent Hyperbolic tangent Exponential function raise e to a power 4 16 TriCore User s Manual Overview of conversion functions Function Description CVF expr Convert integer to floating point oCVI expr Convert floating point to integer FLD base value Shift and mask operation width start OFRACT expr Convert floating point to 32 bit fractional SFRACT expr Convert floating point to 16 bit fractional LNG expr Concatenate to double word LUN expr Convert long fractional to floating point ORVB expr1 expr2 Reverse order of bits in field UNF expr Convert fractional to floating point Overview of string functions POS sir1 str2 start SCP sir1 str2 SUB string expr expr Function Descri
213. with multiple __ asm statements or conditional jumps across __ asm statements and will generate incorrect code for the registers involved If you want to create a loop with __ asm the whole loop must be contained in a single __ asm statement The same counts for conditional jumps As a rule of thumb all references to a label in an __ asm statement must be in that same statement Example 1 no input or output A simple example without input or output parameters You can just output any assembly instruction _ asm nop Generated code nop TriCore C Language 3 23 Example 2 using output parameters Assign the result of inline assembly to a variable With the constraint d a data register is chosen for the parameter the compiler decides which data register it uses The 0 in the instruction template is replaced with the name of this data register Finally the compiler generates code to assign the result to the output variable int result void main void _ asm mov 0 0xFF d result Generated assembly code mov d15 0xFF st w result d15 Example 3 using input and output parameters Multiply two C variables and assign the result to a third C variable Data type registers are necessary for the input and output parameters constraint d 30 for result 1 for a and 2 for b in the instruction template The compiler generates code to move the input expressions into the input registers and

Download Pdf Manuals

image

Related Search

Related Contents

BATCHFLUX® EGM5500C シリーズ  Télecharger le fichier  Standard Operating Procedures  MTX-70S-84  Calefactor aire industrial LXDY3. Manual de    GA-F2A85XM-HD3  ZIO, Motherboard - Zilogic Systems  Conceptronic USB Internet Phone  Maroo MR-UC8001  

Copyright © All rights reserved.
Failed to retrieve file