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/10/12 2:06:38 阅读更多 →
Docker Compose镜像整体导出与还原:离线环境迁移完整指南

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

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

2026/10/1 16:05:42 阅读更多 →
Android Camera开发系列(干货满满)

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

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

2026/10/6 9:04:48 阅读更多 →

最新新闻

物理与动画系统架构深度解析:从帧循环到Transform协同的引擎设计要点

物理与动画系统架构深度解析:从帧循环到Transform协同的引擎设计要点

做引擎这几年,最常被问到的一个问题就是:物理和动画这两个模块放在一起讲,是不是有点强行组CP?其实不是,这俩在帧循环里的位置紧挨着,数据耦合又深,渲染那边等着同一份Transform结果。你拆开看会…

2026/10/12 2:06:09 阅读更多 →
28岁没房没车别焦虑:转行前先搞懂副业与财富自由的底层逻辑

28岁没房没车别焦虑:转行前先搞懂副业与财富自由的底层逻辑

28岁,无车无房,收入一眼望到头,拿着几千块的工资,晚上躺床上刷手机,看到别人晒新房晒婚礼,再想想自己连恋爱都不敢谈,一种说不出的恐慌直接顶到嗓子眼儿。这种日子我太熟悉了,因为我…

2026/10/12 2:06:09 阅读更多 →
给Claude Code接入MCP搜索:告别过期答案,实时联网查资料

给Claude Code接入MCP搜索:告别过期答案,实时联网查资料

我印象最深的一次,是在某次项目重构里要用到一个库的最新接口。Claude Code 三两下就把代码写完了,看起来头头是道,结果一编译直接报错。后来我自己上官网翻文档才发现,这个库在两三周前刚改过一次函数签名,而 Claude …

2026/10/12 2:06:09 阅读更多 →
Ant Design Landing 设计资源页解析:Sketch 源文件、数据模型与前端实现

Ant Design Landing 设计资源页解析:Sketch 源文件、数据模型与前端实现

前端文档 【免费下载链接】ant-design-landing :mountain_bicyclist: Landing Pages of Ant Design System 项目地址: https://gitcode.com/gh_mirrors/antd/ant-design-landing 点击查看 免费下载 Ant Design Landing(ant-design-landing)是…

2026/10/12 2:06:09 阅读更多 →
Apache Beam Python 的 Mean 聚合变换:Globally 与 PerKey 用法及底层实现

Apache Beam Python 的 Mean 聚合变换:Globally 与 PerKey 用法及底层实现

【免费下载链接】beam Apache Beam is a unified programming model for Batch and Streaming data processing. 项目地址: https://gitcode.com/gh_mirrors/beam18/beam 点击查看 免费下载 本文围绕 Apache Beam Python SDK 中计算算术平均值的 Mean 聚合变换展开…

2026/10/12 2:06:09 阅读更多 →
Jenkins 2.346.1 内网离线安装插件:依赖解析与版本匹配实战

Jenkins 2.346.1 内网离线安装插件:依赖解析与版本匹配实战

简介:本资源面向在内网、隔离网等无外网环境中部署Jenkins的运维与DevOps工程师,针对Jenkins 2.346.1无法在线拉取插件的问题,提供一套完整的离线插件安装方案。压缩包共约2000个文件,整体314.4MB,涵盖90个jpi与30个hp…

2026/10/12 2:05:08 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →