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