【GreenHills】GHS-Point导致的调试HardFault错误

2024-06-13 12:36

本文主要是介绍【GreenHills】GHS-Point导致的调试HardFault错误,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【更多软件使用问题请点击亿道电子官方网站】

1、 文档背景

该客户使用的IDE为S32 Design Studio for ARM ,使用的编译器为GHS compiler,调试器为PE。

客户在使用Ceil函数进行函数调用时,编译可以正常通过,但调试无法成功运行。

并且出现下方错误信息:

UsageFault: The processor has attempted to execute an undefined instruction.

HardFault: A fault has been escalated to a hard fault.

处理器试图执行一个未定义的指令。

HardFault:已升级为硬故障。

2、软硬件环境

1)、软件版本:S32 Design Studio for ARM 2.2

2)、电脑环境:Windows 11

3)、外设硬件:PE

3、解决步骤

1)、原厂建议使用“-fsoft and then -fsingle”,查看GHS编译选项,

"Floating-Point Mode"设置为:"Hardware Single, Software Double"后尝试调试,该硬件报错依旧存在。

图3-1

注:

Hardware Single, Software Double (-fsingle) 用于单精度操作的硬件浮点模式,用于双精度操作的软件浮点模式。与-hard相同的处理器支持此设置。对于Cortex-M4F,默认开启-fsingle。

Software Emulation (-fsoft)  SFP (Software floating-point)模式。此设置使目标使用整数寄存器来保存浮点数据,并使用库子例程调用来模拟浮点操作。对于没有FPU的目标,这是默认设置。如果目标有一个FPU,这个设置选择一组不同的浮点库。

2)、查看汇编语言出现vcmp.64调用,并且函数执行到该地址时出现故障,同步修改配置选择。

图3-2

3)、将 “Floating-Point Coprocessor Version”同步设置为“VFP v5, 32 Double Registers”,设置完成后程序运行成功。无vcmp.64调用。

图3-3

注:

VFP v5, 32 Double Registers (-fpu=vfpv5) VFP v5, 32双寄存器(-fpu=vfpv5)使用VFP指令集的v5版本指定硬件浮点数,具有32个双精度浮点寄存器。

————————————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

关于亿道电子

亿道电子技术有限公司(www.emdoor.cn)是国内资深的研发工具软件提供商,公司成立于2002年,面向中国广大的制造业客户提供研发、设计、管理过程中使用的各种软件开发工具,致力于帮助客户提高研发管理效率、缩短产品设计周期,提升产品可靠性。

这篇关于【GreenHills】GHS-Point导致的调试HardFault错误的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1057314

相关文章

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

vscode中文乱码问题,注释,终端,调试乱码一劳永逸版

忘记咋回事突然出现了乱码问题,很多方法都试了,注释乱码解决了,终端又乱码,调试窗口也乱码,最后经过本人不懈努力,终于全部解决了,现在分享给大家我的方法。 乱码的原因是各个地方用的编码格式不统一,所以把他们设成统一的utf8. 1.电脑的编码格式 开始-设置-时间和语言-语言和区域 管理语言设置-更改系统区域设置-勾选Bata版:使用utf8-确定-然后按指示重启 2.vscode

STM32 ADC+DMA导致写FLASH失败

最近用STM32G070系列的ADC+DMA采样时,遇到了一些小坑记录一下; 一、ADC+DMA采样时进入死循环; 解决方法:ADC-dma死循环问题_stm32 adc dma死机-CSDN博客 将ADC的DMA中断调整为最高,且增大ADCHAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, ADC_Buffer_Size); 的ADC_Bu

【经验交流】修复系统事件查看器启动不能时出现的4201错误

方法1,取得『%SystemRoot%\LogFiles』文件夹和『%SystemRoot%\System32\wbem』文件夹的权限(包括这两个文件夹的所有子文件夹的权限),简单点说,就是使你当前的帐户拥有这两个文件夹以及它们的子文件夹的绝对控制权限。这是最简单的方法,不少老外说,这样一弄,倒是解决了问题。不过对我的系统,没用; 方法2,以不带网络的安全模式启动,运行命令行,输入“ne

起点中文网防止网页调试的代码展示

起点中文网对爬虫非常敏感。如图,想在页面启用调试后会显示“已在调试程序中暂停”。 选择停用断点并继续运行后会造成cpu占用率升高电脑卡顿。 经简单分析网站使用了js代码用于防止调试并在强制继续运行后造成电脑卡顿,代码如下: function A(A, B) {if (null != B && "undefined" != typeof Symbol && B[Symbol.hasInstan

DAY16:什么是慢查询,导致的原因,优化方法 | undo log、redo log、binlog的用处 | MySQL有哪些锁

目录 什么是慢查询,导致的原因,优化方法 undo log、redo log、binlog的用处  MySQL有哪些锁   什么是慢查询,导致的原因,优化方法 数据库查询的执行时间超过指定的超时时间时,就被称为慢查询。 导致的原因: 查询语句比较复杂:查询涉及多个表,包含复杂的连接和子查询,可能导致执行时间较长。查询数据量大:当查询的数据量庞大时,即使查询本身并不复杂,也可能导致