将 C 函数参数映射到 Simulink 端口

您可以使用 C

Caller 模块中的 Port specification 表,并通过命令行创建 FunctionPortSpecification 对象,将源代码中的 C 函数参数映射到 Simulink 端口。在源代码中,头文件包含要连接到 Simulink 端口的 C 函数参数。

extern void mean_filter(const unsigned char* src,

unsigned char* dst,

unsigned int width, unsigned int height,

unsigned int filterSize);

Port specification 显示您的参数的详细内容,以及它们如何连接到您在 Simulink 中的 C Caller 模块。

Name - 指定输入和输出参数的名称。Name 是源代码中的 C 函数中定义的函数参数名称。此列仅供参考。

Scope - 指定 C 函数参数如何映射到 Simulink 作用域。您的参数根据函数定义具有默认作用域,并且您可以根据源代码中的函数定义来更改作用域。

Simulink Scope作用域到模块的映射“Input”模块输入端口

“Output”模块输出端口

“InputOutput”模块输入和输出端口

“Global”模块使用的全局变量

“Parameter”模块可调参数

“Constant”常量值

当具有常量限定符定义(如 const double

*u)时,该参数必须为 input 或 parameter 类型。如果没有常量限定符,则该参数默认为 output 类型,您可以将其更改为 “Input”、“InputOutput” 或 “Parameter” 作用域。在这种情况下,请确保 C 函数不会修改指针指向的内存。如果参数是 Output 类型,则在该函数的每次调用中,该指针指向的每个元素都应该重新分配。

C 参数Simulink Scope函数返回“Output”

double u“Input”、“Parameter”、“Constant”

double u[]

double

u[][2]

double u[2][3]“Output”(默认值)、“Input”、“Parameter”

double *u“Output”(默认值)、“InputOutput”、“Input”、“Parameter”

const double *u

const double

u[]

const double

u[][2]

const double

u[2][3]“Input”(默认值)、“Parameter”

使用 “InputOutput” 端口映射 C 函数中指针传递的输入。使用 “InputOutput” 端口创建的端口具有相同的输入和输出端口名称。“InputOutput” 端口允许输入和输出端口重用缓冲区。这可以根据信号大小和模块布局来优化内存的使用。

要将 C 函数参数映射到 “InputOutput” 端口,请在函数定义中将变量定义为指针。

extern void mean_filter(unsigned char* src,

unsigned int width, unsigned int height,

unsigned int filterSize);

然后,在 Port Specification 表中选择 “InputOutput” 作为端口作用域,并将结果函数输出赋给自定义函数中的输入变量。

您可以在自定义代码中使用全局变量,将它们映射到适当的 Simulink 作用域。要在模型中使用全局变量,请从 Model Settings > Configuration Parameters > Simulation Target 中选择 Enable global variables as function interfaces。您可以将全局变量映射到 C Caller 模块上的 “Input”、“Output”、“InputOutput” 或 “Global” 作用域。这些作用域的可用性取决于自定义代码中全局变量的使用情况。

“Global” 作用域使您能够在自定义代码和 C Caller 模块之间传输数据,并允许您在计算期间对模块使用全局变量。使用 “Global” 作用域传输的值在模块接口上不可见。下表显示示例代码段及其默认端口和可用端口。

示例代码Simulink Scopedouble data;

void foo(void)

{

int temp = data;

}全局变量数据只读取变量 data。可用作用域包括:

“Input”(默认值)

“Global”

double data;

void bar(void)

{

data = 0;

}数据写入全局变量。可用作用域包括:

“Output”(默认值)

“Global”

“InputOutput”

double data;

void foo2(void)

{

data = data + 1;

}可对全局变量读写数据。可用作用域包括:

“Global”(默认值)

“InputOutput”

“Output”

Label - 指示 Simulink 模块中对应参数的标签。默认情况下,参数标签与参数名称相同,除非您更改它。

Simulink ScopeSimulink 端口标签“input”、“output”端口名称

