• Simulink 自动代码生成:手写代码替换生成代码Code Replacement Tool使用


    目录

    前言

    代码替换库操作步骤

    代码生成验证

    总结


    前言

    在实际工程开发过程中,Simulink生成的代码都是构建的算法实现的,纯软件实现,生成的代码大多也是直接在CPU上运行的。实际还有一些MCU集成了像Cordic,协处理器等。有些代码就需要放在特定的函数里执行,或者直接调用硬件的资源进行计算。除非是MCU和Matlab有深度合作,把硬件资源做成模块直接使用。如下是STM32G4的硬件资源库,可以在Simulink环境建模。这需要和工具链进行深度集成。

    如果是没有深度集成的MCU则可以考虑替换掉生成的代码,采用芯片官方提供的库函数或者自己手写的库函数。

    这里举个例子:

     下图是一个调用硬件Cordic实现Sin函数的计算,目的是在仿真结束后生成的Sin函数用的是这部分手写代码。不用查表法或者软件Cordic来计算,提升软件效率。这里就需要用到Matlab的Code Replacement Tool。 

    代码替换库操作步骤

    1.在工作空间的命令窗口输入crtool命令,弹出如下窗口

     新建一个Table,选择Function,这里面可以选择三角函数或者其他的计算公式。

     设置函数名,和手写的函数名一样,再设置函数的数据类型,其他的默认配置就可以。

     

    把手写代码的路径添加进来

     把刚刚的Function再复制一份如下:

     配置好后点一下Validate entry,最后点保存,把生成的.m保存在当前的工作空间。

     生成注册文件

    1.在 Code Replacement Tool 中,选择 File > Generate registration file

    2.在 Generate registration file 对话框中,编辑对话框字段以匹配下图,然后点击 OK

     Table list和保存的名字一样,其他的自定义即可。

     保存到当前工作空间,如下表示创建成功

     

     命令窗口输入指令:RTW.TargetRegistry.getInstance('reset');

     

    按照下面的步骤,配置Code replacement libraries:选择配置好的sin test. 

     

    在仿真模型的替换Trigonometric模块,如下

     运行仿真,查表和用的模块仿真效果相同。

     

    代码生成验证

     Sin模块生成的代码是我们定义的代码名。

     生成的代码也包含了main.h

     

     

    总结

    用这种方式可以结合手写代码,也可以把硬件资源用起来而不需要芯片和Matlab进行深度的集成,只是硬件接口需要保证接口函数的准确,不然生成的代码可能运行不正确,这里只举了一个例子,没有进行Cordic的验证。

  • 相关阅读:
    【JVM】并发可达性分析-三色标记算法
    C# 第五章『面向对象』◆第7节:多态
    在Python中使用deepfakes实现AI换脸功能
    PWN基础:从源文件到可执行文件
    前端 JS 经典:上传文件
    13:大数据与Hadoop|分布式文件系统|分布式Hadoop集群
    信息学奥赛一本通:1411:区间内的真素数
    Modbus RTU(Remote Terminal Unit)与RS-485协议介绍(主站设备(Master)、从站设备(Slave))
    Java#19(面向对象三大特征之一:多态)
    1688API接口工具
  • 原文地址:https://blog.csdn.net/weixin_42665184/article/details/134536748