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