从零开始simulink自定义代码生成----自定义目标系统配置(3)

本文详细介绍了Simulink中make_rtw_hook钩子函数的作用和使用方法,它允许在编译过程的关键点插入自定义代码。通过make_rtw_hook,用户可以在生成代码前后执行特定操作,如初始化设置、与外部工具链交互或错误处理。文章提供了一个简单的hook代码示例,并强调了在exit阶段调用编译器的实用性。最后,文章预告了下一部分将讨论的文件处理TLC文件。
摘要由CSDN通过智能技术生成

自定义目标系统配置文件之make_rtw_hook文件(钩子函数)

simulink支持自定义目标系统设置,需要以下几个文件:
1.xx.tlc 系统目标文件 主文件xx名称可自定义
2.xx_callback_handler.m RTW工具箱回调函数
3.xx_make_rtw_hook.m tlc文件调用,该文件后缀为_make_rtw_hook
4.xx_file_process.tlc 文件处理TLC文件
5.xx_srmain.tlc 用来控制主函数文件的生成

今天介绍make_rtw_hook函数,又称钩子函数。

make_rtw_hook钩子函数的作用

在编译过程中,可以在代码生成和联编过程中的指定点执行的钩子方法中提供可选的自定义代码。可以使用钩子方法将特定于目标的操作添加到编译过程中。
下图很好的说明了钩子函数在编译过程中的阶段:
在这里插入图片描述
可以在entry,before_tlc,after_tlc,before_make,after_make,exit中加入自定义代码及编译过程

make_rtw_hook钩子函数的使用

_make_rtw_hook.m 文件位于 MATLAB路径中。

文件名是系统目标文件 (STF) 的名称,后跟文本 _make_rtw_hook.m。例如,如果您使用自定义系统目标文件 mytarget.tlc 生成代码,请将钩子文件命名为 mytarget_make_rtw_hook.m,并将文件中实现的钩子函数命名为 mytarget_make_rtw_hook。

函数原型:
function STF_make_rtw_hook(hookMethod, modelName, rtwRoot, templateMakefile,buildOpts, buildArgs, buildInfo)
hookMethod:指定调用 STF_make_rtw_hook 函数的编译过程阶段的字符向量。hookMethod 的有效值为 ‘entry’、‘before_tlc’、‘after_tlc’、‘before_make’、‘after_make’、‘exit’ 和 ‘error’。STF_make_rtw_hook 函数使用 switch 语句调度给相关代码。

您可以使用 ‘entry’ 钩子来初始化编译过程,例如,在生成代码之前更改或验证设置。‘entry’ 钩子的用途之一是重新运行最初在目标选择时间运行的自动配置脚本,从而对执行脚本前后的模型参数进行比较,以实现验证目的。

其他钩子点(‘before_tlc’、‘after_tlc’、‘before_make’、‘after_make’、‘exit’ 和 ‘error’)可用来与外部工具链、源代码管理工具和其他环境工具对接。

例如,您可以在 ‘entry’ 之后的阶段使用 STF_make_rtw_hook.m 文件来获取编译文件夹的路径。之后在 ‘exit’ 阶段,您就可以在编译文件夹中找到生成的代码文件,并将它们签入到您的版本控制系统。在代码生成或编译过程中发生错误时,您可以使用 ‘error’ 清理钩子函数使用的静态数据或全局数据。

hook代码例子


function mytarget_make_rtw_hook(hookMethod,modelName,rtwroot,templateMakefile,buildOpts,buildArgs)
% Hook file for the Workshop Host Target 
 
  switch hookMethod
   case 'error'
    disp('error');
   case 'entry'
    disp('Starting build');
    disp('Good hook spot to run Model Advisor checks');
   case 'before_tlc'
    disp('this stage is before_tlc');  
    % do nothing  
   case 'after_tlc'
    disp('this stage is after_tlc');  
    % do nothing
   case 'before_make'
    disp('this stage is before_make');  
    % do nothing
   case 'after_make'
    disp('this stage is after_make');  
    % do nothing
   case 'exit'
    disp('Done building');    
  end

总结

钩子文件实现比较复杂,资料也很少,网上的代码中的钩子函数中添加的代码也不太好理解,最好的方式就是在之前的基础上修改。在exit阶段实现编译器的调用及自动编译代码,这应该是最有用的了。

本文介绍了钩子函数的作用及使用,下一篇文章将介绍文件处理tlc文件,这个文件主要是用来控制,自动代码生成过程中,针对不同的情况,在各阶段生成什么样的代码。

关联文章:
从零开始simulink自定义代码生成----自定义目标系统配置(1)

从零开始simulink自定义代码生成----自定义目标系统配置(2)

从零开始simulink自定义代码生成----自定义目标系统配置(4)

从零开始simulink自定义代码生成----自定义目标系统配置(5)

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赞哥哥s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值