【发布时间】:2014-02-01 08:45:18
【问题描述】:
这是关于大型嵌入式系统项目中的一个典型问题: 来自文本文件/数据库的数据必须硬编码为 C 代码。数据会改变控制流、表维度等。 选择的解决方案是什么?
背景: 在我们的(大型)嵌入式软件中,我们必须将数百个信号(有限状态机的输出)与总线(例如 CAN 总线)连接起来。我们使用 Simulink/Stateflow 作为基于模型的开发工具(状态机)和自动编码。
连接必须扩展,进行数据类型转换等。通常转换/连接的所有信息都存储在数据库或文件中(例如 dbc-text-file)。
显然,通常的动态方式:如果必须确保硬确定性实时能力,则不指示读取数据库并相应地动态连接/转换。此数据必须进行硬编码。
除了使用 Simulink API 之外,我们还没有找到更现实和更实用的方法:编写外部 m 代码,它从文件中读取数据并自动将纠缠连接“绘制图片”到 Simulink 模型中!这最终被自动编码为 C。 不用说,这个脚本化的“绘画代码” - 虽然有效 - 不是很可重用,可维护等。我什至找不到有效的解决方案:编译器/代码生成,模型驱动架构,Autosar,模型转换,考虑。为每个外部数据文档构建一个自己的编译器,将数据转换为 C 代码,似乎是不现实的......
有没有实用的替代方案?这是 Simulink“语言”的根本弱点吗(即它没有像其他模型驱动的嵌入式工具(如 modelica)那样的底层高级语言)?
【问题讨论】:
-
你能澄清一下这个问题吗?例如:您今天在哪里(DB-text-file -> Simulink 模型 -> C)以及您希望在哪里理想(DB -> C,...?)
-
你为什么放弃所有你考虑过的事情?例如:Simulink -> DB?我将这种方法与使用 C API 生成的数据定义一起使用(ASAP2 是用于 AUTOSAR 的另一个选项)。
-
没错,我们在这里:DB-text-file -> Matlab-Script -> Simulink model -> C 理想情况下它可能是这样的: DB-text-file -> embedded Simulink m- function -> C.(这是我放弃的另一种方法:嵌入式 Simulink m-function 是第二类公民,因为它无法确定正在输入的信号名称/信号数量/维度/数据类型以及输出连接的位置to. 所以它不知道如何接口连接/转换)
-
我没有完全得到您的最终建议:您直接使用 C API 的方式是这样的:DB-text-file -> C(可能通过 Simulink Coder)。如果你的答案是肯定的,我会看看它有多难,因为我还必须使用 API 将数据写回自动代码。希望留在更高级别的语言上。不过谢谢你的好主意。
-
“嵌入式 Simulink m-function 是二等公民……(因为它不能做一些关键分析)”。您提出了我的观点(在我的回答中详细说明)需要强大的分析器的强大的翻译机器,并且现成的机器不想为您这样做(我提供的链接中的点)。因此,您需要能够提供额外智能的机器,以做好工作。
标签: embedded code-generation simulink