7 bit

调试技巧06 - 数据被破坏的调试方法

手工打断点 修改bin文件,手动打断点。 适合场景: 没有调试器 代码稍微改动现象就不一样,无法定位原因。 想查看程序任意位置的状态 不敢修改代码,怕破坏重要的数据 生成 bin 文件指令: fromelf --bin --output="$L@L.bin" "#L" 使用 STM32 ST-LIN

没志青年 没志青年 发布于 2025-10-11

调试技巧07 - RTOS 调试方法

任务切换时内核干的事情: 保存任务A现场 恢复任务B的现场 任务的现场保存在任务的栈中 无论是FreeRTOS还是RT-Thead,任务控制块中都有一个成员指向任务的栈顶。

没志青年 没志青年 发布于 2025-10-10

调试技巧08 - 解决 Bug 示例

沁恒RISC-V芯片RTT中断嵌套Bug 全局变量没有加 volatile 的 bug 首先判断程序有没有跑飞, 跑飞就是程序已经脱离了main函数,到一个错误的地方运行了。 程序对应汇编

没志青年 没志青年 发布于 2025-10-10

调试技巧05 - 脱离调试器的调试方法

脱离调试器,就是不用 Keil coredump

没志青年 没志青年 发布于 2025-10-10

调试技巧03 - 栈回溯

栈回溯就是发生Hardfault异常时硬件会自动保存栈帧, 栈回溯的步骤: (1)第一步 根据那个sp地址,在内存中可以找到 PC 在.dis中搜索这个地址,如果找到了,那就找到了出错的位置。 (2)第二步 如果这个PC在dis中找不到,说明被破坏了;还有一种虽然能找到,但是是凑巧的,pc被破坏了,

没志青年 没志青年 发布于 2025-10-10

调试技巧03 - 局部数组越界导致的问题

使用这个函数来模拟数组越界: void buf_overflow(int n, char val) { volatile char buf[5]; volatile int a = 0x55; buf[0] = 0x5a; a++; buf[n] = val;

没志青年 没志青年 发布于 2025-10-10

调试技巧[02] - Cortex-M 基础概念

Cortex-M3/4 关键特点: 哈佛架构 使用 NVIC 管理中断 32 位寻址,支持 4GB 空间。 Thumb-16/32 指令 寄存器 通用寄存器R0-R12 R13:SP R14:LR R15:PC xPSR 状态寄存器

没志青年 没志青年 发布于 2025-10-10

调试技巧01 - Keil 调试

程序编译通过后才能调试,点击调试后会自动下载程序。 不是万能的,就是它会“忽略”标志位啥,我也没弄清楚,调试上能完整执行,但是真实硬件上还是卡死的。 进入/退出调试模式 Keil断点调试技巧-CSDN博客 (1)首先需要连接 ST-Link

没志青年 没志青年 发布于 2025-09-23