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开发之创建外部设备模块相关推荐

  1. iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2)

    iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2) 此时,当用户轻拍按钮后,一个叫tapButton()的方法就会被触发. 注意:以上这一种方式是动作声明和关联一起进行的,还有一种先 ...

  2. Android开发笔记(一百二十二)循环器视图RecyclerView

    RecyclerView RecyclerView是Android在support-v7库中新推出控件,中文别名为循环器视图,它的功能非常强大,可分别实现ListView.GridView,以及瀑布流 ...

  3. 【Visual C++】游戏开发五十五 浅墨DirectX教程二十二 水乳交融的美学:alpha混合技术

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/15026917 作者:毛星 ...

  4. 数字音频总线A2B开发详解二十二:ADAU1701做的功放板的音效(26个例程)(第二部分)

    六. A2B-ADAU1701音效开发:直通分频 混音讲完了,我们再来说说分频,同一个音源,如何才能同时推送到S板的2个黑色输出口来播放音乐呢? 先做S板的Sigma工程,最简单的分频输出,就是用T: ...

  5. Senparc.Weixin.MP SDK 微信公众平台开发教程(二十二):如何安装 Nuget(dll) 后使用项目源代码调试...

    最近碰到开发者问:我使用 nuget 安装了 Senparc.Weixin SDK,但是有一些已经封装好的过程想要调试,我又不想直接附加源代码项目,这样就没有办法同步更新了,我应该怎么办? 这其实是一 ...

  6. 读后感: 波、波、波---走出软件作坊:三五个人十来条枪 如何成为开发正规军(二十二)

    波.波.波---走出软件作坊:三五个人十来条枪 如何成为开发正规军(二十二) http://blog.csdn.net/david_lv/archive/2008/06/26/2589809.aspx ...

  7. 【转载】 javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册 - 孤傲苍狼 - 博 http://www.cnblogs.com/xdp-gacl/

    javaweb学习总结(二十二)--基于Servlet+JSP+JavaBean开发模式的用户登录注册 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+Ja ...

  8. Andriod开发之二十:Android开发笔记(序)写在前面的目录

    https://blog.csdn.net/aqi00/article/details/50038385 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经验教 ...

  9. OpenCV学习笔记(二十一)——绘图函数core OpenCV学习笔记(二十二)——粒子滤波跟踪方法 OpenCV学习笔记(二十三)——OpenCV的GUI之凤凰涅槃Qt OpenCV学习笔记(二十

    OpenCV学习笔记(二十一)--绘图函数core 在图像中,我们经常想要在图像中做一些标识记号,这就需要绘图函数.OpenCV虽然没有太优秀的GUI,但在绘图方面还是做得很完整的.这里就介绍一下相关 ...

最新文章

  1. 梯度下降法求多元线性回归及Java实现
  2. Python 编程快速上手 第十五章 保持时间,计划任务和启动程序
  3. 又拍云递归删除目录及文件
  4. 轻松理解UML用例图时序图类图的教程
  5. think python 2ed_Think Python 2ed 笔记(二)
  6. MySQL去重保留最大的那条记录(取最新的记录)
  7. linux c代码调试工具,在 Linux 中调试 C 程序的福音——gdb
  8. 编译器错误信息:CS0016:未能写入输出文件 c:\WINDOWS\Microsoft.NET\Framework\...的解决办法...
  9. 江西政务服务“掌上办”新模式分享
  10. Linux教程+操作系统教程 -- 大全
  11. c语言max函数和min,使用函数获取值,查找max,查找min并以C语言显示
  12. Aspose.word Java实现html转word,word转html
  13. 学而思王帆初中语文教学视频
  14. 慕课网C#开发轻松入门 6-1练习题目
  15. http协议的状态码 200、301、304、404、502 HTTP状态码解释
  16. 如何进行120hz的屏幕录像 OBS
  17. vue -- 移动端(vant)更换头像剪切功能
  18. Excel绘制散点图并拟合输出公式和R值
  19. 支撑软件开发人员的三种精神
  20. 配置大华网络摄像机,并远程存储到FTP服务器

热门文章

  1. YDOOK: ANSYS Maxwell 19 教程6:Maxwell 2D 材料管理 材料库 添加 新增材料
  2. 【奋斗】最全的厚黑学...教你怎样混社会
  3. 类和对象1-构造函数、析构函数
  4. YouTrack-为敏捷团队打造的项目管理工具
  5. avue参数个人总结
  6. 计算机java毕设 图书销售管理系统的设计与实现
  7. md5在 node 中如何使用
  8. mysql数据库调优
  9. 企业视频会议系统接入互联网的八种方法
  10. 小米8刷入LineageOS17.1