“inputoutput”输入和输出端口中的端口名称

“Global”端口名称和全局变量名称

“parameter”参数名称

“constant”常量值的表达式。

使用输入参数名称的 size 表达式,例如 size(in1,1)

Type - 说明 Simulink 数据类型和 C 函数参数数据类型之间的匹配。

C 参数数据类型Simulink 数据类型有符号字符int8

无符号字符uint8

charint8 或 uint8,具体取决于编译器

int*int32

无符号 int*uint32

short *int16

long *int32 或 fixdt(1,64,0),取决于操作系统

float单精度

双精度双精度

int8_t*int8

uint8_t*int8

int16_t*int16

uint16_t*uint16

int32_t*int32

uint32_t*uint32

typedef struct {…} AStruct**总线:AStruct

typedef enum {..} AnEnum**枚举:AnEnum

* 如果 C Caller 采用整数类型,例如 int16_t,您可以将其修改为具有匹配的基类型的定点类型,例如修改为 fixdt(1, 16, 3)。

** C

Caller 同步按钮提示您将 C 函数使用的结构体或枚举类型导入为 Simulink 总线和枚举类型。

Size - 指定参数中的数据维度。

C 参数维度Simulink 端口维度double u标量 (1)

double u[]

double

u[][2]继承 (-1)(默认值)

如果参数用于输出端口,则应指定大小。无法继承输出端口的大小。

double *u继承 (-1)(默认值)

如果参数是针对 “inputoutput” 端口的,则无法继承大小,即使可以继承 “output” 端口的大小也是如此。

对于全局变量,大小是标量 (1)。

double u[2][3]大小为 [2, 3]。

创建 FunctionPortSpecification 对象并编辑 C Caller 模块属性

要以编程方式更改 Port Specification 表属性,您可以创建 FunctionPortSpecification 对象并修改其属性。要为模型中的所选 C

Caller 模块创建 FunctionPortSpecification 对象,请在命令行中键入:

myCCallerConfigObj = get_param(gcb, 'FunctionPortSpecification')

myCCallerConfigObj =

FunctionPortSpecification with properties:

CPrototype: 'real_T add(real_T u1, real_T u2);'

InputArguments: [1×2 Simulink.CustomCode.FunctionArgument]

ReturnArgument: [1×1 Simulink.CustomCode.FunctionArgument]

GlobalArguments: [1×0 Simulink.CustomCode.FunctionArgument]CPrototype 属性是只读属性,它显示 C 函数输入变量的声明。InputArgument 和 ReturnArgument 属性创建了 FunctionArgument 对象,您可以根据上面为 Port Specification 表定义的规则进一步编辑其属性。您可以参考 FunctionPortSpecification 了解详细信息。

要修改 C Caller 模块中的全局参数,请使用 getGlobalArg 创建 GlobalArguments 对象的句柄并修改其属性。

