引言

我们做单片机开发,用得比较多的stm32f1xx,stm32f4xx等等,基本上都是用keil(或者说称为mdk)这个集成开发环境IDE比较多,插上调试器,连接板子,编译,下载,调试,方便得很。大家有没有想过一个问题,如果没有IDE了,我们还能做单片机开发吗???大家难道就不想知道IDE到底干了啥吗???

IDE运行过程

一个现代IDE,大致可以分为如下几个功能:

  1. 代码编码:IDE使用的是QScitinal这样的编辑器库
  2. 代码智能提示:后台调用clang软件
  3. 代码语法错误动态检测:后台调用gcc或者clang都可以
  4. 工程源码组织:IDE使用的是makefile,后台调用make软件
  5. 编译:IDE后台调用gcc编译器
  6. 连接硬件调试器:IDE通过后台软件OpenOCD连接调试器和板子
  7. 下载:IDE给OpenOCD发命令
  8. 调试:IDE后台调用gdb,给gdb发命令,gdb再给OpenOCD发命令,OpenOCD再指挥调试器,控制板子。实现单步执行,查看变量值,寄存器等。

我们可以发现,IDE所做的事,都是由已有软件来完成,其实就是组织这些已有的软件,让他们协同工作起来,方便了我们开发者使用嘛。所以嘛,IDE叫做集成开发环境。看完后,是不是觉得自己也能做一个IDE啦,哈哈哈~,我最近就在做这个事情,如果有志同道合的兴趣,可以交流讨论喔 qq:2488890051


这里看一下市面上非常常见的基于eclipse改造的嵌入式IDE都有哪些基本功能:

eclipse是一个支持插件的通用型IDE,啥程序都能开发,java,c/c++,网站开发,html等,无所不能。当然官方就为其开发了一个嵌入式开发的插件,来实现嵌入式开发功能,插件名字:Eclipse Embedded C/C++ Development Tools,Eclipse Embedded CDT | Eclipse Embedded CDT (C/C++ Development Tools)™

然后,其中包含如下几个exe,就实现了嵌入式开发功能了。

很明显,需要make进行makefile执行(其实windows系统也有个叫mingw32-make.exe,我试了也行的),arm的gcc编译器,OpenOCD用于连接板子的硬件调试器,QEMU实现板子的纯软件模拟仿真功能。也就是说,自己搞嵌入式IDE(不是基于eclipse),也至少支持这几个exe即可,事实上我就是这样干的。


注意:OpenOCD只是通用的连接硬件调试器的工具而已,其实针对每一款调试器人家官方也都给出了对应的连接这个调试器的工具,比如st的stlink,就有stlink这个开源库(驱动单片机硬件调试器的一些开源库总结(包含stlink调试器)_标biao的博客-CSDN博客_stlink 开源),而且我在rtthread studio的使用中,发现它还有SDK包文件夹有

而关于,jlink调试器,也有自己的:

大家可以去研究研究。


这里重点介绍 OpenOCD 是什么

OpenOCD 是什么

从上面IDE的步骤中可以看出,OpenOCD 就是一个连通gdb和硬件调试器的工具,linux,macos,windows都可用。OpenOCD 支持大量的硬件调试器,常见的比如stm32常用的stlink,jlink调试器等。OpenOCD是一个运行于PC上的开源调试软件,最初是由Dominic Rath同学还在大学期间发起的(2005年)项目。OpenOCD旨在提供针对嵌入式设备的调试、系统编程和边界扫描功能。

这里演示如何在windows系统上利用 OpenOCD 实现正点原子stm32f407单片机开发板的调试。

我们可以下载 OpenOCD 的源代码,自己编译成exe。还可以下载编译好的exe,我们选这个。

1. 下载OpenOCD

https://gnutoolchains.com/arm-eabi/openocd/ 下载最新版即可。解压即可,不用安装。然后把这个bin文件夹路径添加到系统环境变量即可。

文件夹内容介绍:

bin文件夹:openOCD.exe等可执行文件

drivers文件夹:常见的硬件调试器的驱动,这里要注意,硬件调试器第一步是需要安装驱动的,否则设备管理器识别不到的,那当然OpenOCD就压根没法驱动它了。硬件调试器插上电脑usb口,如果驱动安装的了,设备管理器会显示设备的,否则会有黄色感叹号。我这个就是驱动之前已经按照过了的。

 share文件夹:OpenOCD连接硬件调试器的一些脚本协议文件,不同调试器,不同板子,选择对应的即可。

