VCU模型开发流程
第一部分单片机C底层代码开发需要一块你准备开发成VCU的单片机开发板进行底层代码开发板验证VCU常用的模块有PWMGPIOCANADDAFLASH等根据自己的需求进行C代码验证在验证的过程中要有意识进行抽象你中期会将代码抽象成SFunction模块例如GPIO输入就要设置分组、上下拉、引脚号你在C代码中就要把这部分抽象成变量提前留好接口需要留出什么需要自己想好第二部分MATLAB模块的建立首先打开simulink选择建立一个空白library然后界面添加几个子系统如下所示将其分门别类归纳好让子系统显示成下图这样主要在ICON设置然后双击打开子系统在里面添加sfunction添加sfunction后会让你设置name和parameters其中mex能获取的参数就是parameters提供的name则是模块的名字该外形主要是通过mask里的ICON进行配置的模块相关东西全是通过MASK配置的外形显示ICON配置参数设置即下图这些参数Port Name下拉都有什么等通过parameters选项卡设置设置完这两部分一个模块就有雏形了其中Init选项卡可以进行参数校验比如是否超范围是否为空等等但此时还无法生成代码生成代码需要继续设置别的东西模块代码生成这部分看源码读文档模块 mex和TLC这三个名字一定要相同代码生成主要有以下两部分mex文件和tlc文件mex文件是通过matlab提供的Sfunction C模板通过mex命令生成的tlc文件其中的代码很大一部分就是你在第一步部分写的底层C代码MEX文件的作用是将模块的参数和tlc文件链接起来tlc文件是代码生成的关键文件MEX文件将模块设置的GPIOB GPIO_PIN_0等参数传递给TLC然后TLC生成GPIO_Init()和GPIO_Read()C模板功能及API的官方解释C模板下载地址sfuntmpl_basic.c和 sfuntmpl_doc.c建议这两个文件仔细看看这部分还是建议找个人家没编译成mex的C文件比对着help看API功能其中比较重要的有以下几个mdlInitializeSizes指定 中各种参数的大小SimStruct例如块的输出端口数。mdlInitializeSampleTimes指定模块的采样时间。mdlOutputs计算块的输出。mdlTerminate执行模拟结束时所需的任何操作。如果不需要任何操作则可以将此函数实现为存根。mdlRTW是提供给TLC的接口参数还有一个就是输出模块配置问题比如标定 接datatype 再接PWM期望是先标定再转换再输出但有可能是先输出再标定再转换即输入到输出滞后了一轮输出模块加上ssSetInputPortDirectFeedThrough可以解决TLC文件TLC文件介绍其中最重要的有%function Outputs(block, system) Output生成的代码要放到while里一般放执行代码例如GPIO_Read%function Start(block,system) Output生成的代码要放到while之前Start里面一般放Init相关代码例如GPIO_Init其中S-function的Block parameters里面的parameters是提供给mex文件的接口你如果建好了一个模块将其放入模型生成代码看看是否正确多试试你就会比较理解了模型配置模型设置里通用栏注意这里是模型不是模块了定步长离散系统代码生成栏ert.tlc只是设置当前选项卡有什么选项等等其中模型生成代码的整体逻辑(即main文件代码)主要是这里的tlc配置如果你只是测试模块功能这里可以不用管选项卡配置我觉得讲的比较好chhttty的博客博客1和博客2标定量和观测量模块这两个模块稍微有些特殊因为你可能需要把变量定义到sct划分的某个段例如标定量你可能需要设置成这种形式__attribute__((section(***))) const volatile uint8_t calibr 10;在TLC中配置不太现实这就需要你自定义Storage Class在标定量前加上__attribute__((section(***)))这部分自定义Storage Class可以参考chhttty大佬的博客这个大佬所有的博客都很有借鉴意义强烈推荐看看这两个模块基本可以总结为模块设置好变量名添加模块的时候调用脚本在matlab工作空间生成一个Storage Class变量然后再通过脚本与simulink里的变量进行关联这样就可以生成带前缀的变量脚本放置位置既然已经生成了标定量和观测量就要准备生成ASAP2文件了推荐大佬的博客由于上一步已经做了Storage Class了所以勾选ASAP2选项后就可以生成A2L文件了但生成的A2L的文件是最基础的无法直接给INCA使用所以需要自定义A2L文件自定义A2L文件主要参考Mathworks的官方文档和小拜大佬的博客我稍微说一说关键的函数首先是asap2userlib下的ASAP2UserFcnWriteHardwareInterface函数这个主要是将A2L文件静态的头放进去其次是ASAP2UserFcnWriteMeasurement这个是跟观测量相关需要修改的主要就是Interface其余的基本不用动多看看他写的注释asap2scalar、asap2lookup2d、asap2lookup1d这三个文件分别是标定量、一二维查表相关也基本不用动最后要将自己的asap2\user添加到路径里把官方的asap2\user文件夹优先级调低或者删除就可以按照你的asap2\user文件夹下的内容生成A2L文件一二维查表模块建议使用simulink的Subsystem封装一下simulink的Lookup模块然后使用标定模块给Lookup模块XY轴输入和Table数据主要靠M文件进行参数传递模型自定义代码生产位置参考赞哥的博客其中可以拷贝一份ert.tlc然后重命名为test.tlc然后找到ert_make_rtw_hook.m也拷贝一份重命名为test_make_rtw_hook.m然后在m文件里的before_make函数下执行mkdir和copyfile两个命令进行创建文件夹和拷贝.c.h文件这样就可以将文件放到指定位置了模型使用模型参数需要修改参考大佬模型配置Solver右侧Type选为Fixed-stepSolver选为discrete然后修改步长时间0.01或者0.001Code Generation把System target file选为ert.tlc生成C代码Code Generation把Generate code only勾选ReportCreate code generation report和Open report automatically建议勾选TemplatesGenerate an example main program勾选会生成ert_mainFile customization template是配置main文件生成的逻辑选择自己的tlc文件InterfaceRemove error status field in real-time model data structure可以勾选结语此处借STM32的模块和文件进行讲解这套流程适用于所有单片机NXP英飞凌等等我已经成功实现了一种单片机效果如果改好最后的这个example这个tlc就可以达到将固定几个文件粘贴到MDK工程里就直接编译下载就能实现目标功能。最好有一套现成的这样就可以互相对比改出自己的东西只是想试试simulink和单片机联调我建议用STM32他们得工具链cubemx搭配simulink确实好用比自己开发的强多了参考博客

