CN108415699A - 利用Simulink定制单片机的底层驱动进行代码生成的方法 - Google Patents
利用Simulink定制单片机的底层驱动进行代码生成的方法 Download PDFInfo
- Publication number
- CN108415699A CN108415699A CN201810144868.7A CN201810144868A CN108415699A CN 108415699 A CN108415699 A CN 108415699A CN 201810144868 A CN201810144868 A CN 201810144868A CN 108415699 A CN108415699 A CN 108415699A
- Authority
- CN
- China
- Prior art keywords
- module
- function
- simulink
- code
- bottom layer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/35—Creation or generation of source code model driven
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种利用Simulink定制单片机的底层驱动进行代码生成的方法,包括:S1 编写模块S‑Function;S2 对上述模块S‑Function进行编译;S3 建立模块S‑Function与mexw32文件之间的联系;S4 对模块S‑Function进行封装;S5 编写模块S‑Function的tlc文件。有益效果:底层驱动兼容Simulink模块库中的自带模块,用户在Matlab/Simulink环境中直接使用本方明所述代码生成方法,全程不需要人为编写任何代码,通过这种开发模式,可以提高开发效率,不会因为用户的水平而造成控制程序的执行效率等问题;同时,用户可以将精力集中到汽车电子控制单元的控制策略开发上来,而不用考虑驱动程序的编写问题,节省汽车电子控制单元开发时间。
Description
技术领域
本发明涉及汽车电子控制单元基于模型开发的方法,具体来说,涉及一种利用Simulink定制单片机的底层驱动进行全自动代码生成的方法。
背景技术
目前在汽车与航空航天等领域中基于模型设计的方法已经被越来越多的使用。汽车行业通用的汽车电子控制单元的开发大体分为底层软件和应用层软件,底层软件常用的开发方法是手写单片机的底层驱动程序,应用层软件是利用Matlab/Simulink/Stateflow工具以图形化形式建立模型,并以Matlab自带的Embeded Coder工具将图形化形式的模型转为C代码,用户再将手写的底层代码与应用层生成的C代码二者集成到一起后才可以下载到汽车电子控制单元里面。
针对相关技术中的问题,目前尚未提出有效的解决方案。
为了加速汽车电子控制单元中底层驱动的开发流程,本发明将MPC5644A单片机的底层驱动以Simulink模块的形式添加到Simulink模型库中,以图形化形式建立模型,利用Embeded Coder代码生成机制,实现驱动代码的快速生成。代码生成完毕后自动后台启动CodeWarrior编译器对模型源代码进行编译链接等操作,全程不需要人为执行任何操作,实现Embeded Coder由系统模型到应用程序下载的一键式操作。
发明内容
针对相关技术中的上述技术问题,本发明提出一种利用Simulink定制MPC5644A的底层驱动进行代码生成的方法,能够提高代码开发效率。
为实现上述技术目的,本发明的技术方案是这样实现的:
一种利用Simulink定制MPC5644A的底层驱动进行代码生成的方法,包括以下步骤:
S1编写模块S-Function:在熟悉S-Function编写的的基础上,编写该款单片机某个功能模块的S-Function,所述的S-Function包含了该功能模块中的输入或输出数量,宽度,数据类型,采样时间以及其他一些信息,所述的S-Function保存在一个特定的文件夹中,其扩展名为“c”;
S2模块S-Function的编译:利用Matlab自带了Lcc编译器对模块S-Function进行编译,但第一次启动Lcc时,需要初始化Lcc编译器,可在Matlab命令窗口下输入mex–setup,回车,让用户选择编译器,选择1,代表Lcc,再回车,确认用户的选择,输入y。
完成这个步骤后,要将Matlab工作路径与步骤1中的文件夹路径保持一致,在Matlab命令窗口下输入mex xxx.c,xxx表示模块名,此时文件夹中生成一个xxx.mexw32动态链接库文件,表示模块S-Function的编译已完成;
S3模块S-Function与mexw32文件建立联系:将S-Function模块添加到Simulink模型中,双击该模块,在弹出的对话框中第一行输入同所述的模块S-Function文件名一致,在对话框中第二行输入参数信息,点击OK确定,这时,模块S-Function与mexw32文件之间建立了联系;
S4模块封装:对模块进行封装,定制个性化的图标和对话框。右键选中模块的EditMask 选项,对模块进行个性化编辑。在Icon&Ports选项卡中输入显示命令,用来个性化定制模块界面的显示内容;在Parameters选项卡中添加模块参数,并给每个参数取一个提示名;在 Documentation选项卡中填写关于该模块的一些说明信息及帮助信息,以便使用户能更快了解该模块及其用法;
S5编写模块tlc(Target Language Compiler)文件:设备驱动模块S-Function封装完毕后,为了将定制的驱动模块程序嵌入到自动生成的模型源代码中,需要编写设备驱动模块的tlc 文件。所述的tlc中包含四个函数:BlockTypeSetup、Start、Outputs、Terminate。
BlockTypeSetup函数只在代码生成过程中执行一次,用来执行给定类型的所有模块的一般性操作,可以将模块中的要用到的#include头文件包含操作,宏声明,函数原型的声明等放在BlockTypeSetup中;Start函数中的代码在经过Embeded Coder代码自动生成之后会存放到模型的初始化函数(initialize)中,可将模块的初始化配置放在Start中;Outputs函数中的代码在经过Embeded Coder代码自动生成之后会存放到模型的step函数中;Terminate函数中的代码在经过Embeded Coder代码自动生成之后会存放到模型的terminate函数中。当定制用户自定义的模块tlc文件时,用户能够通过使用该函数来执行保存数据、清空内存及复位目标硬件等操作。
S6按照步骤1-5将每个模块封装好后保存为MPC5644A_Lib库,然后编写slblocks.m 脚本文件,在Simulink Browser环境界面中将会出现MPC5644A硬件的底层驱动库。
本发明的有益效果:Simulink中搭建的系统模型经过Embeded Coder工具创建过程后,会自动将生成的模型源代码下载到目标板中运行,全程不需要人为对源代码进行任何修改,真正实现了从系统模型到系统应用程序的一键式操作;同时,实验测试结果表明设计的 MPC5644A的底层驱动,功能完全正确。因此,利用这种开发方式可以降低项目的开发成本、提高开发效率、缩短产品的上市周期,同时由于驱动模块程序的接口符合AutoSAR标准,这也大大提高了代码的通用性和移植性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本发明实施例所述的一种利用Simulink定制单片机的底层驱动进行代码生成的方法的S-Function封装过程;
图2是根据本发明实施例所述的一种利用Simulink定制单片机的底层驱动进行代码生成的方法的MPC5644底层驱动S-Function模块示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,根据本发明实施例所述的一种利用Simulink定制单片机的底层驱动进行代码生成的方法,包括:
S1编写模块S-Function;
S2对上述模块S-Function进行编译;
S3建立模块S-Function与mexw32文件之间的联系;
S4对模块S-Function进行封装;
S5编写模块S-Function的tlc文件。
进一步的,该方法进一步包括:S6将每个模块封装好后保存为MPC5644A_Lib库,然后编写slblocks.m脚本文件。
进一步的,S1具体包括:编写该单片机功能模块的S-Function,所述的S-Function包含了该功能模块中的输入或输出数量,宽度,数据类型,采样时间以及其他信息,所述的S- Function保存在一个特定的文件夹中,其扩展名为“c”。
进一步的,S2具体包括:利用Matlab的Lcc编译器对模块S-Function进行编译,Matlab工作路径与S1中的文件夹路径保持一致。
进一步的,S3具体包括:将S-Function模块添加到Simulink模型中,建立模块S-Function与mexw32文件之间的联系。
进一步的,S4具体包括:对模块进行封装,定制个性化的图标和对话框;在 Icon&Ports选项卡中输入显示命令,用来个性化定制模块界面的显示内容;在Parameters选项卡中添加模块参数,给每个参数取一个提示名;在Documentation选项卡中填写关于该模块的说明信息及帮助信息,以便使用户能更快了解该模块及其用。
进一步的,S5具体包括:设备驱动模块S-Function封装完毕后,编写设备驱动模块的tlc文件。
进一步的,所述的tlc中包含四个函数:BlockTypeSetup、Start、Outputs、Terminate,
其中,BlockTypeSetup函数只在代码生成过程中执行一次,用来执行给定类型的所有模块的一般性操作,用于存放模块中要用到的#include头文件包含操作,宏声明,函数原型的声明;
Start函数中的代码在经过Embeded Coder代码自动生成之后会存放到模型的初始化函数 initialize中,用于存放模块的初始化配置;
Outputs函数中的代码在经过Embeded Coder代码自动生成之后会存放到模型的step函数中;
Terminate函数中的代码在经过Embeded Coder代码自动生成之后会存放到模型的terminate 函数中,用于在定制用户自定义的模块tlc文件时,执行保存数据、清空内存及复位目标硬件操作。
为了方便理解本发明的上述技术方案,以下通过具体使用方式上对本发明的上述技术方案进行详细说明。
在具体使用时,根据本发明所述的利用Simulink定制MPC5644A的底层驱动进行代码生成的方法,包括以下几个步骤:
步骤1)编写模块S-Function:在熟悉S-Function编写的的基础上,编写该款单片机某个功能模块的S-Function,所述的S-Function包含了该功能模块中的输入或输出数量,宽度,数据类型,采样时间以及其他一些信息,所述的S-Function保存在一个特定的文件夹中,其扩展名为“c”;
步骤2)模块S-Function的编译:利用Matlab自带了Lcc编译器对模块S-Function进行编译,但第一次启动Lcc时,需要初始化Lcc编译器,可在Matlab命令窗口下输入mex–setup,回车,让用户选择编译器,选择1,代表Lcc,再回车,确认用户的选择,输入y。
完成这个步骤后,要将Matlab工作路径与步骤1中的文件夹路径保持一致,在Matlab命令窗口下输入mex xxx.c,xxx表示模块名,此时文件夹中生成一个xxx.mexw32动态链接库文件,表示模块S-Function的编译已完成;
步骤3)模块S-Function与mexw32文件建立联系:将S-Function模块添加到Simulink模型中,双击该模块,在弹出的对话框中第一行输入同所述的模块S-Function文件名一致,在对话框中第二行输入参数信息,点击OK确定,这时,模块S-Function与mexw32文件之间建立了联系;
步骤4)模块封装:对模块进行封装,定制个性化的图标和对话框。右键选中模块的EditMask选项,对模块进行个性化编辑。在Icon&Ports选项卡中输入显示命令,用来个性化定制模块界面的显示内容;在Parameters选项卡中添加模块参数,并给每个参数取一个提示名,在Prompt选项栏中输入需要定制的模块S-Function对话框中显示的内容,点击确认后,在所述的Prompt选项栏中输入的文字将会出现在S-Function模块对话框中。在Variable 栏中输入的变量要与S-Function对话框中输入的参数对应。在Type栏中选择参数要表现的形式,Popup表示以下拉菜单的形式供用户枚举,edit表示用户自己编辑参数;在Documentation选项卡中填写关于该模块的一些说明信息及帮助信息,以便使用户能更快了解该模块及其用法;
步骤5)编写模块tlc(Target Language Compiler)文件:设备驱动模块S-Function封装完毕后,为了将定制的驱动模块程序嵌入到自动生成的模型源代码中,需要编写设备驱动模块的 tlc文件。所述的tlc中包含四个函数:BlockTypeSetup、Start、Outputs、Terminate。
BlockTypeSetup函数只在代码生成过程中执行一次,用来执行给定类型的所有模块的一般性操作,可以将模块中的要用到的#include头文件包含操作,宏声明,函数原型的声明等放在BlockTypeSetup中;Start函数中的代码在经过Embeded Coder代码自动生成之后会存放到模型的初始化函数(initialize)中,可将模块的初始化配置放在Start中;Outputs函数中的代码在经过Embeded Coder代码自动生成之后会存放到模型的step函数中;Terminate函数中的代码在经过Embeded Coder代码自动生成之后会存放到模型的terminate函数中。当定制用户自定义的模块tlc文件时,用户能够通过使用该函数来执行保存数据、清空内存及复位目标硬件等操作。
步骤6)按照步骤1-5将每个模块封装好后保存为MPC5644A_Lib库,然后编写slblocks.m脚本文件,在Simulink Browser环境界面中将会出现MPC5644A硬件的底层驱动库。在Simulink Browser环境界面中中,双击定制的S-Function模块,会弹出定制的S-Function模块对话框,在所述的对话框中输入相应的参数后按OK确认即可。
综上所述,借助于本发明的上述技术方案,通过Simulink中搭建的系统模型经过Embeded Coder工具创建过程后,会自动将生成的模型源代码下载到目标板中运行,全程不需要人为对源代码进行任何修改,真正实现了从系统模型到系统应用程序的一键式操作;同时,实验测试结果表明设计的MPC5644A的底层驱动,功能完全正确。因此,利用这种开发方式可以降低项目的开发成本、提高开发效率、缩短产品的上市周期,同时由于驱动模块程序的接口符合AutoSAR标准,这也大大提高了代码的通用性和移植性。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种利用Simulink定制单片机的底层驱动进行代码生成的方法,其特征在于,包括:
S1 编写模块S-Function;
S2 对上述模块S-Function进行编译;
S3 建立模块S-Function与mexw32文件之间的联系;
S4 对模块S-Function进行封装;
S5 编写模块S-Function的tlc文件。
2.根据权利要求1所述的利用Simulink定制单片机的底层驱动进行代码生成的方法,其特征在于,该方法进一步包括:S6 将每个模块封装好后保存为MPC5644A_Lib库后,编写slblocks.m脚本文件。
3.根据权利要求1所述的利用Simulink定制单片机的底层驱动进行代码生成的方法,其特征在于,S1具体包括:编写该单片机功能模块的S-Function,所述的S-Function包含了该功能模块中的输入或输出数量,宽度,数据类型,采样时间以及其他信息,所述的S-Function保存在一个特定的文件夹中,其扩展名为“c”。
4.根据权利要求1或3所述的利用Simulink定制单片机的底层驱动进行代码生成的方法,其特征在于,S2具体包括:利用Matlab的Lcc编译器对模块S-Function进行编译,Matlab工作路径与S1中的文件夹路径保持一致。
5.根据权利要求1所述的利用Simulink定制单片机的底层驱动进行代码生成的方法,其特征在于,S3具体包括:将S-Function模块添加到Simulink模型中,建立模块S-Function与mexw32文件之间的联系。
6.根据权利要求1所述的利用Simulink定制单片机的底层驱动进行代码生成的方法,其特征在于,S4具体包括:对模块进行封装,定制个性化的图标和对话框;在Icon&Ports选项卡中输入显示命令,用来个性化定制模块界面的显示内容;在Parameters选项卡中添加模块参数,给每个参数取一个提示名;在Documentation选项卡中填写关于该模块的说明信息及帮助信息,以便使用户能更快了解该模块及其用。
7.根据权利要求1所述的利用Simulink定制单片机的底层驱动进行代码生成的方法,其特征在于,S5具体包括:设备驱动模块S-Function封装完毕后,编写设备驱动模块的tlc文件。
8.根据权利要求7所述的利用Simulink定制MPC5644A的底层驱动进行代码生成的方法,其特征在于,所述的tlc 中包含四个函数:BlockTypeSetup、Start、Outputs、Terminate,
其中,BlockTypeSetup函数只在代码生成过程中执行一次,用来执行给定类型的所有模块的一般性操作,用于存放模块中要用到的#include头文件包含操作,宏声明,函数原型的声明;
Start函数中的代码在经过Embeded Coder代码自动生成之后会存放到模型的初始化函数initialize中,用于存放模块的初始化配置;
Outputs函数中的代码在经过Embeded Coder代码自动生成之后会存放到模型的step函数中;
Terminate函数中的代码在经过Embeded Coder代码自动生成之后会存放到模型的terminate 函数中,用于在定制用户自定义的模块tlc文件时,执行保存数据、清空内存及复位目标硬件操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810144868.7A CN108415699A (zh) | 2018-02-12 | 2018-02-12 | 利用Simulink定制单片机的底层驱动进行代码生成的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810144868.7A CN108415699A (zh) | 2018-02-12 | 2018-02-12 | 利用Simulink定制单片机的底层驱动进行代码生成的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108415699A true CN108415699A (zh) | 2018-08-17 |
Family
ID=63128422
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810144868.7A Pending CN108415699A (zh) | 2018-02-12 | 2018-02-12 | 利用Simulink定制单片机的底层驱动进行代码生成的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108415699A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109190306A (zh) * | 2018-10-19 | 2019-01-11 | 北京经纬恒润科技有限公司 | 一种数据回灌仿真方法及装置 |
CN109976750A (zh) * | 2019-03-28 | 2019-07-05 | 深圳市创联时代科技有限公司 | 一种基于嵌入式开发系统的组件源码配置和组件裁剪方法 |
CN110196720A (zh) * | 2019-05-29 | 2019-09-03 | 北京灵思创奇科技有限公司 | 一种Simulink生成动态链接库的优化方法 |
CN111309292A (zh) * | 2020-02-03 | 2020-06-19 | 西安微电子技术研究所 | 一种基于MATLAB/Simulink的全模型可执行程序构建方法 |
CN111538488A (zh) * | 2020-04-17 | 2020-08-14 | 荏原冷热系统(中国)有限公司 | 一种单片机驱动程序生成方法及装置 |
CN112631594A (zh) * | 2019-09-24 | 2021-04-09 | 北京车和家信息技术有限公司 | 一种硬件系统开发方法、设备和计算机可读存储介质 |
-
2018
- 2018-02-12 CN CN201810144868.7A patent/CN108415699A/zh active Pending
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109190306A (zh) * | 2018-10-19 | 2019-01-11 | 北京经纬恒润科技有限公司 | 一种数据回灌仿真方法及装置 |
CN109976750A (zh) * | 2019-03-28 | 2019-07-05 | 深圳市创联时代科技有限公司 | 一种基于嵌入式开发系统的组件源码配置和组件裁剪方法 |
CN110196720A (zh) * | 2019-05-29 | 2019-09-03 | 北京灵思创奇科技有限公司 | 一种Simulink生成动态链接库的优化方法 |
CN110196720B (zh) * | 2019-05-29 | 2023-01-10 | 北京灵思创奇科技有限公司 | 一种Simulink生成动态链接库的优化方法 |
CN112631594A (zh) * | 2019-09-24 | 2021-04-09 | 北京车和家信息技术有限公司 | 一种硬件系统开发方法、设备和计算机可读存储介质 |
CN111309292A (zh) * | 2020-02-03 | 2020-06-19 | 西安微电子技术研究所 | 一种基于MATLAB/Simulink的全模型可执行程序构建方法 |
CN111538488A (zh) * | 2020-04-17 | 2020-08-14 | 荏原冷热系统(中国)有限公司 | 一种单片机驱动程序生成方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108415699A (zh) | 利用Simulink定制单片机的底层驱动进行代码生成的方法 | |
US8150673B1 (en) | Partitioning a model in modeling environments | |
CN107451663B (zh) | 算法组件化、基于算法组件建模方法、装置以及电子设备 | |
US7275237B1 (en) | Real-time control system development tool with input pins providing values used by component during execution | |
Piroumian | Wireless J2ME platform programming | |
CN113032963B (zh) | 一种Simulink模型仿真加速方法及装置 | |
US20100138808A1 (en) | Embedded system design device and a method thereof using a target independent model | |
JPWO2011080945A1 (ja) | プログラム作成支援装置 | |
CN104573193B (zh) | 一种航天器gnc系统快速设计方法 | |
JP2005129027A (ja) | アプリケーションプログラミングインターフェース(api)の設計 | |
CN111367511A (zh) | 一种仿真模型接口适配开发系统及其工作方法 | |
CN104915297B (zh) | 一种android设备的APP耗电量的自动化测试方法 | |
Hussain et al. | Programming a microcontroller | |
Bouillon et al. | Reverse engineering of web pages based on derivations and transformations | |
Jorges et al. | Model driven design of reliable robot control programs using the jABC | |
CN106970787A (zh) | 一种汽车控制器快速原型实现方法 | |
Mrozek | Computer aided design of mechatronic systems | |
Huning et al. | Seamless Integration of Hardware Interfaces in UML-based MDSE Tools. | |
CN114115850A (zh) | 一种代码生成方法及装置 | |
Oksanen et al. | Development and runtime environment for embedded controller supporting ISO 11783 standard | |
CN105425728A (zh) | 多轴运动串行控制示教编程方法 | |
CN102645899A (zh) | 视窗式光机电一体化设备动作流编辑系统 | |
CN112272820B (zh) | 支持装置以及支持程序的记录介质 | |
Tolvanen et al. | Metamodeling for medical devices: Code generation, model-debugging and run-time synchronization | |
JP2005141435A (ja) | ツール |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20180817 |
|
WD01 | Invention patent application deemed withdrawn after publication |