S32DS 调用脚本实现Post-build处理

news2025/8/16 18:39:54

作者:Stephen Du

免责声明: 本文为个人学习笔记及总结,仅代表个人观点,尽可能保证内容准确性。

所有文字均是自己码出来的,所有图片均为自己勾画(除部分来源于原始标准)。

复制/转发请注明来源/作者。

欢迎添加微信交流学习。

在这里插入图片描述


文章目录

  • 1. 前言
  • 2. 方案
    • 2.1 方案一
    • 2.2 方案二
    • 2.3 方案三

本文是否适合你看?如果你有以下疑问,可以继续浏览:

  • 如何在S32DS里面调用自己的脚本?
  • S32DS如何生成*.hex*.srec, *.bin等格式文件?
  • 脚本处理*.hex*.srec, *.bin文件时,提示找不到文件?

1. 前言

在嵌入式开发过程中,很大一部分人还是很青睐于使用IDE进行开发工作。毕竟IDE在大部分使用场景下还是要方便很多,学习门槛相对也低很多,很容易上手。很多芯片厂商都会提供自家的IDE。比如以前飞思卡尔提供的很经典的Codewarrior。现在NXP则提供了统一的开发平台S32DS(针对S32系列众多芯片)。如前所述,使用S32DS进行相关芯片的开发工作可以大大提高开发效率,尤其是当你需要快速验证某些简单工作的时候,可以直接使用里面提供的丰富的示例工程进行快速验证。

当然任何东西都是两面的,IDE也有它的不足,比如灵活性就比不上makefile这种方式。当你具有某些特殊使用需求的时候,可能IDE就显得力不从心。

显然,作为现代化的效率工具,如果完全没有留给用户扩展的空间,那显然是很失败的设计。针对灵活性或者是可扩展性方面,实际上S32DS已经为大家尽可能的考虑到了。S32DS支持调用用户脚本,这样一来,脚本里面用户可做的事情就很灵活了。但这里面其实也会有一些小坑。本文就给大家介绍使用S32DS进行开发的工程中会碰到的问题。

在实际项目中,我们经常会有这样的需求:编译完成后需要生成指定格式的文件:*.hex, *.srec, *.bin等。然后基于这些指定格式的文件还会进行后续处理,比如插入某些特殊内容:标定数据,安全校验码等等。

针对这种需求,首先S32DS是可以配置生成常见格式文件的。针对上述提到的后续处理,大部分伙伴都会想到使用脚本来处理这个工作,只需要在S32DS里面设置调用脚本即可。但当去实施的时候才发现有问题。比如当脚本里面去处理生成的*.srec文件的时候会提示找不到文件。很多人就疑惑了,我不是配置了生成srec格式文件么?怎么提示找不到呢。

实际上导致这个问题的原因在于,S32DS生成指定格式文件这个步骤是晚于你在Post-build Steps里面设置的脚本执行时间的。也就是执行你脚本的时候实际上指定那个文件还没有生成呢,但是你的需要或者说你的假设是已经生成这个文件,然后脚本去处理这个文件。

接下来就告诉你如果处理这个问题。本文一共提供三种方案:

2. 方案

2.1 方案一

直接关闭S32DS默认提供生成指定格式文件这个功能,然后把这个事情直接交给你的脚本里面去实现。也就是你的脚本先将elf文件转换为你想要的文件,然后再做后续处理。

第一步: 在工程属性配置里面,取消勾选Create flash image。

请添加图片描述

第二步: 将你的脚本文件放到工程根目录(有.project和.cproject那个文件夹)(放到其他路径也行,但会导致设置路径不一样),然后在S32DS里面设置调用你的脚本文件。(如果没有脚本文件,那就再工程根目录创建一个后缀为.bat格式的文件)

请添加图片描述

第三步: 在脚本文件里面添加如下命令。(下面是一个示例脚本文件,我想你知道怎么做了,核心就最后那句话)

@echo off
setlocal enabledelayedexpansion

set compilerToolchainPath="C:\NXP\S32DS.3.4\S32DS\build_tools\gcc_v10.2\gcc-10.2-arm32-eabi\bin"

echo User post build: Generate srec file.
%compilerToolchainPath%\arm-none-eabi-objcopy -O srec S32K324_WB_M2xxG1_200.elf  "S32K324_WB_M2xxG1_200.srec"

要求不完美的人,喜欢偷懒的人,我我个人是比较推荐第一种方法的,这个方法最简单,不用做过多设置。但有时候也有一点点小弊端,请看后续方法。

