simulink和c语言开发,Simulink之嵌入式C代码生成-应用层和底层的接口

本文介绍了如何使用MATLAB进行基于模型的开发(MBD)生成嵌入式代码,特别是应用层与底层接口的配置。通过一个简单的电路例子,展示了如何配置模型以实现输入输出接口,并最终将生成的代码应用于单片机编译器。文中还提及了代码生成后的实际执行问题,并预告了下期将探讨更多接口类型及其配置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0774d7401a8fb49a97841cd8ce8a6ab6.png

今天给大家带来的仍然是基于MBD的嵌入式代码生成,主要把应用层和底层接口之间的代码生成配置说一下。本周末会更新功能安全相关,欢迎大家留言交流!

作为一个总是用C写代码的人来说,第一次接触到基于MBD的代码生成的时候就迫不及待的想知道怎么能让生成的代码用到嵌入式控制器中。刚开始,没有Green Hills、没有matlab的硬件支持包,也不会makefile,但简陋的设施仍然无法阻挡我研究的步伐。后来经过摸索发现真想学习代码生成,只需要有单片机软件编译器(对应芯片的就行),matlab就可以搞定。下面通过一个简单实例来给大家演示下,如何通过配置让应用层和底层拥有共同的接口。

假设有如下所示电路,当左侧滑动变阻器发生变化时调整灯的亮度。

95c728cec58d53483f654b006e670b68.png

首先底层代码肯定会有如下图所示接口示意代码:

130392bc3269c8c14188bc5e95ca8c7b.png

其中in_AD为输入接口,out_PWM为输出接口,Test1_step ()为应用程序。Test1.c为应用程序代码。所以说,当接口定义完成后底层代码和应用层代码可以按照这套接口来同时开发,这样加快了项目的开发进度。那接下来看看怎么样才能得到对应的应用代码可以直接放到编译软件中来编译。这里我们建立这样的一个模型:

6d86a0eacedf03c1c6a4c051fa689bac.png

做以下配置(前言说过的配置不再赘述,大家忘记的可以点击链接会跳转到前前言篇Simulink之嵌入式C代码生成-前言篇):

11668e8b9072bf336d60786ea9c74788.png

7201d83a05fbb6c2ba6df69073feebec.png

67c7bb48146deacac13315ceec85873b.png

ebbc20cdd00f1f0b08aa92c27e5c65f3.png

0f1cfa1ab4054ea6071336a479a5c895.png

点击代码生成。

按照下图所示将模型代码放入到编译器中,将Test1.h包含到main.h中,并调用模型生成的代码。点击编译,可以看到编译通过,但是模型到底能不能执行呢?实际仿真一下,答案是不能按照想要的结果执行的。

f6fdadd5b3cfe67fe04a1f5c61bf9470.png

打开Test1.c就可以看到,模型执行的实际代码如下:

5708145651e266e174856ef72555cb10.png

1ce1fdad9c237148b2f9a9cae467d9e6.png

可以发现这里输入接口不是in_AD而是Test1_U.AD;同样的,输出也不是。描述到这里终于到了关键点——如何灵活设置应用层接口?

a809b4428b2c5ded91d8bb39a9385449.png

4d07304fe9225983137b2cc250260ae4.png

创建完成信号后记得将workspace中的信号另存为脚本文件(下次分析这一步操作的原因)。设置完成之后再次编译,可观察到生成的代码如下:

fc51aa3931ae8be61e8822d827d0d687.png

代码中的接口与我们最开始定义的接口完全一致了,将代码放到编译器中就可以编译仿真了。向编译器中放代码的时候只需放入Test1相关的文件直接替换即可,不用更改底层代码,用起来是不是很方便?当应用程序比较复杂时,也只是多了几个文件,照样放进去就可以用。

本篇只是演示了接口生成的过程,但是在实际编程过程中不是只有外部变量一种接口,还有像宏定义、可导出外部变量、标定量等等,下篇详细介绍什么样的需求对应什么样的配置。那么,我们下期见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值