相关新闻

CVE-2026-64160 漏洞解析:netfs 尺寸变量并发撕裂缺陷风险处置方案

CVE-2026-64160 漏洞解析:netfs 尺寸变量并发撕裂缺陷风险处置方案

7 月 19 日 Linux 内核披露临界级安全漏洞 CVE-2026-64160,CVSS 评分 9.8,漏洞位于 netfs 网络文件系统通用库。并发读写场景下remote_i_size、zero_point变量存在数据撕裂问题,可能引发内存越界访问、内核崩溃,具备权限提升风险&…

2026/11/2 2:12:25 阅读更多 →
Docker Compose镜像整体导出与还原:离线环境迁移完整指南

Docker Compose镜像整体导出与还原:离线环境迁移完整指南

1. 项目概述:为什么需要整体导出与还原Docker Compose镜像? 在容器化开发和运维的日常工作中,我们经常会遇到这样的场景:开发环境已经用 docker-compose.yml 文件定义了一套包含多个服务的复杂应用栈,比如一个典型的…

2026/10/30 14:52:33 阅读更多 →
Android Camera开发系列(干货满满)

Android Camera开发系列(干货满满)

“Android Camera一站式 学习平台”: https://www.camerahub.cn 无论走到哪里,都会有明天~ 整理了下发布的Camera相关的文章,每个标题就是链接,可以直接点击进入查看相关内容~ 生活不息、学习不止,相关内还会持续更新…

2026/10/31 8:40:50 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/2 0:25:10 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/1 10:36:53 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/1 10:36:51 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/2 1:16:51 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/1 10:35:11 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/1 9:35:41 阅读更多 →

日新闻

周新闻

月新闻