Simulink代码生成(二十二)——TSP开发之创建外部设备模块
Simulink代码生成(二十二)——TSP开发之创建外部设备模块
文章目录
- Simulink代码生成(二十二)——TSP开发之创建外部设备模块
- 一、C Mex Sfunction文件解读
一、C Mex Sfunction文件解读
以ds18b20为例编写的C Mex S-function模块内容如下
/*=====================================** Required setup for C MEX S-Function **=====================================*/
/**** S_FUNCTION_NAME ****/
#define S_FUNCTION_NAME sfunar_ds18b20#define S_FUNCTION_LEVEL 2/* define error messages */
#define ERR_INVALID_SET_INPUT_DTYPE_CALL \
"Invalid call to mdlSetInputPortDataType"#define ERR_INVALID_SET_OUTPUT_DTYPE_CALL \"Invalid call to mdlSetOutputPortDataType"#define ERR_INVALID_DTYPE "Invalid input or output port data type"enum
{PIN = 0,DEVICE_INDEX,NUMS_PARAM
};/*========================** General Defines/macros **========================*/
#define PIN(S) ssGetSFcnParam(S, PIN)
#define DEVICE_INDEX(S) ssGetSFcnParam(S, DEVICE_INDEX)/** Need to include simstruc.h for the definition of the SimStruct and* its associated macro definitions.*/
#include "simstruc.h"/* Function: mdlInitializeSizes ===============================================* Abstract:* Initialize the sizes array*/
static void mdlInitializeSizes(SimStruct *S)
{/* Set and Check parameter count */ssSetNumSFcnParams(S, NUMS_PARAM); //有两个输入参数if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) return;/* Set the parameter's tunable status */for(int i = 0; i < NUMS_PARAM; i++){ssSetSFcnParamTunable(S, i, SS_PRM_NOT_TUNABLE); //输入参数都设为不可调}// No input and outputif (!ssSetNumInputPorts(S, 0)) { //没有输入return;}if (!ssSetNumOutputPorts(S, 1)) { // 1个输出return;}ssSetOutputPortWidth(S,0,1); //输出维度为1ssSetOutputPortSampleTime(S, 0, INHERITED_SAMPLE_TIME); //继承采样ssSetOutputPortOffsetTime(S, 0, 0.0);ssSetOutputPortDataType(S,0 ,SS_DOUBLE); //输出数据类型为double/* sample times */ssSetNumSampleTimes(S, 1); //1种采样时间//ssSetInputPortDirectFeedThrough(S, 0, 1); //没有输入,没有直接馈入/* options */ssSetOptions(S, (SS_OPTION_EXCEPTION_FREE_CODE |SS_OPTION_DISALLOW_CONSTANT_SAMPLE_TIME));
} /* end mdlInitializeSizes *//* Function: mdlInitializeSampleTimes =========================================* Abstract:* Initialize the sample times array.*/
static void mdlInitializeSampleTimes(SimStruct *S)
{ssSetSampleTime(S, 0, INHERITED_SAMPLE_TIME);ssSetOffsetTime(S, 0, 0.0);ssSetModelReferenceSampleTimeDefaultInheritance(S);
} /* end mdlInitializeSampleTimes *//* Function: mdlOutputs =======================================================* Abstract:* Compute the outputs of the S-function.*/
static void mdlOutputs(SimStruct *S, int_T tid)
{} /* end mdlOutputs *//* Function: mdlTerminate =====================================================* Abstract:* Called when the simulation is terminated.*/
static void mdlTerminate(SimStruct *S)
{UNUSED_PARAMETER(S);
} /* end mdlTerminate */#define MDL_RTW
#if defined(MATLAB_MEX_FILE) && defined(MDL_RTW)/* Function: mdlRTW =======================================================* Abstract:* This function is called when the Real-Time Workshop is generating* the model.rtw file.*/
static void mdlRTW(SimStruct *S)
{int_T c_pin = (int) (mxGetScalar(PIN(S))); //获取参数1,c文件中用c_xx,tlc文件中用t_xx,习惯写法便于区分int_T c_device_index = (int) (mxGetPr(DEVICE_INDEX(S))[0]); //获取参数2if (!ssWriteRTWParamSettings(S, NUMS_PARAM,SSWRITE_VALUE_DTYPE_NUM, "r_pin", &c_pin, DTINFO(SS_INT8, COMPLEX_NO),SSWRITE_VALUE_DTYPE_NUM, "r_device_index", &c_device_index, DTINFO(SS_INT8, COMPLEX_NO))){/* An error occurred which will be reported */}
}
#endif#ifdef MATLAB_MEX_FILE /* Is this file being compiled as a MEX-file? */
# include "simulink.c" /* MEX-file interface mechanism */
//# include "fixedpoint.c" /* needed when it is configured with fixdt data type */
#else /* Prevent usage by RTW if TLC file is not found */
#include "cg_sfun.h" /* Code generation registration function */
#endif
!ssWriteRTWParamSettings(S, NUMS_PARAM,
SSWRITE_VALUE_DTYPE_NUM, “r_pin”, &c_pin, DTINFO(SS_INT8, COMPLEX_NO),
SSWRITE_VALUE_DTYPE_NUM, “r_device_index”, &c_device_index, DTINFO(SS_INT8, COMPLEX_NO))
上面这句是最核心的,可以参考matlab的help:
ssWriteRTWParamSettings用法
在tlc中访问C Mex S中的变量用这种方式
Simulink代码生成(二十二)——TSP开发之创建外部设备模块相关推荐
- iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2)
iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2) 此时,当用户轻拍按钮后,一个叫tapButton()的方法就会被触发. 注意:以上这一种方式是动作声明和关联一起进行的,还有一种先 ...
- Android开发笔记(一百二十二)循环器视图RecyclerView
RecyclerView RecyclerView是Android在support-v7库中新推出控件,中文别名为循环器视图,它的功能非常强大,可分别实现ListView.GridView,以及瀑布流 ...
- 【Visual C++】游戏开发五十五 浅墨DirectX教程二十二 水乳交融的美学:alpha混合技术
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/15026917 作者:毛星 ...
- 数字音频总线A2B开发详解二十二:ADAU1701做的功放板的音效(26个例程)(第二部分)
六. A2B-ADAU1701音效开发:直通分频 混音讲完了,我们再来说说分频,同一个音源,如何才能同时推送到S板的2个黑色输出口来播放音乐呢? 先做S板的Sigma工程,最简单的分频输出,就是用T: ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(二十二):如何安装 Nuget(dll) 后使用项目源代码调试...
最近碰到开发者问:我使用 nuget 安装了 Senparc.Weixin SDK,但是有一些已经封装好的过程想要调试,我又不想直接附加源代码项目,这样就没有办法同步更新了,我应该怎么办? 这其实是一 ...
- 读后感: 波、波、波---走出软件作坊:三五个人十来条枪 如何成为开发正规军(二十二)
波.波.波---走出软件作坊:三五个人十来条枪 如何成为开发正规军(二十二) http://blog.csdn.net/david_lv/archive/2008/06/26/2589809.aspx ...
- 【转载】 javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册 - 孤傲苍狼 - 博 http://www.cnblogs.com/xdp-gacl/
javaweb学习总结(二十二)--基于Servlet+JSP+JavaBean开发模式的用户登录注册 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+Ja ...
- Andriod开发之二十:Android开发笔记(序)写在前面的目录
https://blog.csdn.net/aqi00/article/details/50038385 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经验教 ...
- OpenCV学习笔记(二十一)——绘图函数core OpenCV学习笔记(二十二)——粒子滤波跟踪方法 OpenCV学习笔记(二十三)——OpenCV的GUI之凤凰涅槃Qt OpenCV学习笔记(二十
OpenCV学习笔记(二十一)--绘图函数core 在图像中,我们经常想要在图像中做一些标识记号,这就需要绘图函数.OpenCV虽然没有太优秀的GUI,但在绘图方面还是做得很完整的.这里就介绍一下相关 ...
最新文章
- 梯度下降法求多元线性回归及Java实现
- Python 编程快速上手 第十五章 保持时间,计划任务和启动程序
- 又拍云递归删除目录及文件
- 轻松理解UML用例图时序图类图的教程
- think python 2ed_Think Python 2ed 笔记(二)
- MySQL去重保留最大的那条记录(取最新的记录)
- linux c代码调试工具,在 Linux 中调试 C 程序的福音——gdb
- 编译器错误信息:CS0016:未能写入输出文件 c:\WINDOWS\Microsoft.NET\Framework\...的解决办法...
- 江西政务服务“掌上办”新模式分享
- Linux教程+操作系统教程 -- 大全
- c语言max函数和min,使用函数获取值,查找max,查找min并以C语言显示
- Aspose.word Java实现html转word,word转html
- 学而思王帆初中语文教学视频
- 慕课网C#开发轻松入门 6-1练习题目
- http协议的状态码 200、301、304、404、502 HTTP状态码解释
- 如何进行120hz的屏幕录像 OBS
- vue -- 移动端(vant)更换头像剪切功能
- Excel绘制散点图并拟合输出公式和R值
- 支撑软件开发人员的三种精神
- 配置大华网络摄像机,并远程存储到FTP服务器