Skip to content

常见问题 工具链 编译 调试 嵌入式

liuzikai edited this page Jul 13, 2021 · 2 revisions

目录

为什么选用这一套工具链

  • 跨平台:支持 Win、Mac、Ubuntu 等
  • 优秀的 IDE:JetBrain CLion,迭代更新快,学生免费
  • 流畅体验:一键编译、烧录,支持 GDB
  • 便捷的多编译目标支持,便于单元测试

工具链配置错误/编译错误

打开工程时/ Reload CMake Project 时提示 "compiler is not able to compile a simple test program"

一般是工具链配置错误,确认是否选用了合适的 Toolchain。例如上图中使用的 C 编译器为 GNU GCC,并不是我们所需要的 ARM 工具链中的 GCC。

"Undefined reference"

  • 检查是否有文件没有包含在 target 中,没有被编译
  • 检查是否有 class 的 static 变量没有在 cpp 中定义

"... has not been defined for selected board"

开发板选择错误,参考 CMake 进阶配置配置开发板选项(原来默认不配置的开发板是 2017,后来改成了默认 2018 A)。

GPIO*_*** 红字,或编译时提示 was not declared

首先确认开发板是否选择错误。GPIO 针脚配置在dev/board/rm_board_2018_a(2017)/board.h里面,检查是否配置好、改好名字。

异常报错,检查对应文件没有问题,或者是编译了不该编译的文件

检查 CMakeLists.txt,是否将文件误加进某些 target 里面导致了误编译。例如:

这里应该是在使用 CLion 创建 main_hero.cpp 的时候误加进了 ChibiOS_OBJ 这个 target 中了。在添加文件时 CLion 会询问是否要添加到 target 中 :

如无必要,不必勾选。

编译前期正常,最后一步出现奇怪的错误,例如:

考虑代码本身的问题,例如是否引用了奇怪的库(如 C++ 的 STL 等,不宜使用在嵌入式程序中)。根据错误信息中出现的文件名等推测排查。

烧录问题

"OpenOCD init failed"

IMAGE

  • 确认接线正确
  • 确认开发板正常供电
  • 拔掉 ST-Link 与开发板的连接,重新拔插 ST-Link 与电脑的连接。可能和开发板反向供电 ST-Link 有关。
  • 如果确认以上都没有问题,有一个罕见的可能性:STM32 主控锁死了,尝试:按住板上黑色复位键 - Run 烧录 - 等到 OpenOCD 中间的时候 - 迅速松开复位键 - 程序烧录成功。以后程序就可以正常烧录了。
  • 如果以上措施均无效,可能是板子坏了... 可以拿下海绵保护层,看看主控是否异常发热之类的

程序烧进去了,但运行的还是原来的程序

Build - Rebuild (Windows 可能在别的展开菜单中)

这个问题还满频繁的,可能跟 CMake 配置有关...尚不明确...

主控板坏了...

首先排除主控锁死的问题,使用 OpenOCD init failed 所述方法尝试边复位边烧录。

如果确认主控板坏了,可能的原因是反接、短路、电压过高,或者是正常使用损耗。如果是正常损耗,问题不大。但如果突然烧坏了好几块板,那可能就有问题了,要仔细排查。

运行

出现 CAN Error

CAN 总线上有一个设备反接、短路等,或者信息量超过带宽,都可能出现 CAN Error。尝试逐个拔掉设备确定问题,如果出现拔掉任何一个/若干个设备都能解决问题,考虑是超过带宽了,上另一个 CAN。

Clone this wiki locally