-
Notifications
You must be signed in to change notification settings - Fork 14
常见问题 工具链 编译 调试 嵌入式
liuzikai edited this page Jul 13, 2021
·
2 revisions
- 跨平台:支持 Win、Mac、Ubuntu 等
- 优秀的 IDE:JetBrain CLion,迭代更新快,学生免费
- 流畅体验:一键编译、烧录,支持 GDB
- 便捷的多编译目标支持,便于单元测试
一般是工具链配置错误,确认是否选用了合适的 Toolchain。例如上图中使用的 C 编译器为 GNU GCC,并不是我们所需要的 ARM 工具链中的 GCC。
- 检查是否有文件没有包含在 target 中,没有被编译
- 检查是否有 class 的 static 变量没有在 cpp 中定义
开发板选择错误,参考 CMake 进阶配置配置开发板选项(原来默认不配置的开发板是 2017,后来改成了默认 2018 A)。
首先确认开发板是否选择错误。GPIO 针脚配置在dev/board/rm_board_2018_a(2017)/board.h
里面,检查是否配置好、改好名字。
检查 CMakeLists.txt,是否将文件误加进某些 target 里面导致了误编译。例如:
这里应该是在使用 CLion 创建 main_hero.cpp 的时候误加进了 ChibiOS_OBJ 这个 target 中了。在添加文件时 CLion 会询问是否要添加到 target 中 :
如无必要,不必勾选。
考虑代码本身的问题,例如是否引用了奇怪的库(如 C++ 的 STL 等,不宜使用在嵌入式程序中)。根据错误信息中出现的文件名等推测排查。
- 确认接线正确
- 确认开发板正常供电
- 拔掉 ST-Link 与开发板的连接,重新拔插 ST-Link 与电脑的连接。可能和开发板反向供电 ST-Link 有关。
- 如果确认以上都没有问题,有一个罕见的可能性:STM32 主控锁死了,尝试:按住板上黑色复位键 - Run 烧录 - 等到 OpenOCD 中间的时候 - 迅速松开复位键 - 程序烧录成功。以后程序就可以正常烧录了。
- 如果以上措施均无效,可能是板子坏了... 可以拿下海绵保护层,看看主控是否异常发热之类的
Build - Rebuild (Windows 可能在别的展开菜单中)
这个问题还满频繁的,可能跟 CMake 配置有关...尚不明确...
首先排除主控锁死的问题,使用 OpenOCD init failed 所述方法尝试边复位边烧录。
如果确认主控板坏了,可能的原因是反接、短路、电压过高,或者是正常使用损耗。如果是正常损耗,问题不大。但如果突然烧坏了好几块板,那可能就有问题了,要仔细排查。
CAN 总线上有一个设备反接、短路等,或者信息量超过带宽,都可能出现 CAN Error。尝试逐个拔掉设备确定问题,如果出现拔掉任何一个/若干个设备都能解决问题,考虑是超过带宽了,上另一个 CAN。
- 基础知识
- 基础配置
- 进阶与参考