Target Language Compiler

Introducing the Target Language Compiler

Introduction

Overview of the TLC Process

Overview of the Code Generation Process

Capabilities

Customizing Output

Inlining S-Functions

Code Generation Process

How TLC Determines S-Function Inlining Status

A Look at Inlined and Noninlined S-Function Code

Advantages of Inlining S-Functions

Motivations

Inlining Process

Search Algorithm for Locating Target Files

Availability for Inlining and Noninlining

New Features and Compatibility Issues in
Versions 4.0, 4.1, and 5.0

New Features Added in Version 5.0

New Features Added in Version 4.1

New Features Added in Version 4.0

Compatibility Issues

Where to Go from Here

Related Manuals

Getting Started

Code Architecture

model.rtw and Target Language Compiler Overview

The Target Language Compiler Process

Inlining S-Function Concepts

Noninlined S-Function

Types of Inlining

Fully Inlined S-Function Example

Wrapper Inlined S-Function Example

A TLC Tutorial

Introduction

Reading Record Files with TLC

Structure of Record Files

Interpreting Records

Anatomy of a TLC Script

Modify read-guide.tlc

Processing model.rtw Files with TLC Scripts

Getting Started

Counting Blocks and Subsystems

Listing Block Names

Passing and Using a Parameter

Inlining S-Functions with TLC

Noninlined Code Generation

Why Use TLC to Implement S-functions?

Creating an Inlined S-Function

Scalar or Vector, It's the Same

Exploring Variable Names and Loop Rolling

Getting Started

Modify the Model

Change the Loop Rolling Threshold

More on TLC Loop Rolling

Debugging Your TLC Code

Getting Started

Generate and Run Code from the Model

Start the Debugger and Explore Commands

Debug gain.tlc

Fix the Bug and Verify the Fix

Using TLC Code Coverage to Aid Debugging

Getting Started

Open the Model and Generate Code

Log Without Inline Parameters

Wrapping User Code with TLC

Why Wrap?

Getting Started

Generate Code Without a Wrapper

Generate Code Using a Wrapper

Code Generation Architecture

Build Process

A Basic Example

Invoking Code Generation

The rtwgen Command

The tlc Command

Configuring TLC

Code Generation Concepts

Output Streams

Variable Types

Records

Record Aliases

TLC Files

Available Target Files

Summary of Target File Usage

System Target Files

Block Target Files

Block Target File Mapping

Data Handling with TLC: An Example

Matrix Parameters in Real-Time Workshop

Contents of model.rtw

Model.rtw File Overview

Using Scopes in the model.rtw File

Object Information in the model.rtw File

Using Library Functions to Access model.rtw Contents

Caution Against Directly Accessing Record Fields

Exception to Using the Library Functions

Directives and Built-in Functions

Compiler Directives

Syntax

Comments

Line Continuation

Target Language Values

Target Language Expressions

Formatting

Conditional Inclusion

Multiple Inclusion

Object-Oriented Facility for Generating Target Code

Output File Control

Input File Control

Asserts, Errors, Warnings, and Debug Messages

Built-In Functions and Values

TLC Reserved Constants

Identifier Definition

Variable Scoping

Target Language Functions

Command Line Arguments

Filenames and Search Paths

Debugging TLC Files

About the TLC Debugger

Tips for Debugging TLC Code

Using the TLC Debugger

Tutorial

TLC Debugger Command Summary

TLC Coverage

Using the TLC Coverage Option

TLC Profiler

Using the Profiler

Inlining S-Functions

Writing Block Target Files to Inline S-Functions

Fully Inlined S-Functions

Function-Based or Wrappered Code Generation

Inlining C MEX S-Functions

S-Function Parameters

A Complete Example

Inlining M-File S-Functions

Inlining Fortran (F-MEX) S-Functions

TLC Coding Conventions

Block Target File Methods

Block Target File Mapping

Block Functions

Loop Rolling

Error Reporting

TLC Function Library Reference

Obsolete Functions

Target Language Compiler Functions

Common Function Arguments

Input Signal Functions

