常见的嵌入式 Shell 方案: FinSh msh:RT-Thread 的 TingSH Letter shell cmd parser nr micro shell 还有个于振南的 ZN'Shell,由 FinSh 改进过来。 MyShell ZN'Shell 改个名字,改个 Logo 不带参数
常用 SPI 接口 Flash 芯片厂商: 华邦 WinBond(国产) 兆易创新 GigaDevice(国产) 旺宏 MXIC(国产) 镁光 Micron 美国微芯 MicroChip
Bootloader:启动程序 OTA:网络升级,是 Bootloader 的一个重要功能。 Flash 分区 B 区:存放 Bootloader 程序 A 区:存放主程序 B 区要在A区前面,因为B区的大小是固定的,而A区的程序是变化的,如果A区在前,可能会覆盖掉B区的程序,造成Bootloade
手工打断点 修改bin文件,手动打断点。 适合场景: 没有调试器 代码稍微改动现象就不一样,无法定位原因。 想查看程序任意位置的状态 不敢修改代码,怕破坏重要的数据 生成 bin 文件指令: fromelf --bin --output="$L@L.bin" "#L" 使用 STM32 ST-LIN
任务切换时内核干的事情: 保存任务A现场 恢复任务B的现场 任务的现场保存在任务的栈中 无论是FreeRTOS还是RT-Thead,任务控制块中都有一个成员指向任务的栈顶。
沁恒RISC-V芯片RTT中断嵌套Bug 全局变量没有加 volatile 的 bug 首先判断程序有没有跑飞, 跑飞就是程序已经脱离了main函数,到一个错误的地方运行了。 程序对应汇编
栈回溯就是发生Hardfault异常时硬件会自动保存栈帧, 栈回溯的步骤: (1)第一步 根据那个sp地址,在内存中可以找到 PC 在.dis中搜索这个地址,如果找到了,那就找到了出错的位置。 (2)第二步 如果这个PC在dis中找不到,说明被破坏了;还有一种虽然能找到,但是是凑巧的,pc被破坏了,
使用这个函数来模拟数组越界: void buf_overflow(int n, char val) { volatile char buf[5]; volatile int a = 0x55; buf[0] = 0x5a; a++; buf[n] = val;
Cortex-M3/4 关键特点: 哈佛架构 使用 NVIC 管理中断 32 位寻址,支持 4GB 空间。 Thumb-16/32 指令 寄存器 通用寄存器R0-R12 R13:SP R14:LR R15:PC xPSR 状态寄存器
程序编译通过后才能调试,点击调试后会自动下载程序。 不是万能的,就是它会“忽略”标志位啥,我也没弄清楚,调试上能完整执行,但是真实硬件上还是卡死的。 进入/退出调试模式 Keil断点调试技巧-CSDN博客 (1)首先需要连接 ST-Link
首先 STM32 要支持,F4 以上部分型号支持。 CCM-SRAM 通过专用的总线与 Cortex-M4 内核直接相连,绕过了 AHB 总线矩阵。这意味着它可以实现零等待周期的访问,提供最高的访问速度和确定性。 因此 DMA 无法访CCM-SRAM 只能被 Cortex-M4 内核访问,不能被 D
ESP32开发教程(0)— 搭建开发环境(Ubuntu图文版)-阿里云开发者社区 Ubuntu 编译环境搭建 (1)首先升级默认的 Python3 (2)安装 Git (3)安装CMake (3)下载 ESP-IDF git clone https://gitee.com/EspressifSyst