JNH官网

新闻资讯
【方辉专栏】ARM嵌入式编译器(七) C/C++的堆栈使用
2022-08-22
摘要: 本文主要对C/C++的堆栈使用进行介绍。关键字:堆栈、堆栈的预估1. C/C++中的堆栈在C和C++都会使用到堆栈。例如:函数的返回地址。Arm 架构的过程调用标准(AAPCS) 或Arm 64 位架构的过程调用标准(AAPCS64) 必要的寄存器。例如,当进入子程序时寄存器内容需要被保存。局部变量,包括局部数组、结构体和联合体。C++ 中的类。一些堆栈的使用并不明显,例如:如果局部整数或浮点变量被溢出(即未分配给寄存器),则为它们分配堆栈内存。结构体通常分配给堆栈。在堆栈上保留相当于填充多个字节的空间,其中用于AArch64 状态或AArch32 状态。但是,编译器可能会尝试将结构体分配给寄存器。 sizeof(struct)nn168如果在编译时知道数组的大小,则编译器会在堆栈上分配内存。同样,在堆栈上保留了相当于填充 {n} 个字节的倍数的空间,其中用于AArch64 状态或AArch32 状态。 sizeof(array)n1682. 估计堆栈的使用堆栈的使用量很难估计,因为它取决于代码的编写,并且在运行时可能会有所不同,具体取决于程序执行时所采用的代码路径。但是,可以使用以下方法手动估计堆栈利用率:编译-g并链接--callgraph以生成静态调用图。此调用图显示所有函数的信息,包括堆栈使用情况。链接或列出所有全局符号的堆栈使用情况。--info=stack--info=summarystack使用调试器在堆栈中的最后一个可用位置设置观察点,并查看观察点是否被命中。使用选项编译-g以生成必要的 DWARF 信息。注: Debugging With Attributed Record Formats(DWARF)使用带属性的记录格式进行调试。利用调试器:1)为比您预期需要的大得多的堆栈分配内存空间。2)用已知值的副本填充堆栈空间,例如0xDEADDEAD.3)运行您的应用程序,并在测试中使用尽可能多的堆栈空间。例如,尝试执行最深嵌套的函数调用和静态分析发现的最坏情况路径。尝试在适当的地方生成中断,以便将它们包含在堆栈跟踪中。4)应用程序完成执行后,检查内存的堆栈空间以查看有多少已知值已被覆盖。该空间在已使用的部分中有数据,在剩余部分中是已知值。5)计算有数据值的数量(以字节为单位)。sizeof(value)使用与目标处理器或架构相对应的固定虚拟平台 (FVP)。使用映射文件,在堆栈正下方定义一个禁止访问的内存区域。如果堆栈溢出到禁止区域,则会发生数据中止,调试器可以捕获该异常。3. 检查堆栈的使用检查程序中函数使用堆栈的大小是一个良好的编程习惯。这样可以写出使用较小堆栈的代码。要检查程序中的堆栈使用情况,需要使用--info=stack这个链接器选项。__attribute__((noinline)) int fact(int n){  int f = 1;  while (n>0)  {    f *= n--;  }  return f;}int foo (int n){  return fact(n);}int foo_mor (int a, int b, int c, int d){ return fact(a);}int main (void){  return foo(10) + foo_mor(10,11,12,13);}将代码示例复制到file.c并使用以下命令对其进行编译:armclang --target=arm-arm-none-eabi -march=armv8-a -c -g file.c -o file.o使用该选项进行编译会-g生成armlink估计堆栈使用所需的 DWARF 帧信息。使用以下命令在目标文件上运行armlink:--info=stackarmlink file.o --info=stack对于示例代码,armlink显示了各种函数使用的堆栈数量。Function foo_mor比 function foo 有更多的参数,因此使用更多的堆栈。Stack Usage for fact 0xc bytes.Stack Usage for foo 0x8 bytes.Stack Usage for foo_mor 0x10 bytes.Stack Usage for main 0x8 bytes.您还可以使用链接器选项检查堆栈使用情况--callgraph:armlink file.o --callgraph -o FileImage.axf这会输出一个名为的文件FileImage.htm,其中包含应用程序中各种函数的堆栈使用信息。fact (ARM, 84 bytes, Stack size 12 bytes, file.o(.text))[Stack]Max Depth = 12Call Chain = fact[Called By]>>   foo_mor>>   foofoo (ARM, 36 bytes, Stack size 8 bytes, file.o(.text))[Stack]Max Depth = 20Call Chain = foo >> fact[Calls]>>   fact[Called By]>>   mainfoo_mor (ARM, 76 bytes, Stack size 16 bytes, file.o(.text))[Stack]Max Depth = 28Call Chain = foo_mor >> fact[Calls]>>   fact[Called By]>>   mainmain (ARM, 76 bytes, Stack size 8 bytes, file.o(.text))[Stack]Max Depth = 36Call Chain = main >> foo_mor >> fact[Calls]>>   foo_mor>>   foo[Called By]>>   __rt_entry_main (via BLX)4. 减少堆栈的使用的方法减少堆栈使用量通常有以下几个方法:1)编写只需要几个变量的小函数。2)避免使用较大的局部结构体或数组3)避免递归调用4)函数在执行的任何特定时候都尽可能少的使用变量。5)使用C块作用域语法并在需要的位置声明变量,这样可以在不同作用域使用相同内存。来源:《Arm® Compiler for Embedded User Guide Version 6.18》参考链接:DWARF 格式简介 //gohalo.me/post/program-c-gdb-dwarf-format-introduce.html+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++关于JNH官网电子JNH官网电子技术有限公司(英文名称:Emdoor Electronics Technology Co.,Ltd)是国内资深的研发工具软件提供商,公司成立于 2002 年,面向中国广大的制造业客户提供研发、设计、管理过程中使用的各种软件开发工具,致力于帮助客户提高研发管理效率、缩短产品设计周期,提升产品可靠性。20 年来,先后与 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立战略合作伙伴关系,并作为他们在中国区的主要分销合作伙伴服务了数千家中国本土客户,为客户提供从芯片级开发工具、EDA 设计工具、软件编译以及测试工具、结构设计工具、仿真工具、电气设计工具、以及嵌入式 GUI 工具等等。JNH官网电子凭借多年的经验积累,真正的帮助客户实现了让研发更简单、更可靠、更高效的目标。欢迎关注“JNH官网电子”公众号了解更多研发工具软件知识
查看更多→
Ansys + EasyMile | 引领全电动自动驾驶汽车发展之路
2022-08-22
本文原刊登于Ansys Blog:《Ansys Paves the Way for Safety in Electric Autonomous Vehicle Technology》作者:Laura Carter | Ansys高级撰稿人“JNH官网正在开发高度复杂的自动驾驶系统,而且需要展示其安全性。这需要JNH官网的团队采用不同的方法,通过全新解决方案来管理需求、仿真和开发生命周期中涉及的大量工作。在此过程中,Ansys medini analyze是帮助JNH官网实现目标的关键所在。”——EasyMile安全经理Romain Dupont此前,Ansys宣布携手法国全电动自动驾驶技术供应商EasyMile,助力其提高电动自动驾驶汽车安全性。在Ansys的帮助下,EasyMile制定了明确的安全分析指南,以及为客户和各种政府监管机构成功展示其AV解决方案安全性所需的专属模板和辅助文档,成功开发了单一来源的交钥匙解决方案,显著缩短研发周期,加速产品上市进程,并降低该公司自动驾驶巴士和牵引车解决方案的运营成本。本文将详细介绍当EasyMile面临与高度复杂的新系统开展协作等挑战时,在Ansys团队的支持下成功地定制了medini的扩展应用,帮助他们将所有的安全概念和要求纳入一个用于乘客和材料运输应用的模型,并且跨平台生成所有产品的相关文件。如今,全电动自动驾驶巴士随处可见穿梭在高校、商业园区和城市的大街小巷,塑造着公共和个人交通运输的未来。此外,全电动自动驾驶牵引车在制造领域支持自动材料处理,实现材料的无干涉无缝运输,以加速产品上市进程。随着AI车辆系统的出现,一系列安全性问题也接踵而至,因此全电动自动驾驶技术供应商EasyMile采用Ansys medini analyze,在产品上市之前定义并展示其电动自动驾驶解决方案的安全性。Ansys帮助EasyMile工程师显著缩短研发周期,加速产品上市时间,并降低该公司自动驾驶巴士(如图)和牵引车解决方案的运营成本。(图片来源:EasyMile)EasyMile致力于为自动驾驶交通和货物运输提供完整解决方案,并与蓝筹OEM厂商合作推进电动汽车的自动驾驶。最早推出的EZ10客运巴士也一直作为该公司一款重要的解决方案,其中的有关技术也应用于自动驾驶TractEasy牵引车中。这款牵引车旨在面向制造环境的高效材料处理,能优化物流运营,降低成本,并提高生产力。EasyMile支持L4级自动驾驶操作,EZ10和TractEasy车辆操作时完全无需人工干预。EasyMile在全球部署了大量的L4级自动驾驶车辆,成为了该公司获得早期成功的良好例证。目前已有10家客户进行了部署,而且数量还在增加。EasyMile表示,公司实现了目前市场上规模最大的L4级车辆部署,采用嵌入式系统的独特内部软件包有助于实现EZ10和TractEasy交通运输平台的自动化。软件负责协调大量车载传感器并收集周边环境数据,然后分享给EasyMile,以提供定位、感知和路径规划功能,从而提高自动化程度,并减少对于以基础设施为中心的环境的需求。自动驾驶汽车操作只有在高水平的信息下才能安全运行。EZ10和TractEasy都配备了各种激光雷达、雷达、传感器、摄像头和GPS硬件,以及负责收集和处理数据、获得360度环境视角的导航软件,而且使用实时车辆数据处理,通过嵌入式软件系统提供自动驾驶功能和信息,该系统旨在实现交通运输平台的自动化。对于载人运输而言,目标是确保乘客的安全性以及驾驶员和周围行人的安全性。对于商品和材料运输而言,则有预设的安全性标准,而且针对无人驾驶车辆的安全操作和控制进行了适当调整。在这两种应用中,EasyMile面临的挑战是与高度复杂的新系统开展协作,以及缺乏明确定义的方法来展示自动驾驶应用的安全性。这正是medini analyze的用武之地。自动驾驶汽车部署需要培训紧急救援人员,也需要EasyMile同全球客户合作为联邦、州和地方等各级政府官员提供相关信息,推动车辆通过监管审批。medini analyze为EasyMile提供的交钥匙系统在统一的解决方案中包括了所有必要的工具。在该软件的支持下,EasyMile使用medini analyze中的自有流程管理并定义自动驾驶产品的安全性分析,这要得益于medini能够灵活地适应该流程。在车辆层面,EasyMile使用软件执行客户要求的所有安全性分析,并提供安全服务组织(SSO)等欧洲安全监管机构所要求的文件。此外,它还应用于子系统层面,比如分析互联基础设施,包括操作人员、部署团队以及交通运输系统中所有其他利益相关者之间的交互。最近,在Ansys团队的帮助下,EasyMile成功地为medini添加了另一款工具(软件定制扩展),能够针对乘客和材料运输应用在统一模型中驱动所有安全性概念和需求。该工具支持其产品线工程方法,能为每个平台的所有产品生成文档。EasyMile的通讯主管Benieke Terverton指出:“我想说JNH官网好像在共同打造两款产品一样。JNH官网有自己的内部方法,也要向客户和合作伙伴介绍产品安全性。Ansys及其medini analyze方案帮助JNH官网协同构建了两种方法,从而为自动驾驶汽车领域带来了全新的视野。JNH官网需要与世界各地的许多不同评估方和监管机构打交道,采用Ansys解决方案,JNH官网能成功地做好沟通工作。”* medini analyze是一个软件工具集,支持为电子控制的安全相关功能开展安全分析。该软件允许一致且高效地应用特定于自动驾驶汽车应用的行业指南,有助于消除分析过程中的不一致性问题,从而加速认证流程。(文章来源公众号:Ansys)+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++关于JNH官网电子JNH官网电子技术有限公司(英文名称:Emdoor Electronics Technology Co.,Ltd)是国内资深的研发工具软件提供商,公司成立于 2002 年,面向中国广大的制造业客户提供研发、设计、管理过程中使用的各种软件开发工具,致力于帮助客户提高研发管理效率、缩短产品设计周期,提升产品可靠性。20 年来,先后与 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立战略合作伙伴关系,并作为他们在中国区的主要分销合作伙伴服务了数千家中国本土客户,为客户提供从芯片级开发工具、EDA 设计工具、软件编译以及测试工具、结构设计工具、仿真工具、电气设计工具、以及嵌入式 GUI 工具等等。JNH官网电子凭借多年的经验积累,真正的帮助客户实现了让研发更简单、更可靠、更高效的目标。欢迎关注“JNH官网电子”公众号了解更多研发工具软件知识
查看更多→
Altium入选《高等职业学校电子信息工程技术专业实训教学条件建设标准配备产品推荐目录》
2022-08-19
近日,中国职业技术教育学会职业教育现代装备专业委员会发布的《职业学校专业实训教学条件建设标准配备产品推荐目录》(2022版),Altium成功入选电子设计自动化《EDA》技术实训室解决方案名录。为贯彻全国职业教育大会精神,落实《国家职业教育改革实施方案》,进一步完善职业教育标准体系,规范和加强实训教学环节,教育部组织制定并于2021年6月29日发布了《高等职业学校电子信息工程技术专业实训教学条件建设标准(详见附件)》等32项职业教育教学标准。受教育部职成司委托,中国职业技术教育学会牵头组织职业学校专业实训教学条件建设标准研制。根据严格评审,Altium成功入选电子设计自动化(EDA)技术实训室设备-仿真软件配备产品推荐目录。Altium Designer 软件是行业领先的 PCB 设计软件。它将数据库、元件管理、原理图输入、电气/设计规则、验证、先进的PCB布线、原生3D PCB MCAD协作、设计文档、输出生成和BOM管理统一起来,并将它们融入到一个整洁的用户界面中。作为电子设计工具的领导者,Altium 一直持续投入对电子设计相关人才力量的培养。与全球各国院校以及国内清华大学、北京大学、上海交通大学等在内的900多所知名院校进行了合作。此次入围推荐目录,体现了Altium在EDA领域出色的技术实力和服务能力。未来,Altium将充分发挥在PCB行业的专业优势,始终将支持中国电子人才培养作为企业的社会责任,加强与中国院校的深入合作,为电子信息产业端培养更多优秀的人才。若您想进一步的了解Altium院校合作计划,(文章来源公众号:Altium)+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++关于JNH官网电子JNH官网电子技术有限公司(英文名称:Emdoor Electronics Technology Co.,Ltd)是国内资深的研发工具软件提供商,公司成立于 2002 年,面向中国广大的制造业客户提供研发、设计、管理过程中使用的各种软件开发工具,致力于帮助客户提高研发管理效率、缩短产品设计周期,提升产品可靠性。20 年来,先后与 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立战略合作伙伴关系,并作为他们在中国区的主要分销合作伙伴服务了数千家中国本土客户,为客户提供从芯片级开发工具、EDA 设计工具、软件编译以及测试工具、结构设计工具、仿真工具、电气设计工具、以及嵌入式 GUI 工具等等。JNH官网电子凭借多年的经验积累,真正的帮助客户实现了让研发更简单、更可靠、更高效的目标。欢迎关注“JNH官网电子”公众号了解更多研发工具软件知识
查看更多→
安谋科技再度荣膺中国IC设计成就奖“年度卓越表现IP公司”
2022-08-18
8月17日,2022年度中国IC领袖峰会暨中国IC设计成就奖颁奖典礼在南京举行。安谋科技(中国)有限公司(以下简称“安谋科技”)凭借在产品研发、技术迭代和生态拓展等方面的引领性贡献,再度荣获中国IC设计成就奖“年度卓越表现IP公司”。作为中国最大的芯片IP设计与服务供应商,安谋科技凭借丰富的生态资源和技术优势,一方面大力构建符合“全球标准、本土创新”的自研产品矩阵;另一方面,通过引入Arm最新架构技术,积极拓展Arm产业生态,为中国科技产业生态提供核心技术基础。安谋科技荣获中国IC设计成就奖“年度卓越表现IP公司”中国IC领袖峰会由全球电子技术领域知名媒体集团ASPENCORE主办,已连续举办20年,一路伴随和见证了中国集成电路产业的成长和发展。大会云集半导体业界专家、企业领袖,及中国电子和IC设计行业资深工程师、技术和供应链专业人士等,回顾行业发展历程,共议未来发展之路。峰会同期颁发中国电子业界权威技术奖项——中国IC设计成就奖,对业内优秀的中国IC设计公司、上游服务供应商和热门IC产品进行表彰。连续斩获“年度卓越表现IP公司”自研实力屡受认可近年来,受国内自主创新及产业需求驱动,中国半导体产业得到快速发展,已成为国家级战略产业。IC设计作为中国半导体产业链中体量最大的一个板块,占比超过40%。基于IC设计的技术突破和应用创新将持续成为中国半导体产业的重要布局领域。安谋科技始终坚持自研IP的创新发展与Arm IP相配合,凭借其对国内市场敏锐的洞察和服务能力,贴合本土需求进行创新,提供多样化、定制化、符合中国产业及市场需求的核心IP产品和解决方案。目前在国内的授权客户超过300家,累计芯片出货量突破250亿片。值得一提的是,此次获奖是安谋科技继2021年之后再次蝉联该奖项,并曾在2020年获得“年度产业杰出贡献IP公司”奖,充分体现了业界对安谋科技自研实力和商业拓展能力的持续认可。构建多元化异构计算平台应对芯片算力新需求近年来,云计算、AI、5G、物联网等新技术的广泛应用催生多样化的应用场景,进而推动芯片整体需求增加,对芯片算力、安全性等均提出了新需求。作为产业深度参与者,安谋科技在人工智能、CPU、信息安全、多媒体处理等领域持续发力,相继推出“周易”NPU、“星辰”CPU、“山海”SPU及“玲珑”ISP等自研成果,助力客户把握产业机遇。过去一年,安谋科技战略布局了汽车、智能物联网、基础设施、移动终端等领域,与包括多家国内芯片厂商在内的上下游产业伙伴在技术创新与生态建设方面积极展开合作,并于今年7月发布了新一代“星辰” STAR-MC2车规级嵌入式处理器和面向多场景应用的全新“玲珑” V6/V8视频处理器。此外,安谋科技还在积极推进面向更多领域的产品研发,并加大对生态建设的投入和拓展力度。安谋科技智能物联及汽车业务线负责人赵永超发表主题演讲在同期举行的“20年,砥砺前行”为主题的2022中国IC领袖峰会上,安谋科技智能物联及汽车业务线负责人赵永超发表了题为《立足产业创新,构建多元化异构计算平台》的主旨演讲。赵永超表示,一套完整、易用的多元化异构计算平台不仅需要Arm CPU、GPU等IP,针对特定应用场景的自研IP同样不可或缺。安谋科技立足本土创新,将自研IP和Arm IP打造成一体化的异构计算矩阵,为客户提供多元化IP解决方案。未来,安谋科技将继续提升研发能力,强化产品之间的高效协同,为产业客户提供技术底座,加速推动中国智能计算产业高速发展。(文章来源公众号:安谋科技)+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++关于JNH官网电子JNH官网电子技术有限公司(英文名称:Emdoor Electronics Technology Co.,Ltd)是国内资深的研发工具软件提供商,公司成立于 2002 年,面向中国广大的制造业客户提供研发、设计、管理过程中使用的各种软件开发工具,致力于帮助客户提高研发管理效率、缩短产品设计周期,提升产品可靠性。20 年来,先后与 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立战略合作伙伴关系,并作为他们在中国区的主要分销合作伙伴服务了数千家中国本土客户,为客户提供从芯片级开发工具、EDA 设计工具、软件编译以及测试工具、结构设计工具、仿真工具、电气设计工具、以及嵌入式 GUI 工具等等。JNH官网电子凭借多年的经验积累,真正的帮助客户实现了让研发更简单、更可靠、更高效的目标。欢迎关注“JNH官网电子”公众号了解更多研发工具软件知识
查看更多→
【方辉专栏】ARM嵌入式编译器(六) 内联函数
2022-08-17
摘要: 本文主要对Arm Compiler 6编译器中内联函数进行介绍。关键字:Arm Compiler 6、编译器、内联函数如果Arm Compiler 6认为内联此函数可以提高性能同时不会显著增加代码量,就会自动优化为内联函数。当然您也可以使用编译器选项来控制函数是否进行内联。内联选项或属性说明__inline__提示编译器可以进行内联,但是否内联仍取决于编译器。__attribute__((always_inline))提示编译器始终内联此函数。__attribute__((noinline))提示编译器不要内联此函数。-fon-inline-functions这个编译命令选项会禁止编译器进行内联,同时也使得__inline__失效。注1:自动内联通常只有在优化等级为-O2或更高等级时才会进行,除非您使用了__attribute__((always_inline)),才会在低优化等级中进行。注2:Arm Compiler 6编译器仅在同一个源文件内进行自动内联函数。以下是一个__attribute__((always_inline))的例子:int bar(int a){    a=a*(a+1);    return a;} __attribute__((always_inline)) static int row(int a){    a=a*(a+1);    return a;} int foo (int i){    i=bar(i);    i=i-2;    i=bar(i);    i++;    i=row(i);    i++;    return i;}在以上代码中,函数bar和row功能相同,只是row声明始终内联。使用-O2进行编译,使用一个含有选项-fon-inline-functions,另一个不含有-fon-inline-functions选项进行编译。编译命令分别如下:有-fon-inline-functions选项:armclang --target=arm-arm-none-eabi -march=armv8-a file.c -O2 -S -o file.s -fon-inline-functions无-fon-inline-functions选项:armclang --target=arm-arm-none-eabi -march=armv8-a file.c -O2 -S -o file.s编译后反汇编结果如下:使用-fon-inline-functions代码不使用-fon-inline-functions代码foo: @ @foo .fnstart@ BB#0: .save {r11, lr} push {r11, lr} bl bar sub r0, r0, #2 bl bar add r1, r0, #1 add r0, r0, #2 mul r0, r0, r1 add r0, r0, #1 pop {r11, pc}.Lfunc_end0: .size foo, .Lfunc_end0-foo .cantunwind .fnendfoo: @ @foo .fnstart@ BB#0: add r1, r0, #1 mul r0, r1, r0 sub r1, r0, #2 sub r0, r0, #1 mul r0, r0, r1 add r1, r0, #1 add r0, r0, #2 mul r0, r0, r1 add r0, r0, #1 bx lr.Lfunc_end0: .size foo, .Lfunc_end0-foo .cantunwind .fnend可以看到,使用-fon-inline-functions选项时,就不会对bar进行内联,而不使用的时候就会对bar进行内联,但对于row始终是进行内联的。+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++关于JNH官网电子JNH官网电子技术有限公司(英文名称:Emdoor Electronics Technology Co.,Ltd)是国内资深的研发工具软件提供商,公司成立于 2002 年,面向中国广大的制造业客户提供研发、设计、管理过程中使用的各种软件开发工具,致力于帮助客户提高研发管理效率、缩短产品设计周期,提升产品可靠性。20 年来,先后与 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立战略合作伙伴关系,并作为他们在中国区的主要分销合作伙伴服务了数千家中国本土客户,为客户提供从芯片级开发工具、EDA 设计工具、软件编译以及测试工具、结构设计工具、仿真工具、电气设计工具、以及嵌入式 GUI 工具等等。JNH官网电子凭借多年的经验积累,真正的帮助客户实现了让研发更简单、更可靠、更高效的目标。欢迎关注“JNH官网电子”公众号了解更多研发工具软件知识
查看更多→
创建蒙特卡洛模拟的 4 个简单步骤
2022-08-17
• 20 世纪 40 年代,研究原子弹的科学家应用 Monte Carlo 模拟计算了一个裂变铀原子引起另一个裂变反应的概率,这是该模拟的首次应用,自此以来已经取得了很大进展。今天JNH官网将介绍如何使用 Minitab 为已知的工程公式和 DOE 方程创建 Monte Carlo 模拟。• 由于当时铀供应短缺,试验的试错空间很小,因此 Monte Carlo 模拟一直专注于根据模拟数据计算可靠的概率。如今,从材料工程到医疗设备包装密封再到炼钢,模拟数据经常用于许多场景,例如资源有限的场景,或者收集真实数据过于昂贵或不切实际的场景。使用 Engage 或 Workspace 的 Monte Carlo 模拟工具可以:(1)模拟可能结果的范围以帮助做出决策(2)预测财务结果或估计项目时间表(3)了解过程或系统中的变异性(4)在过程或系统中发现问题(5)通过了解成本/效益关系来管理风险开始使用任何 Monte Carlo 模拟的4 个步骤• 模拟可能非常复杂,具体取决于所涉及因子的数量。但所有 Monte Carlo 模拟基本上都有四个简单的步骤:• 确定传输方程要创建 Monte Carlo 模拟,您需要一个包含要探索的业务活动、计划或过程的定量模型。过程的数学表达式称为“传输方程”。这可以是已知的工程或业务公式,也可以基于根据设计试验 (DOE) 或回归分析创建的模型。借助 Minitab Engage 和 Minitab Workspace 等软件,您能够创建复杂的方程,甚至是具有多个可能相互依赖的响应的方程。• 定义输入参数对于传输方程中的每个因子,确定其数据的分布方式。一些输入可能遵循正态分布,而另一些则遵循三角分布或均匀分布。然后,您需要确定每个输入的分布参数。例如,需要为遵循正态分布的输入指定均值和标准差。如果您不确定数据遵循哪种分布,可以使用 Engage 和 Workspace 提供的工具来确定。• 设置模拟要进行有效的模拟,您必须为每个输入创建一个非常大的随机数据集(大约包含 100,000 个实例)。这些随机数据点模拟在很长一段时间内,对于每个输入将看到的值。尽管听起来工作量很大,但这正是 Engage 和 Workspace 的亮点。一旦JNH官网提交输入和模型,一切都会得到处理。• 分析过程输出有了模拟数据,您就可以使用传输方程来计算模拟结果。考虑到输入中的预期变异,通过模型运行足够多的模拟输入数据将可靠地指出该过程将在一段时间内输出的内容。Monte Carlo 使用已知工程公式的4 个步骤• 一家制造公司需要评估所提议产品的设计,这是一款每分钟必须泵送 12 毫升流体的小型活塞泵。考虑到活塞直径 (D)、冲程长度 (L) 和每分钟冲程数 (RPM) 的自然变异,您想要估计数千个泵的可能性能。理想情况下,数千个泵的泵流量将具有不大于 0.2 毫升的标准差。• 确定传输方程进行 Monte Carlo 模拟的第一步是确定传输方程。在本例中,您只需使用已知的工程公式来测量泵流量:流量(以毫升为单位)= π(D/2)2 ∗ L ∗ RPM• 定义输入参数现在,必须定义传输方程中使用的每个输入的分布和参数。泵的活塞直径和冲程长度是已知的,但必须计算达到所需 12 毫升/分钟流速所需的每分钟冲程数 (RPM)。每个冲程泵送的体积按以下方程计算:π(D/2)2 * L如果 D = 0.8,L = 2.5,则每个冲程排出 1.256 毫升流体。因此,要达到 12 毫升/分钟的流速,RPM 为 9.549。根据贵厂制造的其他泵的性能,您可以假定活塞直径呈正态分布,均值为 0.8 厘米,标准差为 0.003 厘米。冲程长度呈正态分布,均值为 2.5 厘米,标准差为 0.15 厘米。最后,每分钟冲程数呈正态分布,均值为 9.549 RPM,标准差为 0.17 RPM。• 在 Engage 或 Workspace 中设置模拟单击顶部功能区中的插入选项卡,然后选择 Monte Carlo 模拟。JNH官网将它变得非常简单 — 您只需为每个变量提供名称,从下拉菜单中选择一个分布,然后输入参数。JNH官网将按照上面所述的内容进行操作。如果您不确定数据遵循哪种分布,可以选择使用数据确定。这将提示您上传数据的 .csv 文件,可从以下几个选项中进行选择:• 模拟和分析过程输出下一步是给出方程。在这里,操作非常简单,只需为您的输出提供名称(JNH官网提供的名称是 Flow),然后键入JNH官网在上面确定的正确传输方程。您还可以添加规格上限和规格下限以查看模拟的比较情况。然后,在功能区中,选择要运行的模拟数量(100,000 是不错的基准),然后单击用来运行模拟的按钮。对于为了撰写本文而生成的随机数据,基于 100,000 个样本的平均流速为 11.996。从平均值来看,JNH官网达到了目标,但最小值为 8.7817,最大值为 15.7057。这是一个相当大的范围。(所有组件的)传输变异导致标准差为 0.756 毫升,这远远超过目标值 0.2 毫升。看起来这种泵的设计变异太大,需要在投入生产之前进一步完善。从这里,JNH官网看到模拟所带来的好处。如果JNH官网直接投入生产,很可能会生产出太多被退货的泵。借助 Monte Carlo 模拟,JNH官网能够解决所有这些问题,而不会因制造和测试数千个原型或过早投入生产而产生费用。您可能想了解这些模拟结果是否站得住脚,不妨自己尝试一下吧!运行不同的模拟将导致轻微的变化,但每次的最终结果(流速变异量不可接受)都会保持一致。这就是 Monte Carlo 方法的强大之处。另一个可选步骤:参数优化• 了解到标准差过高非常有价值,但 Engage 和 Workspace 真正突出的地方在于它们能够帮助改善状况。这就是参数优化的用武之地。让JNH官网看看第一个输入:活塞直径。平均值为 0.8,大部分数据将接近该值,或者在平均值的一两个标准差内。但是,如果活塞直径越小,流动效率越高,该怎么办?参数优化有助于JNH官网回答这个问题。为了进行参数优化,JNH官网需要为每个输入指定搜索范围。在本例中,为简单起见,我指定的算法搜索范围是 +/- 3 个标准差。然后,Engage 或 Workspace 将帮助JNH官网为每个输入找到要实现目标(在本例中是减小标准差)的最佳设置。选择合适的范围至关重要;确保您输入的整个范围都可以运行;如果找到的最佳解决方案无法在生产环境中复制,则毫无用处。如果您在 Minitab Statistical Software 中用过响应优化器,则原理类似。下面是JNH官网的结果:基于以上结果,如果要减小标准差,则应当减小冲程长度和每分钟冲程数。活塞直径可以保持类似大小。请记住,Monte Carlo 模拟的关键之处在于,能够在不构建单个新原型或进行新试验的情况下找出所有这些结果。Monte Carlo 使用试验设计 (DOE) 响应方程• 如果您不知道要使用什么方程,或者您正在尝试模拟独特过程的结果,该怎么办?此时,JNH官网可以将 Minitab Statistical Software 的设计试验功能与 Engage 或 Workspace 的模拟功能相结合。一家电子制造商已指派您改进其电极清洁操作,该操作为电镀金属部件做准备。制造商通过电镀在原材料上涂上一层不同的金属,以实现所需的特性。电镀不会附着在肮脏的表面上,因此该公司有一个连接到自动电镀机的连续流电极清洗系统。传送带将每个部件浸入槽中,槽中的电压通过部件传送,从而对部件进行清洁。如果清洁不充分,会导致平均粗糙度的均方根(简称 RMS)值太高以及表面光洁度较差。经过正确清洁的部件具有光滑的表面和较低的 RMS。为了优化该过程,可以调整两个关键输入:电压 (Vdc) 和电流密度 (ASF)。对于电极清洁方法,Vdc 的典型工程限值为 3 至 12 伏。电流密度限值为 10 至 150 安培/平方英尺 (ASF)。• 确定传输方程您不能针对该过程使用教材上的已知公式,但可以在 Minitab 中设置响应曲面 DOE 以确定传输方程。响应曲面 DOE 通常用于通过为“关键少数”可控因子寻找最佳设置来优化响应。在本例中,响应将是部件在清洁后的表面质量。要在 Minitab 中创建响应曲面试验,请选择统计 > DOE > 响应曲面 > 创建响应曲面设计。由于JNH官网有两个因子(电压 (Vdc) 和电流密度 (ASF)),因此JNH官网将选择试验次数为 13 的双因子中心复合设计。Minitab 创建设计试验后,您需要执行 13 次试验、收集数据并记录 13 个清洁后部件的表面粗糙度。通过 Minitab,可轻松分析 DOE 结果、简化模型和使用残差图检查假定。使用最终模型和 Minitab 的响应优化器,可以找到变量的最佳设置。在本例中,您将电压设置为 7.74,将 ASF 设置为 77.8,所获得的粗糙度值为 39.4。响应曲面 DOE 为 Monte Carlo 模拟生成以下传输方程:粗糙度 = 957.8 − 189.4(Vdc) − 4.81(ASF) + 12.26(Vdc2) + 0.0309(ASF2)• 定义输入参数现在,您可以为Monte Carlo模拟输入设置参数定义,并将它们带入Engage或Workspace 中。请注意,标准差必须已知或基于现有的过程知识进行估计。这适用于所有 Monte Carlo 输入。电压呈正态分布,均值为 7.74 Vdc,标准差为 0.14 Vdc。每平方英尺安培数 (ASF) 呈正态分布,均值为 77.8 ASF,标准差为 3 ASF。• 在 Engage 或 Workspace 中设置模拟这与步骤 3 完全相同。单击功能区中的插入 > Monte Carlo 模拟,添加您的输入并定义其参数,然后输入您的模型。在本例中,如果您拥有最新版本的 Minitab,则可以单击鼠标右键,然后点击发送到 Engage 或发送到 Minitab Workspace。如果您没有,则可以从 Minitab 输出中手动复制它并将其粘贴到 Engage 或 Workspace 的模型字段中。• 模拟和分析过程输出汇总表明,即使基础输入呈正态分布,RMS 粗糙度的分布也不是正态的。该汇总还显示所有组件的传输变异导致标准差为 0.521,根据您掌握的过程知识判断,这是不错的过程结果。基于试验次数仅为 13 的 DOE,JNH官网可以确定在该过程中将看到的实际情况。同样,由于这基于模拟数据,您的答案会略有不同,但通常而言答案应该是正确的。如有必要,JNH官网可以查看参数优化以微调JNH官网的答案并找到最佳解决方案。(文章来源公众号:Minitab)+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++关于JNH官网电子JNH官网电子技术有限公司(英文名称:Emdoor Electronics Technology Co.,Ltd)是国内资深的研发工具软件提供商,公司成立于 2002 年,面向中国广大的制造业客户提供研发、设计、管理过程中使用的各种软件开发工具,致力于帮助客户提高研发管理效率、缩短产品设计周期,提升产品可靠性。20 年来,先后与 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立战略合作伙伴关系,并作为他们在中国区的主要分销合作伙伴服务了数千家中国本土客户,为客户提供从芯片级开发工具、EDA 设计工具、软件编译以及测试工具、结构设计工具、仿真工具、电气设计工具、以及嵌入式 GUI 工具等等。JNH官网电子凭借多年的经验积累,真正的帮助客户实现了让研发更简单、更可靠、更高效的目标。欢迎关注“JNH官网电子”公众号了解更多研发工具软件知识
查看更多→
【方辉专栏】ARM嵌入式编译器(五) 优化循环的4种方法
2022-08-16
摘要: 本文主要对Arm Compiler 6编译器的优化循环对编写优化代码的作用进行介绍。关键字:Arm Compiler 6、编译器、优化循环 、循环展开、pragma、循环向量化、循环终止、无限循环、1. 循环展开循环执行的时间取决于循环的次数,循环中每次检查是否进行循环的条件会降低循环的性能。使用循环展开可以减少检查条件的判断次数,但是展开循环就意味着增加代码量。例如:在精确的时钟周期循环中,可以使用#pragma unroll (n)来展开循环。“pragma”(编译指示)仅在选择优化等级为-O2/-O3/-Ofast和-Omax时有效。 编译指示的相关用法:#pragma unroll (n)展开n次循环#pragma unroll_completely展开所有循环注:虽然给出了循环展开的编译指示,但Arm官方不建议使用,这样会影响编译器的展开优化和其他循环优化。不使用循环展开的代码使用循环展开的代码int countSetBits1(unsigned int n){ int bits = 0; while (n != 0) { if (n & 1) bits++; n >>= 1; } return bits;}int countSetBits2(unsigned int n){ int bits = 0; #pragma unroll (4) while (n != 0) { if (n & 1) bits++; n >>= 1; } return bits;}将代码分别复制到file.c文件中,然后使用以下命令进行编译和反汇编。armclang --target=arm-arm-none-eabi -march=armv8-a file.c -O2 -S -o file.s不使用循环展开的汇编代码使用循环展开的汇编代码countSetBits1: mov r1, r0 mov r0, #0 cmp r1, #0 bxeq lr mov r2, #0 mov r0, #0.LBB0_1: and r3, r1, #1 cmp r2, r1, asr #1 add r0, r0, r3 lsr r3, r1, #1 mov r1, r3 bne .LBB0_1 bx lrcountSetBits2: mov r1, r0 mov r0, #0 cmp r1, #0 bxeq lr mov r2, #0 mov r0, #0LBB0_1: and r3, r1, #1 cmp r2, r1, asr #1 add r0, r0, r3 beq .LBB0_4@ BB#2: asr r3, r1, #1 cmp r2, r1, asr #2 and r3, r3, #1 add r0, r0, r3 asrne r3, r1, #2 andne r3, r3, #1 addne r0, r0, r3 cmpne r2, r1, asr #3 beq .LBB0_4@ BB#3: asr r3, r1, #3 cmp r2, r1, asr #4 and r3, r3, #1 add r0, r0, r3 asr r3, r1, #4 mov r1, r3 bne .LBB0_1.LBB0_4: bx lr可以看到展开循环时,代码执行会更快,但代码量也更大。2. 循环向量化如果编译的目标含有SIMD单元,那么编译器就可以使用向量引擎来优化代码的向量部分。在优化等级为-O1,可以使用-fvectorize 来启动优化,而在-O2或更高等级时向量优化是自动启用。要使用向量优化,在编写代码的时候需要将结构体的成员放到同一个循环中,而不能使用独立的循环。可以进行SIMD优化的代码不能进行SIMD优化的代码typedef struct tBuffer { int a; int b; int c;} tBuffer;tBuffer buffer[8];void DoubleBuffer1 (void){ int i; for (i=0; i<8; i++) { buffer[i].a *= 2; buffer[i].b *= 2; buffer[i].c *= 2; }}typedef struct tBuffer { int a; int b; int c;} tBuffer;tBuffer buffer[8];void DoubleBuffer2 (void){ int i; for (i=0; i<8; i++) buffer[i].a *= 2; for (i=0; i<8; i++) buffer[i].b *= 2; for (i=0; i<8; i++) buffer[i].c *= 2;}对于每个例子,将代码分别复制到file.c文件中,然后使用以下命令进行编译和反汇编。armclang --target=arm-arm-none-eabi -march=armv8-a file.c -O2 -S -o file.s向量优化后汇编代码未进行向量优化的代码DoubleBuffer1:.fnstart@ BB#0: movw r0, :lower16:buffer movt r0, :upper16:buffer vld1.64 {d16, d17}, [r0:128] mov r1, r0 vshl.i32 q8, q8, #1 vst1.32 {d16, d17}, [r1:128]! vld1.64 {d16, d17}, [r1:128] vshl.i32 q8, q8, #1 vst1.64 {d16, d17}, [r1:128] add r1, r0, #32 vld1.64 {d16, d17}, [r1:128] vshl.i32 q8, q8, #1 vst1.64 {d16, d17}, [r1:128] add r1, r0, #48 vld1.64 {d16, d17}, [r1:128] vshl.i32 q8, q8, #1 vst1.64 {d16, d17}, [r1:128] add r1, r0, #64 add r0, r0, #80 vld1.64 {d16, d17}, [r1:128] vshl.i32 q8, q8, #1 vst1.64 {d16, d17}, [r1:128] vld1.64 {d16, d17}, [r0:128] vshl.i32 q8, q8, #1 vst1.64 {d16, d17}, [r0:128] bxlrDoubleBuffer2: .fnstart@ BB#0: movw r0, :lower16:buffer movt r0, :upper16:buffer ldr r1, [r0] lsl r1, r1, #1 str r1, [r0] ldr r1, [r0, #12] lsl r1, r1, #1 str r1, [r0, #12] ldr r1, [r0, #24] lsl r1, r1, #1 str r1, [r0, #24] ldr r1, [r0, #36] lsl r1, r1, #1 str r1, [r0, #36] ldr r1, [r0, #48] lsl r1, r1, #1 str r1, [r0, #48] ldr r1, [r0, #60] lsl r1, r1, #1 str r1, [r0, #60] ldr r1, [r0, #72] lsl r1, r1, #1 str r1, [r0, #72] ldr r1, [r0, #84] lsl r1, r1, #1 str r1, [r0, #84] ldr r1, [r0, #4] lsl r1, r1, #1 str r1, [r0, #4] ldr r1, [r0, #16] lsl r1, r1, #1 ... bx lr在64位运行状态下要避免编译器使用SIMD向量优化可以在-march或-mcpu后+nosimd;例如:armclang --target=aarch64-arm-none-eabi -march=armv8-a+nosimd -O2 file.c -S -o file.s在32位运行状态下要避免编译器使用SIMD向量优化,可以通过设置-mfpu=fp-armv8;例如:armclang --target=aarch32-arm-none-eabi -march=armv8-a -mfpu=fp-armv8 -O2 file.c -S -o file.s3. 循环终止在写循环的时候如果编写不当会使得代码的运行效率降低和代码量增大。建议使用以下的终止条件:1)使用变量类型为:unsigned int2)使用向下减少的计数方式,以减到0作为计数结束。3)使用简单的终止条件。单独或组合使用以上原则的终止条件,可以获得更好的代码大小或效率。例如:这是一个实现n!的计算程序。递增循环递减循环int fact1(int n){ int i, fact = 1; for (i = 1; i <= n; i++) fact *= i; return (fact);}int fact2(int n){ unsigned int i, fact = 1; for (i = n; i != 0; i--) fact *= i; return (fact);}用以下命令反汇编以下armclang -Os -S --target=arm-arm-none-eabi -march=armv8-a递增循环递减循环fact1: mov r1, r0 mov r0, #1 cmp r1, #1 bxlt lr mov r2, #0.LBB0_1: add r2, r2, #1 mul r0, r0, r2 cmp r1, r2 bne .LBB0_1 bx lrfact2: mov r1, r0 mov r0, #1 cmp r1, #0 bxeq lr.LBB1_1: mul r0, r0, r1 subs r1, r1, #1 bne .LBB1_1 bx lr对比反汇编代码可以看出在递减循环中用SUBS指令代替了递增循环中ADD 和CMP两条指令。这是因为SUBS指令会自动更新Z标志。此外在递减循环中变量n不必再循环的过程实时使用,从而减少了寄存器的数量。如果终止条件是一个函数,则循环的每次都调用该函数,这种情况下递减的循环优势就更明显了。例如:for (...; i < get_limit(); ...);说明:这种递减循环计数的方式也适用于while-do 命令。4. 无限循环在某些情况下armclang会删除一些编译器认为没有影响的无限循环,从而导致最终程序无法正常运行。为确保无限循环的正确编译执行,ARM官方建议在无限循环中添加__arm volatile的声明。这个声明的目的是告诉编译器删除这个无限循环会有影响,不能被优化删除。在无限循环中,把处理器设置为低功耗模式是一个不错的做法,当有中断或事件触发时再回到正常模式。下面是一个包含__arm volatile声明的无限循环例子:void infinite_loop(void) {while (1)  __asm volatile("wfe");}注:wfe(Wait for Event)是给处理器一个提示,使处理器进入低功耗状态,直到事件或中断触发。来源:《Arm® Compiler for Embedded User Guide Version 6.18》+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++关于JNH官网电子JNH官网电子技术有限公司(英文名称:Emdoor Electronics Technology Co.,Ltd)是国内资深的研发工具软件提供商,公司成立于 2002 年,面向中国广大的制造业客户提供研发、设计、管理过程中使用的各种软件开发工具,致力于帮助客户提高研发管理效率、缩短产品设计周期,提升产品可靠性。20 年来,先后与 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立战略合作伙伴关系,并作为他们在中国区的主要分销合作伙伴服务了数千家中国本土客户,为客户提供从芯片级开发工具、EDA 设计工具、软件编译以及测试工具、结构设计工具、仿真工具、电气设计工具、以及嵌入式 GUI 工具等等。JNH官网电子凭借多年的经验积累,真正的帮助客户实现了让研发更简单、更可靠、更高效的目标。欢迎关注“JNH官网电子”公众号了解更多研发工具软件知识
查看更多→
Ansys计划于2027年实现减少15%碳排放量
2022-08-16
Ansys致力于通过谨慎衡量资源使用情况,减少其现有业务对环境与气候的影响主要亮点作为仿真软件领域的领导者,Ansys通过旨在减少资源浪费的先进仿真技术,帮助用户实现可持续发展目标Ansys的环境战略侧重于总体减排和基于其全球基础设施能源审计结果的项目实施Ansys计划通过测量、分析和减少资源使用,来减少其业务对环境和气候的影响。目标是到2027年,与其2019年的基线相比,将scope 1和scope 2范畴的排放量减少15%。Ansys还通过仿真解决方案扩大其承诺范围,帮助用户最大限度地减少材料浪费、提高循环利用率、加速产品研发过程,并最大限度地减少物理原型制作。Ansys的环境战略侧重于减少总体排放,并继续实施能源审计项目,包括加强照明与现场可再生能源。这是其降低排放、减少环境影响并优化运营的更广泛举措中的一部分。Ansys的环境战略侧重于减少总体排放,并继续实施能源审计项目,包括加强照明与现场可再生能源,如太阳能电池板(图为 Ansys 印度浦那厂区)Ansys在继续推进其产品手印计划(product handprint initiative)——记录Ansys如何帮助客户减少其对地球的影响。每个产品手印或应用案例,都反映了Ansys在特定领域的工作成果,包括半导体、能源、数字孪生和航空航天领域。通过其在线系列纪录片 “拯救地球(Earth Rescue)” ,Ansys展示了富有远见的客户为应对气候变化在解决方案创新方面所做的努力。“拯救地球” 系列纪录片的新剧集将于今年秋天发布。Ansys副总裁、法律总顾问兼秘书及ESG项目负责人Janet Lee表示:“通过JNH官网的环境、社会和治理(ESG)计划,Ansys致力于为投资者、客户、员工和合作伙伴推动积极的创新发展。JNH官网ESG计划的根本理念是,通过产品促进可持续发展、投资JNH官网的员工、负责任地运营以及与利益相关方合作——确保JNH官网能够在共同建设更美好未来的过程中,为企业和社区带来长期价值。”(文章来源公众号:Ansys)+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++关于JNH官网电子JNH官网电子技术有限公司(英文名称:Emdoor Electronics Technology Co.,Ltd)是国内资深的研发工具软件提供商,公司成立于 2002 年,面向中国广大的制造业客户提供研发、设计、管理过程中使用的各种软件开发工具,致力于帮助客户提高研发管理效率、缩短产品设计周期,提升产品可靠性。20 年来,先后与 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立战略合作伙伴关系,并作为他们在中国区的主要分销合作伙伴服务了数千家中国本土客户,为客户提供从芯片级开发工具、EDA 设计工具、软件编译以及测试工具、结构设计工具、仿真工具、电气设计工具、以及嵌入式 GUI 工具等等。JNH官网电子凭借多年的经验积累,真正的帮助客户实现了让研发更简单、更可靠、更高效的目标。欢迎关注“JNH官网电子”公众号了解更多研发工具软件知识
查看更多→
jnh官网 jnh官网 jnh官网 jnh官网 金年会 金年会 金年会 金年会