LibBlockInputSignal(portIdx, ucv, lcv, sigIdx)

Input Arguments

General Usage

LibBlockInputSignalAddr(portIdx, ucv, lcv, sigIdx)

LibBlockInputSignalConnected(portIdx)

LibBlockInputSignalDataTypeId(portIdx)

LibBlockInputSignalDataTypeName(portIdx, reim)

LibBlockInputSignalDimensions(portIdx)

LibBlockInputSignalIsComplex(portIdx)

LibBlockInputSignalIsFrameData(portIdx)

LibBlockInputSignalLocalSampleTimeIndex(portIdx)

LibBlockInputSignalNumDimensions(portIdx)

LibBlockInputSignalOffsetTime(portIdx)

LibBlockInputSignalSampleTime(portIdx)

LibBlockInputSignalSampleTimeIndex(portIdx)

LibBlockInputSignalWidth(portIdx)

Output Signal Functions

LibBlockOutputSignal(portIdx, ucv, lcv, sigIdx)

LibBlockOutputSignalAddr(portIdx, ucv, lcv, sigIdx)

LibBlockOutputSignalBeingMerged(portIdx)

LibBlockOutputSignalConnected(portIdx)

LibBlockOutputSignalDataTypeId(portIdx)

LibBlockOutputSignalDataTypeName(portIdx, reim)

LibBlockOutputSignalDimensions(portIdx)

LibBlockOutputSignalIsComplex(portIdx)

LibBlockOutputSignalIsFrameData(portIdx)

LibBlockOutputSignalLocalSampleTimeIndex(portIdx)

LibBlockOutputSignalNumDimensions(portIdx)

LibBlockOutputSignalOffsetTime(portIdx)

LibBlockOutputSignalSampleTime(portIdx)

LibBlockOutputSignalSampleTimeIndex(portIdx)

LibBlockOutputSignalWidth(portIdx)

Parameter Functions

LibBlockMatrixParameter(param,rucv,rlcv,ridx,cucv,clcv,cidx)

LibBlockMatrixParameterAddr(param,rucv,rlcv,ridx,cucv,clcv,cidx)

LibBlockMatrixParameterBaseAddr(param)

LibBlockParameter(param, ucv, lcv, sigIdx)

LibBlockParameterAddr(param, ucv, lcv, idx)

LibBlockParameterBaseAddr(param)

LibBlockParameterDataTypeId(param)

LibBlockParameterDataTypeName(param, reim)

LibBlockParameterDimensions(param)

LibBlockParameterIsComplex(param)

LibBlockParameterSize(param)

Block State and Work Vector Functions

LibBlockContinuousState(ucv, lcv, idx)

LibBlockDWork(dwork, ucv, lcv, sigIdx)

LibBlockDWorkAddr(dwork, ucv, lcv, idx)

LibBlockDWorkDataTypeId(dwork)

LibBlockDWorkDataTypeName(dwork, reim)

LibBlockDWorkIsComplex(dwork)

LibBlockDWorkName(dwork)

LibBlockDWorkStorageClass(dwork)

LibBlockDWorkUsedAsDiscreteState(dwork)

LibBlockDWorkWidth(dwork)

LibBlockDiscreteState(ucv, lcv, idx)

LibBlockIWork(definediwork, ucv, lcv, idx)

LibBlockMode(ucv, lcv, idx)

LibBlockNonSampledZC(ucv, lcv, NonSampledZCIdx)

LibBlockPWork(definedpwork, ucv, lcv, idx)

LibBlockRWork(definedrwork, ucv, lcv, idx)

Block Path and Error Reporting Functions

LibBlockReportError(block,errorstring)

LibBlockReportFatalError(block,errorstring)

LibBlockReportWarning(block,warnstring)

LibGetBlockPath(block)

LibGetFormattedBlockPath(block)

Code Configuration Functions

LibAddToCommonIncludes(incFileName)

LibAddToModelSources(newFile)

LibCacheDefine(buffer)

LibCacheExtern(buffer)

LibCacheFunctionPrototype(buffer)

LibCacheIncludes(buffer)

