针对未来阅读此内容的人(如果它没有被锁定),提供一些背景信息。我通常会使用高级语言编写程序来先了解问题。在涵盖所有可能的边界情况后,我会将代码转换为C++(或C)。
我编写的大部分代码都涉及数学,所以我使用MATLAB语言(另一个选择是Python)。然后,我通过手工将代码从MATLAB翻译成C++。
请问是否有任何优缺点使用MATLAB Coder?这是一个新产品,非常昂贵,但除了节省翻译时间外,还有其他好处吗?
针对未来阅读此内容的人(如果它没有被锁定),提供一些背景信息。我通常会使用高级语言编写程序来先了解问题。在涵盖所有可能的边界情况后,我会将代码转换为C++(或C)。
我编写的大部分代码都涉及数学,所以我使用MATLAB语言(另一个选择是Python)。然后,我通过手工将代码从MATLAB翻译成C++。
请问是否有任何优缺点使用MATLAB Coder?这是一个新产品,非常昂贵,但除了节省翻译时间外,还有其他好处吗?
免责声明
本文是基于我在一个特定项目中的经验而得出的非常主观的观点。我没有使用最新版本的编码器,但我有使用过相当的产品(嵌入式编码器),用于将Matlab代码转换为C ++,该产品作为前Real Time Workshop产品的一部分包含在内。这些评论仍然适用。您的实际情况可能会有所不同。
早期优点...
在我的情况下,嵌入式编码器用于制作适合于更大音频应用程序一部分的处理块。处理块的工作是实时处理恒定流的样本缓冲区。我最初在Matlab中制作了原始算法,转换工具使得将早期原型转换为可以编译成本地代码并用于实时应用程序变得相当简单。还很好地假设转换后的代码在数值上与原始代码完全相同,没有人为错误的可能性在转换过程中(假设Mahworks工程师具有超人类的能力)。
这些好处在非常早期的原型制作阶段之后就结束了...
问题1:浪费时间进行接口设计。
随着算法复杂度的增加,我越来越担心如何编写Matlab接口,以便在转换后,易于与C++框架进行接口(我想实时监视内部状态)。这最终开始花费与算法开发本身同样多的时间,因此打败了使用这种工具的目的。我本可以将算法分解为较小的块,然后使用C++将它们粘合在一起,但那样我将失去仅使用Matlab对完整算法进行直接比较的能力。如果您更喜欢使用MATLAB编写,那么价值很大程度上取决于您如何评估自己的时间价值。
将MATLAB与C或C ++进行性能比较非常复杂。在大多数情况下,C或C ++速度会更快,但在某些线性代数应用中,MATLAB可能会执行得最快。我记得有位教授声称他的FORTRAN应用程序比等效的MATLAB应用程序运行得更慢。有许多案例研究 - 我建议您查看谷歌上出现的不同研究并将其与您正在进行的工作进行比较,以做出决策。
一切都在于流程。
在我的工作中,我们为Simulink模型及其依赖关系开发了一个良好的管理方案。然后我编写了一个脚本来执行自动编码步骤,一位同事在IDE中开发了项目文件,这样在运行我的脚本时,所有源文件都会被分派到适当的文件夹结构中,并且该项目可以在IDE中轻松编译,其中另外一位同事还部署了一个包装器代码以与自动编码软件进行接口。
窍门(在我看来)是尽早尽可能地自动化您的流程。通过这样做,您可以开发非常复杂的模型,然后在几个小时内为生产创建C代码。您可以随意更新模型,但代码仍易于维护。
缺点是设置此流程既不是微不足道的,也不是完全通用的(一种尺寸并不适合所有人)。
此外,您真的应该设置一些测试来验证生成的代码确实代表您拥有的模型。这并不保证,虽然我认为Matlab Coder非常可靠,但它并不是无误的。
正如上面所说,这取决于您的应用程序。我尝试转换解码器(一个通信系统的解码器),它可以给出准确的结果,但对于大量比特来说,它要比自己的 MATLAB 版本慢。因此,我的结论是手动将 MATLAB 代码转换为 C。
我认为MATLAB在普通的C编码方面有很多限制。我同意它有许多内置块可以直接使用,但如果你在MATLAB中编写代码,与C代码相比,它将需要近5倍的时间,因为从定义变量到循环、开关语句,这些在MATLAB建模中非常耗时。
假设你使用Simulink制作了一个模型,但当你尝试添加一些东西时,再次非常耗时,但在C中只需2分钟即可完成。
下一个问题是,你不能像其他编程语言那样注释掉任何模型片段。
对于一个大项目,有时MATLAB会崩溃、损坏,有时在stateflow中进行仿真就像在做狗屎。
最后我只想说一件事,只有当你有足够的耐心时,才使用MATLAB建模(stateflow+simulink)。
优点:
缺点:
我知道的另一个好处是:由于它针对技术编程进行了优化,因此在编写这个领域的应用程序时,您可能会获得更好的性能。性能非常可靠,请查看这个问题,它提供了一些有用的信息。