硬件中断--DEBUG系列

问题描述:

  在线调试时,全速运行,程序进入硬件中断,查看堆栈窗口,发现是从A函数进去的。但是A函数应该没有问题的;

再次重复,发现是从B函数进去的,但是B函数之前运行起来也没有问题的,而且没有传入参数;

再次重复,发现是从C函数进去的,C函数似乎也没问题啊

。。。。。。

同一个程序,没做任何改动,每次都会进入硬件中断,进入硬件中断的位置也是不固定的。

 

可能的解决方法:

如果你排除了内存泄露、传入参数会随机变化、堆栈溢出、、、、、、、、等等高大上的解决方案;最后还是发现问题没有任何改善;

 

一定要检查硬件,你的调试器是不是该换新的了??????

转载于:https://www.cnblogs.com/Junbo20141201/p/7099458.html

### Cortex-M7 调试技术和解决方案 #### 1. Cortex-M7 的特性概述 Cortex-M7 是 ARM Cortex-M 系列中性能较高的核心之一,专为需要高性能计算的应用场景设计。它支持 DSP 扩展指令集和可选的单精度/双精度浮点单元 (FPU),使其适用于复杂的信号处理任务[^1]。 #### 2. 常见调试工具和技术 为了有效调试基于 Cortex-M7 的嵌入式系统,可以采用以下方法: - **硬件调试接口**: 使用 JTAG 或 SWD 接口连接目标板与主机端调试器。这些接口允许开发者暂停程序执行、设置断点并读取寄存器状态。 - **软件调试环境**: MDK (Keil Microcontroller Development Kit) 和 IAR Embedded Workbench 是常用的开发平台,它们提供了强大的调试功能,例如实时变量监控和函数调用跟踪[^3]。 - **操作系统感知调试**: 如果项目涉及 RTOS,则可以选择支持多线程视图的调试器来观察各个任务的状态及其资源占用情况。 - **串行外设接口(SPI)/UART日志记录**: 当无法通过传统方式获取足够的信息时,可以通过 SPI 或 UART 发送诊断消息到外部设备进行分析。 #### 3. 特定问题解决策略 以下是针对某些典型错误情景提出的建议方案: - **堆栈溢出检测** - 配置 Linker Script 中 Stack Size 参数合理分配内存区域给不同类型的 stacks(main, process etc.)。 - 利用 HardFault_Handler() 函数捕获异常事件,并打印相关上下文数据以便后续排查原因。 - **定时器中断丢失** - 检查 NVIC Priority Registers 设置是否恰当;过高优先级可能导致其他重要服务得不到及时响应。 - 确认 PendSV Handler 是否被正确实现用于调度下一个就绪的任务。 - **Flash 编程失败** - 如引用提到 RAM 大小需满足特定需求才能顺利完成内置 flash algorithm 的加载过程 [^3] 。因此,在实际操作前应仔细核对当前 SDRAM 容量能否容纳所需临时缓冲区。 #### 4. 示例代码片段展示如何启用 FPU 并验证其工作正常与否 下面给出一段简单的测试代码用来确认 Cortex-M7 上是否存在可用的 Floating Point Unit(FPU): ```c #include <stdio.h> void test_fpu(void){ float a = 1.5; float b = 2.0; printf("Result:%f\n",a*b); } int main(){ __set_FPSCR(0); // Reset all bits in FP Status Control Register. SCB->CPACR |= ((3UL << 10*2)|(3UL<<11*2)); // Enable CP10 & CP11 Access Rights For Full Privilege Mode Only. test_fpu(); } ``` 上述例子展示了怎样激活 Coprocessor Access Control register 来授予访问权限至 VFPv3 D16 协处理器实例化于 Cortex-M7 内部结构之中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值