7 bit

调试工具:Shell 控制台

常见的嵌入式 Shell 方案: FinSh msh:RT-Thread 的 TingSH Letter shell cmd parser nr micro shell 还有个于振南的 ZN'Shell,由 FinSh 改进过来。 MyShell ZN'Shell 改个名字,改个 Logo 不带参数

没志青年 没志青年 发布于 2026-01-06

单片机项目架构

越靠近底层越具象,越靠近上层越抽象。 中间层,下层归一化,为上层提供标准。 软件解耦 软件耦合:多个模块(功能)之间存在紧密的互相依赖关系。 说白了就是:我们在写程序A的时候,总要去顾虑程序B,改动了A,就可能会影响B的正常工作。在这种情况下,你写的程序,最终会一团乱麻,牵一发而动全身。代码极为脆弱

没志青年 没志青年 发布于 2026-01-06

单片机联网方案

MAC:数据链路层 PHY:物理层 LWIP:网络层/传输层 HTTP / MQTT / FTP:应用层 以太网 有 MAC 外设:外接 PHY + 移植 LWIP 协议栈 无 MAC 外设:外接自带协议栈解析的芯片,如 W5500、CH394 以太网转 SPI 有 MAC + PHY:移植 LWI

没志青年 没志青年 发布于 2026-01-06

日志记录工具 EasyLog

项目调试工具:Shell 控制台

没志青年 没志青年 发布于 2026-01-05

SFUD 串行 Flash 通用驱动库

常用 SPI 接口 Flash 芯片厂商: 华邦 WinBond(国产) 兆易创新 GigaDevice(国产) 旺宏 MXIC(国产) 镁光 Micron 美国微芯 MicroChip

没志青年 没志青年 发布于 2026-01-05

移植 Fatfs 文件系统

GD32 移植过程 不实现 retry.times 函数运行的时候会报错。 下载:FatFs - Archives <

没志青年 没志青年 发布于 2025-12-03

Bootloader[01] 基础概念

Bootloader:启动程序 OTA:网络升级,是 Bootloader 的一个重要功能。 Flash 分区 B 区:存放 Bootloader 程序 A 区:存放主程序 B 区要在A区前面,因为B区的大小是固定的,而A区的程序是变化的,如果A区在前,可能会覆盖掉B区的程序,造成Bootloade

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

调试技巧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

Cortex-M MCU - CCMSRAM

首先 STM32 要支持,F4 以上部分型号支持。 CCM-SRAM 通过专用的总线与 Cortex-M4 内核直接相连,绕过了 AHB 总线矩阵。这意味着它可以实现零等待周期的访问,提供最高的访问速度和确定性。 因此 DMA 无法访CCM-SRAM 只能被 Cortex-M4 内核访问,不能被 D

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

STM32 - FPU 开启与验证

开启 验证是否开启 Keil 中的主频要改为单片机的实际主频,否则时间不对。

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

STM32 实现 IAP 功能

在官方的例子基础上修改 STSW-STM32067 | Product - 意法半导体STMicroelectronics

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

GD32 DMA

ADC 只有规则组,没有像STM32那样的注入组。 传输后 DMA 计数器自动清零,所以得再次设置。 DMA 事件和中断

没志青年 没志青年 发布于 2025-08-21

GD32 中断系统

Cortex-M23 和 Cortex-M0 一样使用 NVIC,没有分组的概念,即没有抢占优先级和响应优先级的概念,只有两位,可配置0 ~3 优先级。 数字越小,优先级越高。 中断号查询:

没志青年 没志青年 发布于 2025-08-21

GD32 时钟系统

GD32 的时钟控制单元叫做 RCU GD32 系统时钟修改和 STM32 不一样,STM32是调用库函数,GD32需要手动改文件。 在 system_xxx.c 文件中,它是使用宏定义来决定时钟的配置,一般都是使用外部晶振和PLL /* select a system clock by uncom

没志青年 没志青年 发布于 2025-08-21
没志青年 没志青年 发布于 2025-08-21

GD32 芯片概述

GD32系列_马浩同学的博客-CSDN博客 【立创·GD32E230C8T6开发板】资料下载中心 | 立创开发板技术文档中心 现在使用的是 GD32E23x,Cortex-M23 内核。 芯片型号 兆易创新 GD32 MCU 产品导航

没志青年 没志青年 发布于 2025-08-21

ESP32 环境配置

ESP32开发教程(0)— 搭建开发环境(Ubuntu图文版)-阿里云开发者社区 Ubuntu 编译环境搭建 (1)首先升级默认的 Python3 (2)安装 Git (3)安装CMake (3)下载 ESP-IDF git clone https://gitee.com/EspressifSyst

没志青年 没志青年 发布于 2025-08-17
上一页 下一页