2. 运行OpenOCD

由于是gdb给OpenOCD发调试命令的,先确保自己安装了 arm-none-eabi-gcc 编译器工具链(而且把bin文件夹路径添加到系统环境变量),里面会有arm-none-eabi-gdb.exe。

  • 打开powershell命令行窗口(因为cmd命令行窗口不太好用)输入 arm-none-eabi-gdb -v,有版本信息打印出来,说明gdb环境成功了。
  • 继续输入 openocd.exe,如果显示如下则说明 OpenOCD 环境也成功了。

  • 继续输入 
    openocd -f C:\Users\86132\Downloads\openocd-20211118\OpenOCD-20211118-0.11.0\share\openocd\scripts\interface\stlink.cfg -f C:\Users\86132\Downloads\openocd-20211118\OpenOCD-20211118-0.11.0\share\openocd\scripts\board\stm32f4discovery.cfg

    意思是
    通过 -f 选项 给 OpenOCD 指定硬件调试器的协议文件(虽然我的stlink调试器是v2版本,但是为什么这里命令是stlink.cfg文件,而不是stlink-v2.cfg呢,因为我打开stlink-v2.cfg看了,说已经摒弃了,都采用stlink.cfg文件了),

    第二个是板子信息(只要单片机名字相同就行了):

    我的是stm32f407xx板子,所以用的 scripts\board\stm32f4discovery.cfg
    如果是stm32f03zet6,就用 scripts\target\stm32f1x.cfg

    出现下面界面,说明 openocd 连结 硬件调试器stlink成功啦。正在等待gdb通过3333端口来连接它。

  • 此时再打开一个 powershell命令行窗口,输入 
     arm-none-eabi-gdb C:\Users\86132\Desktop\file\stm32f407\beep_openOCD\OBJ\BEEP.axf

    意思是gdb调试目标文件为 BEEP.axf,这个文件是我用keil编译生成的,网上有人生成的是xx.elf文件,都是一样的,都是包含了调试信息的目标文件。
  • 输入 target remote localhost:3333
    也就是连接刚刚 openocd那边等待的那个端口。如下,说明程序已经通过成功下载到板子了,运行到delay_xms函数里了

3. 调试板子程序

OpenOCD中,gdb常见的输入命令:

  • q:退出gdb调试环境
  • n:下一步,会跳过函数
  • finish:跳出当前函数
  • ctrl+c:在OpenOCD命令行窗口,这个快捷键可以结束OpenOCD调试
  • 还有更多,查看相关文档

关于如何通过OpenOCD把程序下载到板子上,还没有研究,但是跟调试时候可能不一样了,猜测是不需要gdb了,直接命令行给OpenOCD发下载目标文件的命令即可。

参考文章:

使用GDB(二):调试程序常用命令_七妹要奈斯的博客-CSDN博客_gdb常用调试命令

gdb调试常用命令_Zbb的笔记的博客-CSDN博客_gdb调试命令大全

利用openocd 在windows环境下GDB调试(调试器 stlinkv2)STM32_春夜喜小雨的博客-CSDN博客_openocd windows

OpenOCD用户指南 - whoisliang的个人空间 - OSCHINA - 中文开源技术交流社区

OpenOCD的概念,安装和使用 - 走看看

跟我一起学OpenOCD(一) - 知乎

