S函数是系统函数(System Function的简称,是Simulink环境下的功能扩展
机制,可以有效提高和丰富Simulink的功能。S函数可以定义模块基本属性、模
块执行情况,还可以实现算法模块及板卡设备驱动模块。
RTW代码生成过程的第一个阶段是对搭建好的DSP模型进行编译,该阶段与
C程序的编译过程类似,C程序的编译过程包括类型检测和预处理。同样地,对于
S函数模块,Simulink引擎在执行算法模型仿真时将由S函数定义的特定信息从一
个模块传递到下一个模块,传递的信息包括数据类型、信号线宽度和采样时间。
Simulink首先需要确认模块端口的输入和输出数据类型一致与否,模块之间的信
号线宽度必须要相等以及互相连接的采样时间需要保持一致性等。上述模块属性
都可以根据模型中的具体情况,在S函数的mdlInitializeSizes回调函数中进行扩展
编写。
此外,Simulink引擎通过执行各模块的S函数,调用回调函数来完成对模型
的仿真。一个S函数的代码包括一系列的S函数回调函数,用于在每个仿真阶段
执行指定的任务。在仿真模型中的每个仿真阶段,Simulink对S函数模块调用适
当的方法,通过S函数的回调来进行模块的初始化过程、计算采样点时间、计算
输出过程、进行模型状态更新这四个过程。这四个过程都可以通过在S函数中分
别编写对应的回调函数mdlInitializeSizes, mdlInitializeSampleTimes, mdlOutputs
和mdlUpdate来实现。
在RTW执行创建过程的初始化阶段需要对己组建好的模型进行分析,RTW
读取Matlab内建的模型文件model.mdl,将目标板卡预置模块、DSP Core支持库
模块、板级支持库模块、算法子系统以及它们之间的联系,生成具有多层次结构
的model.rtw文件。该文件中包含模型和子系统的结构及连接关系,是一种AS CII
码文件。model.rtw文件仅是模型转化为目标代码流程中的一个中间文件。
S函数API包含一个特定的回调函数md1RTW } md1RTW回调函数将Simulink
模块对话框中的参数从Simulink模块传递到model.rtw文件中,这样便可以在
Simulink环境中修改所生成自定义代码中的参数。
|