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

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相关的文件直接替换即可,不用更改底层代码,用起来是不是很方便?当应用程序比较复杂时,也只是多了几个文件,照样放进去就可以用。

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

底层软件设计方法通常涉及硬件和操作系统的底层编程。这种设计方法更加关注计算机系统的内部工作原理和性能优化。一些常见的底层软件设计方法包括: 1. 硬件驱动程序设计:通过编写与硬件交互的驱动程序,使操作系统能够与硬件设备进行通信和控制。 2. 嵌入式系统设计:针对特定硬件平台设计和开发的系统,通常用于控制、监测和通信等嵌入式应用。 3. 汇编语言编程:使用底层的机器指令来编写程序,直接操作计算机的寄存器、内存和其他资源。 4. 操作系统内核开发:设计和实现操作系统的核心组件,包括进程管理、内存管理、文件系统等。 5. 性能优化:通过改进算法、数据结构和代码实现,以提高软件在底层环境下的执行效率和响应速度。 应用层软件设计方法则更加关注用户界面和功能实现。这种设计方法通常用于开发应用程序、网站和移动应用等。一些常见的应用层软件设计方法包括: 1. 需求分析:了解用户需求,明确软件功能和目标。 2. 用户界面设计:设计直观、易用的用户界面,提供良好的用户体验。 3. 模块化设计:将软件功能划分为独立的模块,提高可维护性和重用性。 4. 数据库设计:设计数据库结构和关系,确保数据的完整性和安全性。 5. 软件测试:进行单元测试、集成测试和系统测试,确保软件的质量和稳定性。 底层软件设计和应用层软件设计方法在不同的领域和需求中扮演着重要的角色,开发人员需要根据具体情况选择适合的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值