2.2 方案二

第一步: 使能S32DS自带的生成指定格式文件的功能(默认是关闭的)。方法:在工程属性配置里面,勾选Create flash image。

请添加图片描述

第二步: 上图勾选相关选项后,点 Apply and Close 按钮 。然后重新进入工程属性配置页面,选择你需要输出的文件格式。
请添加图片描述

第三步: 在工程根目录下(有.project和.cproject那个文件夹)创建一个名为:makefile.targets的文件,注意这个文件名不能随意修改。然后打开文件,添加如下内容(第一行的user_post_build是自定义的编译目标,这个名字可以修改为你喜欢的。最后一行是你的脚本名称):

user_post_build: all post_build_step
post_build_step: $(SECONDARY_FLASH)
	@echo 'You specified format file generated.'
	.\..\userScript.bat

第四步: 工程属性修改编译目标:Build (Incremental build)处将默认的all修改为我们第三步文件里面自己定义的user_post_build

请添加图片描述

这种方法相比第一种方法稍微复杂一些(其实也不难),但相比于第一种方法也有一些优势。比如有时候当你已经编译过(elf文件及指定格式文件(比如*.srec)都已经生成过),突然发现你的脚本有bug,需要修改(源代码不需要修改)。当你修改完脚本需要重新运行你脚本的时候,如果使用第一种方法,你需要clean后重新编译才能执行你的脚本。但是第二种方法只需要再次执行编译即可,不需要clean。

2.3 方案三

关于方案三,我只说一下大概思路,就不详细介绍流程了,因为我不推荐这种方法,这种方法在我看来相比于前面两种方法没有任何优势。方法一的弊端方案三也有。且设置比方案二更复杂。编译效率也比前面两种更低。

它的思想大概就是建两个调试目标,然后第一个目标设置为依赖项,这样当你每次编译第二个调试目标的时候会先编译第一个调试目标。而第一个调试目标里面会生成elf和你指定格式的文件。然后用户的脚本放到第二个调试目标里面去调用,这样就解决了调用顺序的问题。

这里大家也明白了,每次编译实际上是要执行两个调试目标的流程,所以时间会久一些,且方法二里面提到的方法一的弊端在方案三里面依然存在。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/33148.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【目标检测】swin-transformer的学习

文章目录1. swin-transformer2. swin-transformer的结构1. swin-transformer 优点: 解决transformer在cv领域速度慢的问题保持CNN的位移不变性、尺寸不变性、感受野与尺寸的关系、分阶段降低分辨率等特点在多领域表现SOTA 缺点: 不具备CNN的权值共享…

常用框架技术-07 Apache Dubbo 一款高性能、轻量级的开源Java RPC框架

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言1.软件架构的演进过程1.1 集群和分布式1.2 单体架构1.2.1 架构说明1.2.2 优点1.2.3 缺点1.3 垂直架构1.3.1 架构说明1.3.2 优点1.3.3 缺点1.4 SOA架构1.4.1 架构…

[附源码]计算机毕业设计JAVA旅游景点推荐系统

[附源码]计算机毕业设计JAVA旅游景点推荐系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybati…

dolphinscheduler-数据质量-源码分析

数据质量工作流程 数据质量运行流程分为2个部分:在web端进行数据质量检测的流程定义,通过dolphinscheduer进行调度,提交到spark计算引擎;spark端负责解析数据质量模型的参数,通过读取数据、执行转换、输出三个步骤&am…

Java -- 每日一问:谈谈常用的分布式ID的设计方案?Snowflake是否受冬令时切换影响?

典型回答 首先,我们需要明确通常的分布式 ID 定义,基本的要求包括: 全局唯一,区别于单点系统的唯一,全局是要求分布式系统内唯一。 有序性,通常都需要保证生成的 ID 是有序递增的。例如,在数据…

小体积单输入单输出单电源供电光电隔离转换器0-75mV/0-5V/0-200mV/0-20mA/4-20mA

概述: 导轨安装DIN11 IPO OC系列模拟信号隔离放大器是一种将输入信号隔离放大、转换成按比例输出的直流信号混合集成厚模电路。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等需要直流信号隔离测控的行业。此系列产品内部采用了线性光电隔离技术相…

Unity | 以附加模式加载场景,实现多场景叠加及注意事项

