淮北建设工程质量安全站网站宁乡市住房和城乡建设局网站

web/2025/10/7 23:50:56/文章来源:
淮北建设工程质量安全站网站,宁乡市住房和城乡建设局网站,头像制作免费,成都装饰设计公司排名文章目录 问题背景堆栈对齐要求Cortex-M33 的 FPU 功能 问题背景 rt-thread 在PendSV_Handler退出的时候发生了HardFault_Handler是什么原因#xff1f;且 LR 的值为0xfffffffd 堆栈对齐要求 在 ARM Cortex-M 架构中#xff0c;堆栈指针 (SP) 必须始终保持 8 字节对齐。这… 文章目录 问题背景堆栈对齐要求Cortex-M33 的 FPU 功能 问题背景 rt-thread 在PendSV_Handler退出的时候发生了HardFault_Handler是什么原因且 LR 的值为0xfffffffd 堆栈对齐要求 在 ARM Cortex-M 架构中堆栈指针 (SP) 必须始终保持 8 字节对齐。这是因为从 ARMv7-M 开始堆栈帧可能包含额外的浮点寄存器而要求 8 字节对齐以实现更有效的访问和与浮点寄存器大小相一致。 在进入异常处理时处理器会自动将 xPSR、返回地址、LR、R12、R3、R2、R1 和 R0 压入堆栈如果使用浮点单元且由异常激活则还会压入 S0-S15 和 FPSCR 寄存器。 当从异常返回时处理器会根据 LR 中的 EXC_RETURN 值来检查堆栈指针以确保正确地恢复寄存器状态。 发生 HardFault 的原因可能很多但当你看到 LR链接寄存器的值为 0xFFFFFFFD 时这表明异常返回时处理器试图从进程堆栈指针PSP恢复上下文。这个特定的 EXC_RETURN 值意味着在从异常这种情况下是 PendSV返回时发生了与堆栈或上下文恢复有关的问题。 以下是一些可能导致你在 PendSV_Handler 退出时遭遇 HardFault 的原因 堆栈指针 (PSP) 不正确如果 PSP 被错误地设置或在异常处理期间被破坏它可能不再指向有效的堆栈帧导致在尝试恢复寄存器时访问了错误的内存地址。堆栈溢出如果任务的堆栈空间不足可能在堆栈中写入时超过了分配的边界导致堆栈损坏。上下文保存不完整或不正确在进入 PendSV_Handler 时必须保存当前任务的上下文包括所有必要的寄存器。如果保存过程中出错或者未能保存足够的寄存器状态那么恢复这些寄存器时会遇到问题。上下文恢复到错误的地址如果保存的程序计数器PC或状态寄存器xPSR的值不正确那么在尝试返回到这些地址时会触发 HardFault。错误的异常返回指令虽然 LR 的值是正确的 EXC_RETURN但如果在异常处理的汇编代码中有错误可能会导致错误的堆栈操作或错误的异常返回。 为了调试此 HardFault可以采取以下步骤 检查 PSP 的值在 HardFault_Handler 中检查 PSP 是否指向有效的内存区域。检查堆栈大小验证所有任务的堆栈大小是否足够并没有发生堆栈溢出。使用调试器如果可能使用调试器单步执行 PendSV_Handler 中的代码观察 PSP、PC 和 xPSR 的值以及它们的变化。查看 HardFault_Handler 实现一个 HardFault_Handler 来捕获硬件错误从中可以读取更多的系统状态和错误信息例如配置故障状态寄存器 CFSR、HFSR、MMFAR 和 BFAR。审查 RT-Thread 的系统配置确认 RT-Thread 的配置与你的硬件设备兼容尤其是关于任务堆栈和堆内存的部分。堆栈帧对齐检查确保在进入 PendSV_Handler 之前堆栈帧是正确对齐的因为 ARM Cortex-M 系列处理器要求堆栈必须8字节对齐。如果启用了自动堆栈对齐检查STKALIGN 位在 CCR 寄存器内那么在对齐错误时可能会引发 UsageFault如果没有启用相关的 UsageFault则会变成 HardFault。 接着上篇文章【ARMv8M Cortex-M33 系列 7.1 – xPSR | CFSR | HFSR | BFAR | MMFAR 寄存器】 来通过JLink 来对 错误提示信息寄存器进行debug它们的地址如下 #define SCB_CFSR (*(volatile const unsigned *)0xE000ED28) /* Configurable Fault Status Register */ #define SCB_HFSR (*(volatile const unsigned *)0xE000ED2C) /* HardFault Status Register */ #define SCB_MMAR (*(volatile const unsigned *)0xE000ED34) /* MemManage Fault Address register */ #define SCB_BFAR (*(volatile const unsigned *)0xE000ED38) /* Bus Fault Address Register */ #define SCB_AIRCR (*(volatile unsigned long *)0xE000ED0C) /* Reset control Address Register */ #define SCB_RESET_VALUE 0x05FA0004 /* Reset value, write to SCB_AIRCR can reset cpu */通过JTAG 读取上面debug 寄存器SCB_CFSR的值 mem32 0xe000ed28 1 E000ED28 00040000INVPC, bit [2] Invalid PC flag. Sticky flag indicating whether an integrity check error has occurred. 可以看到发生 INVPC 这个错误。 继续 Debug 其它寄存器 mem32 0xe000ed2c 1 E000ED2C 40000000FORCED, bit [30] Forced. Indicates that a fault with configurable priority has been escalated to a HardFault exception, because it could not be made active, because of priority, or because it was disabled. 从上面的解释可以看到问题原因是由于某个异常升级为了 HardFault 异常了可能是由于这个异常没有enable所以后面就需要查看如何使能Cortex-M33 的各种异常。 继续 Debug 其它寄存器 mem32 0xe000ed34 1 E000ED34 20000BF4ADDRESS, bits [31:0] Data address for an MemManage fault. This register is updated with the address of a location that produced a MemManage fault. The MMFSR shows the cause of the fault, and whether this field is valid. This field is valid only when MMFSR.MMARVALID is set, otherwise it is UNKNOWN. Attributes 8-bit read/write-one-to-clear register located at 0xE000ED28. 这个寄存器也就是寄存器CFSR 的 低8bits由于低8bits 为0所以不是memmanage fault 的问题。 mem32 0xe000ed38 1 E000ED38 20000BF4ADDRESS, bits [31:0] Data address for a precise BusFault. This register is updated with the address of a location that produced a BusFault. BFSR shows the reason for the fault. This field is valid only when BFSR.BFARVALID is set, otherwise it is UNKNOWN. 由于 BFSR.BFARVALID 值为0所以也不是 Busfault。 当将编译参数中的硬浮点修改为软浮点之后再去读CFSR 寄存器的值为 J-Linkmem32 0xe000ed28 1 E000ED28 01000000也就是报出 UNALIGNED 错误(Debug 到最后发现也不是这个问题引起的)。到目前为止仍然没有找到问题所在 那么如何配置不使用fpu功能 要在 ARM Cortex-M33 上使用 ARM GCC 编译器配置不使用 FPU浮点单元功能需要在编译选项中指定不使用硬件浮点支持。这可以通过设置适当的编译器标志实现。 ARM Cortex-M33 可以配置为带有或不带有 FPU。如果你的 Cortex-M33 核心不包含 FPU或者你的应用程序不需要浮点运算支持你应该确保编译器不生成任何浮点指令或链接到浮点库。 以下是如何在编译器选项中禁用 FPU 支持的示例 -mcpucortex-m33 -mthumb -mfloat-abisoft 这里的编译器选项说明如下 -mcpucortex-m33: 指定目标 CPU 是 Cortex-M33。-mthumb: 指示编译器生成 Thumb 指令集的代码。-mfloat-abisoft: 指定浮点 Application Binary Interface (ABI) 为软件实现soft。 这意味着即使硬件支持浮点运算也将使用软件库来执行浮点运算。这个选项确保编译器不会生成使用 FPU 的代码。 如果你的应用程序确实包含浮点运算上述设置会导致所有浮点运算都通过软件库函数实现而不是使用 FPU。这会导致浮点运算性能降低但可以避免在不包含 FPU 的 Cortex-M33 核心或者选择不使用 FPU 的情况下发生与硬件相关的问题。 请确保编译器选项在整个项目的编译和链接过程中保持一致包括任何库或外部模块。如果链接到了已编译的库也需要确保这些库是在不使用 FPU 支持的情况下编译的。 最后在Makefile 中的配置如下 #LDS_INC -L $(LIB_PATH)/lib/gcc/arm-none-eabi/10.2.1/thumb/v8-m.mainfp/hard LDS_INC -L $(LIB_PATH)/lib/gcc/arm-none-eabi/10.2.1/thumb/v8-m.main/nofp \-L $(LIB_PATH)/arm-none-eabi/lib/thumb/v8-m.main/nofpall: $(TARGET) postbuild$(TARGET): $(OBJS)echo Building target: $$(LD) $(LDS_INC) -T $(LDS) --gc-sections -Map ra4m2.map -o $ $(OBJS) -lc -lm -lgccCortex-M33 的 FPU 功能 ARM Cortex-M33 处理器是 ARMv8-M 架构的一部分可选地包含一个符合 IEEE 754 标准的单精度浮点单元 (FPU)支持所有单精度浮点数据类型的运算。包含 FPU 的 Cortex-M33 可以提高浮点计算的性能适用于需要执行大量浮点计算的应用程序。 Cortex-M33 的 FPU 支持以下特性 编译器可以生成硬件 FPU 指令来完成浮点运算这通常比软件实现更快。FPU 支持单精度32位浮点数的加、减、乘、除运算和其他复杂运算。浮点运算的结果可以直接用于程序流程控制如浮点比较和分支。 如果选择在 Cortex-M33 上使用 FPU 功能需要使用 -mfloat-abihard 或 -mfloat-abisoftfp 编译器选项来启用硬件浮点支持。这些选项会使编译器产生使用 FPU 的代码并链接到相应的浮点库。 Qcortex-m33默认安全状态下如何启动rt-thread os需要配置哪些内容 可以一直在安全状态下运行os吗 A: 要在 Cortex-M33 默认的安全状态下启动 RT-Thread OS需要执行一系列的初始化步骤来配置处理器启动操作系统并确保操作系统及其任务在安全状态下正确运行。 下面是一般需要执行的步骤 初始化硬件 配置系统时钟包括 CPU 时钟、外设时钟等。初始化必要的外设如定时器、串口、中断控制器等。 配置中断向量表 将 RT-Thread 的中断向量表的位置设置到默认的中断向量表寄存器VTOR。 配置堆栈指针 设置 MSP 或 PSP 的值确保为 RT-Thread OS 的中断和任务提供正确的堆栈。 初始化 RT-Thread OS 调用 RT-Thread 提供的初始化函数如 rt_system_scheduler_init 初始化调度器rt_system_timer_init 初始化系统定时器等。 创建任务线程 使用 RT-Thread 提供的 API如 rt_thread_create来创建并初始化操作系统任务。 启动调度器 调用 rt_system_scheduler_start 来启动 RT-Thread 的调度器。 附加系统服务和中断处理 将 RT-Thread 的系统服务和中断处理函数附加到 Cortex-M33 的异常和中断向量。 TrustZone 配置如果使用 TrustZone 如果打算使用 TrustZone你需要正确配置安全属性单元SAU确保内存和外设的安全状态符合 RT-Thread 的要求。在默认安全状态下这一步可能不是必需的。 你可以一直在安全状态下运行 RT-Thread OS。 实际上如果你不需要 TrustZone 提供的安全状态和非安全状态之间的隔离或者不打算在非安全状态下运行任何代码那么你可以简单地将整个系统配置为安全状态并在该状态下运行操作系统。这种情况下你不需要配置任何有关 TrustZone 的特定内容系统将作为一个普通的单状态只有安全状态系统运行。 如果你使用了 TrustZone 并且需要在系统的非安全状态下运行某些代码那么你需要在系统启动时配置 TrustZone 的相关设置并实现从安全状态到非安全状态的切换逻辑。 总之RT-Thread OS 作为一个灵活的实时操作系统能够在 Cortex-M33 处理器的安全状态下运行无论是独立于 TrustZone 特性还是与 TrustZone 安全特性一起使用。具体配置和启动步骤应参考 RT-Thread OS 的文档和 Cortex-M33 的硬件手册。

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

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

