Simulink使用代码继承工具将外部c代码封装成Simulink模块用于代码生成

概述

Simulink应用层模型与手写C语言底层代码打包集成的方式有两种。

方式一是在代码中集成:应用层模型生成代码后,在底层代码中增加接口层,与应用层代码整合编译,autosar就是这种方式。

方式二是在模型中集成:编写c mex s-function底层驱动模块,将代码封装成模型,在simulink库中直接使用。

本文介绍第二种方式。

编写c mex s-function底层驱动模块

1、代开matlab,切换指定工作目录。

2、将当前工作目录添加入工作路径。

3、创建Library模型

命名Library并保存

4、编写slblocks.m,设置自定义库在Simulink Library列表中显示自定义库名称。

function blkStruct = slblocks
        % This function specifies that the library should appear
        % in the Library Browser
        % and be cached in the browser repository

        Browser.Library = 'MPC5744_Block_ZYY';
        % 'Lotus_SupportPacket' is the name of the library

        Browser.Name = 'MPC5744_Block_ZYY';
        % 'Lotus_CMEX_SFunction' is the library name that appears 
        % in the Library Browser

        blkStruct.Browser = Browser;

5、编写sl_customization.m文件,用于为自定义库设置排序优先级,-2表示置顶显示。

function sl_customization(cm)
    cm.LibraryBrowserCustomizer.applyOrder( {'MPC5744_Block_ZYY', -2} );
end

创建完之后分别运行两个m脚本。

6、打开一个空模型,查看自定义库是否加载到Simulink Library,我已经创建好,所以已经有一个模块在这里。

第一次创建的话,运行完脚本后按如下操作

刷新simulink库列表,快捷键F5。

做完之后如果没有显示,可重起matlab。

7、准备储备文件

创建一个c文件一个h文件

#include "CanSend.h"
 
void SL_CAN_Write(uint8 index,  CAN_MESSAGE*msgAddr)
{

}




#ifndef _MY_TYPES_H_

#define _MY_TYPES_H_
typedef unsigned char uint8;
typedef unsigned int uint32;
typedef struct
{
    uint8 Extended;
    uint8 Length;
    uint8 Remote;
    uint8 Error;
    uint32 ID;
    uint8 Data[8];
}  CAN_MESSAGE;
extern void SL_CAN_Write(uint8 index,  CAN_MESSAGE*msgAddr);
#endif

8、创建脚本CMEXSFunction.m

clc;
Simulink.importExternalCTypes('CanSend.h');
def1=legacy_code('initialize');
def1.SFunctionName = 'SL_CAN_Write';
def1.OutputFcnSpec = 'void SL_CAN_Write(uint8 u1,  CAN_MESSAGE u2[1])';
def1.HeaderFiles   = {'CanSend.h'};
def1.SourceFiles   = {'CanSend.c'};
legacy_code('sfcn_cmex_generate',def1);
legacy_code('compile',def1);
legacy_code('generate_for_sim', def1);
legacy_code('slblock_generate', def1);

运行脚本。

9、对脚本进行简单封装

10、将封装好的模块加入3创建的模型

保存,关闭模型。

11、打开新的空白模型,点击库浏览器,刷新库浏览器。

新建的块出现在了库浏览器中。

12、更改求解器类型、选择tlc文件。

将变步长改成定步长。

13、搭建模块,生成代码,移植代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值