- 博客(8)
- 收藏
- 关注
原创 Hardfault调试
在MDK中,可以通过View -> Disassembly Window,然后右击,选择Show Disassembly at address...,然后输入上面找到的地址回车就可以跳转到相应的代码处了。由于HardFault属于异常,所以出现HardFault后,LR的值一定是0xFFFFFFFx,这样就可以根据其值,判断程序进入这个异常之前的状态了;因为在进入异常或中断前,MCU会将LR中的返回地址入栈,所以找到栈顶,就能找到这个返回地址了;先在出错误的地方打断点,让程序的状态固定下来;
2026-07-21 10:26:44
336
转载 嵌入式代码规范
1. 变量 / 函数:小写字母 + 下划线(snake_case)用完整单词组合,避免生僻缩写(行业通用缩写如uart、spi、buf可使用),确保同一项目风格绝对统一。2. 常量 / 宏定义:全大写 + 下划线(UPPER_CASE)强调 “不可修改”,区分于变量,宏定义需包含完整含义。3. 结构体 / 枚举:大写开头 + 驼峰(PascalCase)明确为 “自定义类型”,内部成员仍用 snake_case。4. 特殊标记:用前缀辅助理解(非强制,推荐小型项目使用)
2026-07-16 16:23:31
23
原创 canopennode 心跳报文与NMT
NMT管理涉及到一个CANopen节点从上电开始的6 种状态,包括:1、):节点上电后对功能部件包括CAN控制器进行初始化;2、位():节点中的应用程序复位(开始),比如开关量输出、模拟量输出的初始值;3、):节点中的CANopen通讯复位(开始),从这个时刻起,此节点就可以进行CANopen通讯了。4、):节点的CANopen通讯处于操作就绪状态,此时此节点不能进行PDO通信,而可以进行SDO进行参数配置和NMT网络管理的操作;5、):节点收到。
2026-07-16 10:20:20
331
转载 canfestival
最有价值的,是里面有正确可以工作版本的文件提供下载,避免入手的时候,各种失败问题。这个是个不完全转载,仅仅转一下目录,值得广大嵌入式攻城狮去观摩一圈。
2026-07-08 15:32:27
12
原创 IAP升级运行不到NVIC_SystemReset()问题
使用cubemx生成的模板实现IAP升级时失败,调试发现NVIC_SystemReset()被优化掉,将优化等级调到level0后才能运行这条函数。位触发复位,但在触发到实际复位之间存在延迟。如果此期间有中断发生,可能导致复位失败。另外,NVIC_SystemReset()关闭所有中断,确保复位过程不被打断。
2026-07-07 15:50:28
417
原创 解决错误“ #error “include FreeRTOS.h“ must appear in source files before “include queue.h““
注意有没有添加上面选择的头文件,并且顺序不能改变。调用消息队列函数时遇到这个问题,解决方法如下。
2026-07-03 11:15:13
31
转载 IAP升级方案
方案适用场景Flash需求安全性开发复杂度方案一简单应用低⭐⭐⭐方案二一般产品中⭐⭐⭐⭐⭐方案三高可靠性产品高⭐⭐⭐⭐⭐⭐⭐⭐方案四成本敏感产品中⭐⭐⭐⭐⭐⭐方案五高端产品高⭐⭐⭐⭐⭐⭐⭐⭐。
2026-07-01 14:45:26
21
原创 STM32F10X闪存编程(1)基础知识
手册里也有提到内嵌的闪存存储器可以用于在线编程(ICP)或在程序中编程(IAP)烧写。当然,对于容量不大的芯片,通常使用外部存储器来实现IAP升级功能。从底层物理结构来看,STM32 的 Flash 模块通常基于 NOR Flash 技术,这种结构支持快速的随机读取操作,非常适合程序的直接执行。。如果希望将某位恢复为 1,就必须先执行,且擦除操作必须以“页(Page)”或“扇区(Sector)”为单位进行。这种按扇区擦除的机制决定了 Flash 的读写粒度。
2026-06-30 16:04:47
526
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