1 多场景叠加 Unity 允许多场景叠加,这种叠加包括编辑模式及运行模式 新建两个简单的场景,SampleScene 和 AdditiveScene,设置不同的天空盒及平行光源颜色 SampleScene AdditiveScene 2 编辑模式 2.1 添加场景 在编辑器中的场景资源右键选…

vue draggable怎么用?怎么写一个拖拽的看板?

项目中需要像看板一样的可以拖动的任务队列 如果自己要手写的话会很麻烦,大佬当我没说。市面上目前有很多成熟的组件,本次介绍的这个就是一个轻量级的应用。 sortable.js中文文档 - itxst.com 常规的vue文件使用,可以参考上面的网站。 本次…

C语言习题练习10--指针

1.代码结果 #include <stdio.h> int main() {int arr[] {1,2,3,4,5};short *p (short*)arr;int i 0;for(i0; i<4; i){*(pi) 0;}for(i0; i<5; i){printf("%d ", arr[i]);}return 0; } 正常&#xff1a;0001--00 02--00 03--00 04--00 05 数组内部是倒…

[附源码]java毕业设计医院管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【转】数据库索引详细介绍

原文链接&#xff1a;https://blog.csdn.net/weixin_41948075/article/details/100009848 索引的定义 索引相当于一本书的目录&#xff0c;通过目录我们可以迅速定位书中要找的内容。MySQL中的索引也是一样&#xff0c;它是一种帮助MySQL高效获取数据的数据结构&#xff08;树…

Docker中php安装redis扩展

第一步&#xff1a;下载redis扩展压缩包 点击下载redis-5.3.7 &#xff0c;其他版本请访问&#xff1a;https://pecl.php.net/package/redis 第二步&#xff1a;加压压缩包 linux下解压&#xff1a;tar -zxvf redis-5.3.4.tgz windows下解压&#xff1a;自己学习 第三步&#…

暴雪网易事件大讨论:Web3游戏未来发展趋势

最近很多小伙伴们询问进群方式&#xff0c;希望能和NFT玩家&#xff0c;链游行家和数字艺术家们交流和学习&#xff0c;直接戳我【ID:cdf0822】就好&#xff01;文末也有联系方式&#x1f618; 11月17日下午&#xff0c;暴雪中国官方直接绕过现任代理商网易直接发布公告称&…

学生HTML个人网页作业作品 使用HTML+CSS+JavaScript个人介绍博客网站 web前端课程设计 web前端课程设计代码 web课程设计

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

【考研数学】概率论与数理统计

这个知识点比较零碎。 文章目录1. 基础知识&#xff1a;连续型总体的最大似然估计法2. 解题技巧&#xff1a;随机变量函数的分布3. 解题技巧&#xff1a;几何数列求和4. 基础知识&#xff1a;切比雪夫不等式5. 基础知识&#xff1a;卡方分布&#xff0c;t分布&#xff0c;F分布…

如何深刻理解RPA?相关知识点看这里!

最近RPA大热&#xff0c;但对于RPA的理解大家都是模模糊糊的&#xff0c;那如何深刻理解呢&#xff1f;需要了解哪些知识点呢&#xff1f;这里我们简单来看看吧&#xff01; 一、RPA定义 RPA简单来说就是借助一些能够自动执行的脚本&#xff0c;以软件自动化方式实现一系列原来…

昔年邢台稻田不下万顷 国稻种芯·中国水稻节:河北谷子收获

昔年邢台稻田不下万顷 国稻种芯中国水稻节&#xff1a;河北谷子收获 新华社记者 骆学峰 摄 河北新闻网讯&#xff08;河北日报记者邢云 通讯员王聚芬&#xff09; 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 中国农民丰收节国际贸易促进会 国稻种芯中国水稻节 中国三…

限制用户上传文件类型

在上传文件时&#xff0c;在表单元素中设置accept属性&#xff0c;这个属性只能与<input type"file">一起使用才生效。 accept的属性值是MIME值&#xff0c;MIME值对应的文件类型可以看这个链接 菜鸟编程-MIME类型l 例如&#xff0c;我只想要用户上传的文件是p…

【雷达干扰】基于matlab速度聚类欺骗式干扰仿真

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

微信预约课程小程序开发_分享微信预约课程小程序的好处

不管是素质拓展还是知识培训&#xff0c;教育机构的人一多&#xff0c;只靠人工的话&#xff0c;容易发生学生约课难&#xff0c;老师排课乱等问题。这时候&#xff0c;就要借助专业的约课系统小程序的帮助啦&#xff01;小程序需自带的营销功能还能帮忙拓客&#xff0c;这下招…