c代码生成matlab模块,使用 C Caller 模块集成 C 代码相关推荐

  1. c #include如何找到文件_使用 MATLAB Function 模块集成 C 代码

    检索   使用 MATLAB Function 模块集成 C 代码 从 Simulink 模型中调用 C 代码 您可以使用 MATLAB Function 模块从 Simulink® 模型中调用外部 ...

  2. matlab各名称,Matlab-Simulink各模块对应的中文名称及介绍

    <Matlab-Simulink各模块对应的中文名称及介绍>由会员分享,可在线阅读,更多相关<Matlab-Simulink各模块对应的中文名称及介绍(20页珍藏版)>请在人人 ...

  3. 基于MATLAB/Simulink搭建的纯电动汽车整车仿真模型,包括驾驶员模块,电机模块,制动能量回收模块

    基于MATLAB/Simulink搭建的纯电动汽车整车仿真模型,包括驾驶员模块,电机模块,制动能量回收模块,传动系统模块,纵向动力学模块,电池模块,由上述部分,搭建完成整车模型. 1.该模型具备较高精 ...

  4. 【MATLAB】一个宝藏博主公开的代码,给它加个速——水晶爱心模块

    [MATLAB]一个宝藏博主公开的代码,给它加个速--水晶爱心模块 实验结果 一.原版 二.优化一 三.优化二 四.衍生物 其他 by 今天不飞了 注意!源代码来自 MATLAB专家slandarer ...

  5. matlab中的out模块,matlab-simulink中out模块怎么用?

    启用步骤: 1.在MATLAB命令窗口中输入simulink 结果是在桌面上出现一个称为Simulink Library Browser的窗口,在这个窗口中列出了按功能分类的各种模块的名称. 当然用户 ...

  6. matlab abc dq,关于matlab及pscad中abc2dq模块的使用.doc

    关于matlab及pscad中abc2dq模块的使用.doc 关于matlab 及pscad 中abc2dq 模块的使用 Abc2dq 是电气控制系统中经常需要使用的模块,一般书本中对其的定义如下: ...

  7. Matlab之Simulink子系统及模块封装

    在Simulink中,子系统及模块封装是一种美化操作的技术. 为什么要封装成子系统? 因为在系统建模和仿真中,经常遇到很复杂的系统结构,难以用一个单个的模型框图进行描述.Simulink支持可以将这样 ...

  8. matlab中的abc-dq,关于matlab及pscad中abc2dq模块的使用

    关于matlab 及pscad 中abc2dq 模块的使用 Abc2dq 是电气控制系统中经常需要使用的模块,一般书本中对其的定义如下: 0cos cos(2/3) cos(2/3)2sin sin( ...

  9. Matlab编程技巧:通过Matlab脚本批量修改Simulink模块的大小,背景颜色

    Matlab编程技巧:通过M脚本修改Simulink模块的大小,背景颜色 M脚本修改Simulink模块的大小,背景颜色 选取一个Simulink模型,获取模块参数,在命令行输入代码: sysBolc ...

最新文章

  1. mysql 军规_MySQL军规
  2. tungsten开机启动及进程开启停止
  3. latex写文章的一些细节问题
  4. JavaScript调用浏览器里的websocket,如何多帧上行数据
  5. [转]避免误用 Redis
  6. python 文本框_重置Python中的文本框
  7. 秒杀系统设计的 5 个要点:前端三板斧+后端两条路
  8. Tensorflow验证码识别应用
  9. 阅读 LdrInitializeThunk
  10. android中影藏状态栏和标题栏的几种方法
  11. 2维FFT算法实现——基于GPU的基2快速二维傅里叶变换
  12. 【MyBatis】第一章 快速入门
  13. 前端web 技术盘点
  14. mysql 处理文件函数_mysql的字符串处理函数
  15. linux sdr 2832u软件无线电,使用R820T+RTL2832U玩软件无线电
  16. 视频教程-EOS 入门实战-区块链
  17. oracle 正版识别,正版Oracle产品价格
  18. 抖音网红穿的服装品牌,那些爆款女装号都是怎么拍的呢?
  19. 计算机中的PS颜色填充快捷键,ps中填充颜色的快捷键是什么(填充Shift+F5)
  20. 离散数学:用python实现矩阵乘法与关系矩阵

热门文章

  1. 马王堆汉墓帛书‧老子甲本——德经
  2. Postman-APIs是干什么的?
  3. LED电子时钟显示屏(NTP时间同步服务器)是如何完成授时服务的?
  4. 创龙基于Xilinx Artix-7系列FPGA处理器的HDMI、SFP接口
  5. python怎么画长方形_画一个漂亮的长方形
  6. 关于C++里const的pitfall
  7. Salesforce的V2MOM工作法:明确企业在做什么
  8. postgresql 数据库 等保审计 遇到的问题与办法 (整理)
  9. 工作 7 年的老程序员,现在怎么样了
  10. NVIDIA_CUDA和AMD_AMD APP