LibCacheTypedefs(buffer)

LibRegisterGNUMathFcnPrototypes()

LibRegisterISOCMathFcnPrototypes()

LibRegisterMathFcnPrototype(RTWName,
RTWType, IsExprOK, IsCplx, NumInputs,
FcnName, FcnType, HdrFile)

Sample Time Functions

LibGetGlobalTIDFromLocalSFcnTID(sfcnTID)

LibGetNumSFcnSampleTimes(block)

LibGetSFcnTIDType(sfcnTID)

LibGetTaskTimeFromTID(block)

LibIsContinuous(TID)

LibIsDiscrete(TID)

LibIsSFcnSampleHit(sfcnTID)

LibIsSFcnSingleRate(block)

LibIsSFcnSpecialSampleHit(sfcnSTI, sfcnTID)

LibPortBasedSampleTimeBlockIsTriggered(block)

LibSetVarNextHitTime(block,tNext)

Other Useful Functions

LibCallFCSS(system, simObject, portEl, tidVal)

LibGenConstVectWithInit(data, typeId, varId)

LibGetDataTypeComplexNameFromId(id)

LibGetDataTypeEnumFromId(id)

LibGetDataTypeIdAliasedToFromId(id)

LibGetDataTypeIdResolvesToFromId(id)

LibGetDataTypeNameFromId(id)

LibGetT()

LibIsMajorTimeStep()

LibIsMinorTimeStep()

LibIsComplex(arg)

LibIsFirstInitCond(s)

LibMaxIntValue(dtype)

LibMinIntValue(dtype)

Advanced Functions

LibBlockInputSignalBufferDstPort(portIdx)

LibBlockInputSignalStorageClass(portIdx, idx)

LibBlockInputSignalStorageTypeQualifier(portIdx, idx)

LibBlockOutputSignalIsGlobal(portIdx)

LibBlockOutputSignalIsInBlockIO(portIdx)

LibBlockOutputSignalIsValidLValue(portIdx)

LibBlockOutputSignalStorageClass(portIdx)

LibBlockOutputSignalStorageTypeQualifier(portIdx)

LibBlockSrcSignalBlock(portIdx, idx)

LibBlockSrcSignalIsDiscrete(portIdx, idx)

LibBlockSrcSignalIsGlobalAndModifiable(portIdx, idx)

LibBlockSrcSignalIsInvariant(portIdx, idx)

LibCreateHomogMathFcnRec(FcnName, FcnTypeId)

LibGetMathConstant(ConstName,ioTypeId)

LibMathFcnExists(RTWFcnName, RTWFcnTypeId)

LibSetMathFcnRecArgExpr(FcnRec, idx, argStr)

model.rtw

model.rtw File Contents

Using the model.rtw File

General model.rtw Concepts

Code Data Structure Concepts

Inline Parameters On Code Structure

model.rtw Changes Between
Real-Time Workshop 5.0 and 4.1

General Information and Solver Specification

RTWGenSettings Record

Data Logging Information (DataLoggingOpts)

Data Structure Sizes

Sample Time Information

Data Type Information (DataTypes record)

Target Properties

Block Type Counts

External Inputs and Outputs

Block I/O Information

Signal Connections

Using BlockOutput[i].SigSrc

Data Type Work (DWork) Information

Continuous States

Nonsampled Zero Crossings (NonsampledZCs)

Zero Crossings Events (ZCEvents)

Block Record Defaults

Parameter Record Defaults

Data and Control Port Defaults

Model Parameters Record

Reduced Blocks

Custom Storage Class Record

Model Hierarchy

System Defaults (canonical inputs, outputs, and parameters)

System Record

Stateflow Record

Model Checksums

Block Specific Records

Subsystem Block Specific Records

Linear Block Specific Records

Object Records

TLC Error Handling

Generating Errors from TLC-Files

Usage Errors

Fatal (Internal) TLC Coding Errors

Formatting Error Messages

TLC Error Messages

TLC Function Library Error Messages

Using TLC with Emacs

The Emacs Editor

Getting Started

Creating a TAGS File


 Target Language Compiler