嵌入式IDE原理 OpenOCD介绍 以及stlink如何连接stm32板子相关推荐

  1. 【嵌入式】嵌入式硬软件开发介绍(个人看法)

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录 前言 一.嵌入式的定义 二.嵌入式硬件开发 1.要求掌握的入门的能力 (1 ...

  2. 黑马程序员————高新技术————eclipse及IDE开发工具介绍

    ----------------------ASP.Net+Android+IOS开发----------------------期待与您交流! eclipse及IDE开发工具介绍   Eclipse ...

  3. RISC-V嵌入式开发准备篇2:嵌入式开发的特点介绍

    原文出处:https://mp.weixin.qq.com/s/ljYZwMj3JaPN29dTAXA3bQ 随着国内第一本RISC-V中文书籍<手把手教你设计CPU--RISC-V处理器篇&g ...

  4. 《嵌入式系统原理与接口技术》——嵌入式系统接口应用基础

    本文为我负责编写的电子工业出版社出版的<嵌入式系统原理与接口技术>一书第七章部分,这里整理的仍然是修改稿,供需要的同学参考,本书为普通高等教育"十二五"规划教材,电子信 ...

  5. 嵌入式系统原理与接口技术

    <嵌入式系统原理与接口技术>--嵌入式系统接口应用基础 本文为我负责编写的电子工业出版社出版的<嵌入式系统原理与接口技术>一书第七章部分,这里整理的仍然是修改稿,供需要的同学参 ...

  6. Java应用诊断工具】「BTrace」基本概念和原理的介绍(1)

    Java应用诊断工具]「BTrace」基本概念和原理的介绍(1) 系列文章 「BTrace」基本概念和初步介绍(1) 「BTrace」安装介绍和使用原理(2)- 未完成 「BTrace」实战代码进行调 ...

  7. 驰骋工作流引擎-嵌入式表单的介绍

    嵌入式表单的介绍 关键词: 工作流表单方案  表单自定义 java工作流引擎  工作流设计 定义概述:一个已经做好的表单需要绑定到节点上. 自定义表单工作模式:流程控制按钮区域是ccBPM来完成,表单 ...

  8. shell编程入门 linux解释器原理,Shell编程入门Linux解释器原理详细介绍 使用Shell进行工作的人们对.doc...

    Shell编程入门Linux解释器原理详细介绍 使用Shell进行工作的人们对 Shell编程入门:Linux解释器原理详细介绍使用Shell进行工作的人们对Unix/Linux下的Shell编程都很 ...

  9. kinect v1原理_Kinect原理及介绍.ppt

    Kinect原理及介绍 三角化:激光+摄像头,双目,投影仪+摄像头等等 depth from focus技术 coded aperture技术 深度摄像头所采用的TOF(time of fight)技 ...

最新文章

  1. php高德地图计算距离接口,路径长度-距离/面积计算-示例中心-JS API 示例 | 高德地图API...
  2. for循环如果先--_如果再写for循环,我就锤自己!
  3. 国王游戏(贪心 + 高精度乘法 + 高精度除法 + 高精度比较大小)
  4. c语言标识符附录,附录AC语言运算符表.PDF
  5. 和吴昊一起玩推理 Round 10 (第一季完结篇) —— 终极推理 —— L与夜神月的对话...
  6. 【优化覆盖】基于matlab改进的杂草算法求解无线传感器覆盖优化问题【含Matlab源码 046期】
  7. windows下cmd下载文件
  8. 【AI大咖】扒一下低调的Yoshua Bengio大神
  9. 一文掌握数仓中auto analyze的使用
  10. 第14章-1~3 法兰接头预紧力密封接触分析周期对称 (介绍、局部柱坐标系建立、周期对称的设置) Beta选项打开、 cyclic region、symmetry
  11. 三维扫描、三维建模在数字展厅中的应用
  12. 计算机大纲中的应用,计算机的应用论文提纲模板范本 计算机的应用论文大纲怎么写...
  13. 安科瑞配电列头柜产品XXX数据中心案例分享
  14. 【均匀分布和正态分布】
  15. 【2021考研】政治做题策略
  16. Android 网络请求、网络状态及各种权限判断
  17. 【汇正财经】大盘震荡收涨
  18. 2022年北京产品经理认证招生简章(NPDP)
  19. ExcelVBA 之Select Case
  20. 关于使用LoadImage时的一个小错误(转)

热门文章

  1. 非计算机专业跨计算机,非计算机专业跨考考研计算机难度如何?
  2. Sallen-Key二阶低通滤波器——设计问题浅析
  3. 管理信息系统 第七版 第10章 课后习题
  4. ajax pro,关于AjaxPro的用法
  5. 微软pop3服务器,真算孤陋寡闻。。微软旗下的邮箱都支持POP3收发邮件了
  6. 聊天软件,谁好谁坏?
  7. 什么才是AI公司的商业模式?
  8. c++ 对注册表启动项写入
  9. 网站外链建设入门指南
  10. java方法调用原则,Java 中,在调用重载方法时,原则是(   )。_学小易找答案...