Hyowinner的MBD技术论坛

 找回密码
 立即注册
搜索
查看: 384|回复: 3

模型堆栈溢出怎么解决

[复制链接]

1

主题

2

帖子

23

积分

MBD实习生

Rank: 1

积分
23
发表于 2025-12-5 13:45:31 | 显示全部楼层 |阅读模式
先介绍下所用嵌入式环境的基本情况 :GD32F470ZKT6芯片(cortex-m4 架构)+FreeRTOS任务调度。搭了一个被动均衡模型,考虑到兼容不同产品需求,最大电芯个设了600个。所以导致模型用到了一些比较大的数组,比如详细单体电压数组,每个电芯的均衡次数计数器数组,均衡指令数组,每个电芯的soc数组,simulink把这些数组全部生成成了局部变量的数组,也就是全放在栈里了,我算了下生成的主体函数大概需要将近10K字节的栈空间,模型仿真时我预设了2K的栈大小,仿真时就已经报了栈溢出告警。

以下是我能想到的几种方案,但是网上查不到怎么实现:
1.通过一些设置让simulink在生成代码是把我指定的数组生成为全局变量,也就是用堆的空间。

2.simulink能不能用指针变量仿真,然后按照我定义的指针类型去实现功能并生成代码?比如软件下层有详细单体电压的实体,我均衡模块直接把它的地址拿过来就可以实现遍历单体电压。这样也不存在copy时被中断导致单体电压不同步的问题了。

以上两种能不能实现?推荐用哪种方法解决堆栈溢出?是否有更好的解决方法?

回复

使用道具 举报

99

主题

247

帖子

4216

积分

管理员

校长

Rank: 9Rank: 9Rank: 9

积分
4216
QQ
发表于 2025-12-5 18:45:26 | 显示全部楼层
第一种方法可以使用信号数据对象进行绑定,设置存储类为ExportedGlobal, 让数组变量生成全局变量。
第二种需要通过在第一类基础上,修改存储类Custom Storage Class实现为ImportedExternPointer,跟底层定义的数组指针*pArray配合实现。让模型中调用的地方,生成pArray的形式。
持续学习 未来有你
基于场景 解决问题
项目合作联系微信:Hyo_Matlab
回复

使用道具 举报

1

主题

2

帖子

23

积分

MBD实习生

Rank: 1

积分
23
 楼主| 发表于 2025-12-11 15:05:29 | 显示全部楼层
hyowinner 发表于 2025-12-5 18:45
第一种方法可以使用信号数据对象进行绑定,设置存储类为ExportedGlobal, 让数组变量生成全局变量。
第二种 ...

模型的输入是一个BUS类型的信号,我所有的输入变量和参数都包含在这个bus信号中,即想让simuliunk生成代码时生成一个大的结构体来包含我所有的变量,这是我们代码规范的要求。我想要把这个结构体中的一个数组成员实体改成用指针的形式表示,手写c是很容易实现的,但是在simulink的模型资源管理器中,BUS信号中定义的一个成员好像没办法修改它的存储类别。。
回复

使用道具 举报

99

主题

247

帖子

4216

积分

管理员

校长

Rank: 9Rank: 9Rank: 9

积分
4216
QQ
发表于 2025-12-11 16:43:01 | 显示全部楼层
17649840148 发表于 2025-12-11 15:05
模型的输入是一个BUS类型的信号,我所有的输入变量和参数都包含在这个bus信号中,即想让simuliunk生成代 ...

这是企业级软件标准的代码生成定制问题,Simulink本身的功能不支持生成结构体中成员带有指针类型的,需要定制的代码生成工具。



校长公司的产品里有解决此问题的工具CustomCG,它是将带有指针成员的结构体类型声明在模型外部,如BMS_DT.h,这个工具可以提供额外的存储类供建模工程师选用:




对每个绑定了StructElemPtr类型数据对象的变量,可以设置其生成代码时所依赖的头文件,结构体的变量名,以及成员名称,其中成员名可以支持指针访问(*var), 引用访问(&var)等方式。结构体访问成员可以生成点也可以生成->。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
持续学习 未来有你
基于场景 解决问题
项目合作联系微信:Hyo_Matlab
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|MBD全栈技术学校|苏ICP备2025212294号-1|Hyowinner校长B站首页|手机版|小黑屋|Hyowinner的MBD技术论坛

GMT+8, 2026-5-7 12:02 , Processed in 0.099067 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表