相关文章

丝绸之路网站建设策划书外贸行业网站建设

目录 Docker容器服务的注册和发现 1、什么是服务注册与发现? 2、什么是consul consul的部署 1、环境准备 2、部署consul服务器 1)建立 Consul 服务 2)设置代理,在后台启动 consul 服务端 3)查看集群信息 4&a…

某网站seo诊断分析wordpress 增加阅读量

详细教程 | 安装Python编程环境以及使用OpenpyXl操作Excel注意:下列教程为 Windows7 64位;Windows 10有部分步骤有差异,请参考使用!01 下载Python程序安装包首先前往Python官网 www.python.org,进入官网点击 Downloads,然后点击 W…

嘉兴电子网站建设mirages WordPress

数据量单位 位(bit)是计算机中最小的存储单位,每一位可以存储一个二进制码值的0或1。而字节(byte)则通常是由八个位组成的一个存储单元。在计算机中,字节是最小的可寻址单位,这意味着 CPU 在使…

营销型网站欣赏郑州网站建设郑州网站建设

文章目录命令介绍常用选项参考示例(一)显示当前的本地化设置与键盘映射(二)设置系统的本地化字符集环境变量(三)列出本地所有字符集(四)列出所有可用的控制台键盘映射(五…

更新公司网站内容需要苏州招聘网站建设

别做软件开发了,太恶心了。 裁员好几波人,他们的项目就给到剩下的人身上了。 然后工作量翻倍,主要是遗留的项目也一堆bug.人员流动性太大。 项目的产品也换人了。开发也换了。没有人熟悉这个项目了。 现状就是,先看页面&#xff…

.net建网站的优势建网站公司那个比较好

1.题目描述 给定两个由小写字母组成的字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。 示例 1: 输入: s1 “abc”, s2 “bca” 输出: true 示例 2: 输入: s1 “abc”,…

北京网站建设是什么意思wordpress注册密码插件

前言 近期我正在开发一个前后端分离项目,使用了Spring Boot 和 Vue2,借助了国内优秀的框架 jeecg,前端UI库则选择了 ant-design-vue。在项目中,需要实现文件上传功能,同时还要能够在线预览和下载图片和PDF文件&#x…

常州建网站公司吴中区网站建设技术

目录 使用SQLmap Tamper脚本 1. 选择合适的Tamper脚本 2. 在命令行中使用Tamper脚本 3. 组合使用Tamper脚本 4. 注意和考虑 黑客零基础入门学习路线&规划 网络安全学习路线&学习资源 SQLmap是一款强大的自动化SQL注入和数据库取证工具。它用于检测和利用SQL注入漏…

自学免费网站建设内蒙古建设协会网站

在上一篇文章中,我们继续在DynamoDB数据库上插入数据。 在本教程中,我们将对DynamoDB表发出一些基本查询。 主要规则是每个查询都必须使用哈希键。 查询的最简单形式是仅使用哈希键。 我们将在此表上查询Users表。 结果只有一个,因此在迭代…

精品课程教学网站网站封装成app可以做热更新

使用split()方法 这可能是最常见的字符串分割方法,它使用指定的分隔符将字符串拆分为子字符串,并返回一个数组。例如: const str Hello World; const arr str.split( );console.log(arr); // [Hello, World]使用substring()方法 此方法从…

淘宝网站图片维护怎么做实现微信绑定登录网站

Azure Show大家好,欢迎来到Azure Show第八期,好久不见!因为工作的原因有两个月没和大家见面,但12月Azure Show回归,会有更多大家感兴趣的话题,也有更多嘉宾与大家见面。除了这一期,在12月我们还…

湖南网站建设oqiandu德国购物网站大全

一、问题 当虚拟机非正常关机后导致集群宕机,重启虚拟机后出现的问题: 会发现kubectl get pod -A 一直看到所有的pod 都起不来,状态都不是Running 二、实验环境 测试环境:三台虚拟机 2C 2G 100G 注意:我这里用的是测…

江西景德镇建设厅网站广州响应式网站制作

文章目录 一、简介(1)U8g2(2)U8x8 二、配置要求三、移植步骤(1)文件准备和添加(2)实现回调接口(I2C的读写函数)①软件I2C②硬件I2C (3)功能裁剪① u8g2_d_set…

哪家企业做网站还有人用asp做网站吗

77. 组合 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n 4, k 2 输出: [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ] 示例 2: 输入:…

域名代备案南阳网站seo顾问

1.图片向下撑大3像素问题在一个盒子里面放一张图片,默认情况下,图片会向下撑大3像素,有以下几种解决方法:1.1给图片添加display:block;1.2给图片添加float:left;1.3 给图片添加vertical-align:middle;1.4 给…

湖南对外建设集团网站温州网站建设联系电话

q7goodies事例在Data Geekery ,我们喜欢Java。 而且,由于我们真的很喜欢jOOQ的流畅的API和查询DSL ,我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 我们已经写了一些关于Java 8好东西的博客 ,现在我们觉得是时候开始一个…

网页和网站设计如何做网站跳转

一、模块题目 二、原理简述 (转载,删改) 1、什么是中断 你正在追电视剧《神雕侠侣》,正看得入迷的时候,电话响了,你暂停电视剧,去接电话,在接电话的过程中,门铃又响了,你暂时放下电话,去把门打开。如果追电视剧是在执行主程序,那么电话就是中断源,电话铃响了就是中…

响应式网站设计的现状小说手机网站建设

递归神经网络(Recursive Neural Networks)是一种特殊的神经网络,它们通过处理具有树形结构的数据来捕获数据的深层次关系,尤其是在自然语言处理和计算机视觉中的一些应用,如语法分析和场景理解。 1. 理解基本概念和背…

网站被攻击空间关了怎么办中国空间站视频

在当今数字化时代,信息技术中心(IT Center)扮演着至关重要的角色,它不仅是企业的技术支撑,更是推动数字化转型的引擎。为了更好地应对日益复杂的业务需求和技术挑战,许多企业开始探索一体化系统架构&#x…

玉雕网站建设洮南做网站

YML配置文件及加载自定义配置文件的几种方式 ★ YAML配置文件 其实本质和.properties文件的是一样的。 Spring Boot默认使用SnakeYml工具来处理YAML配置文件,SnakeYml工具默认就会被spring-boot-starter导入,因此无需开发者做任何额外配置。 YAML本质…