前面一个帖子介绍了使用eclipse来开发STM32的固件,但有的时候使用Eclipse的GDB调试器会崩溃掉,反复这样造成我们开发的效率降低,信心也会受一打击。

最近接触到的许多源码,就是在linux下编译开发的,源码中显示他们并没有使用任何的IDE。

实际上在Linux中的开源软件,很可能几乎不会使用IDE环境,他们都很“原始”地采用文本的方式进行编写。可能,在Linux环境中,这才叫做原生态。

在此我打算不依赖于Eclipse等IDE工具去开始嵌入式开发,并将这些过程详尽地纪录下来。

主机系统:Ubuntu 12.04 LTS 32bit

交叉编译器:CodeSourcery

目标机:stm32w108

1 启动openocd

我使用的调试器为st-linkV2,与st-linkv2配套的软件在Ubuntu下没有的官方的支持,有爱好者开发了一个st-linkv2的调试服务器。在我这里使用于STM32F407时很不错,但用于我这块新的stm32w芯片时表现出一些问题来,估计是尚未支持到。所以我转而使用openocd(需要0.7版本)这个非常流行也是多数在Linux下做嵌入式开发人员的调试软件。

openocd在启动时需要指定使用哪一个调试接口(stlinkv2),再指定目标的MCU名(stm32w),这些输入每次都是一样的。为了方便,我做了一个sh文件,将启动命令复制进去。这样每次开始调试的时候执行一次这个脚本就可以了。

新建一个start_debug_stm32w108_with_stlinkv2.sh在openocd/share/openocd/scripts下面,然后使用

chmod +x start_debug_stm32w108_with_stlinkv2.sh

让该文件具有执行属性。

start_debug_stm32w108_with_stlinkv2.sh内容

openocd -f interface/stlink-v2.cfg -f target/stm32w108_stlink.cfg -c "init" -c "halt" -c "reset halt"

2 gdb自动执行初始化文件

想要gdb在启动时执行自己当前elf文件夹下的.gdbinit文件,还需要在~文件中有一个.gdbinit文件,里面的内容是:

add-auto-load-safe-path /home/merlin/projects/eclipseCppJuno/stm32w_gpio/Debug/.gdbinit

然后在自己的elf文件目录下面添加另外一个.gdbinit文件,里面写上自己想要在程序启动时的初始化命令即可,如:

target extended localhost:
load
set $pc = Reset_Handler
#break pre_main
break main

含义很明显

先连接到gdb服务器,openocd的正常使用服务器端口为3333(如果使用telnet测试的话是4444端口)

然后load加载程序到flash中

再把pc设置到Reset_Handler,这就是程序的开头(如果没有这个常常飞到不知所云的地方去,下图显示它到了0x08000088地址上了,而我的Reset_Handler是在0x08000199地址的)

最后在main开始的地方加一个断点

之后你应该看到这样的输出了:

使用backtrace命令(缩写bt)可以看到当前运行地址已经在了Reset_Handler上了。

1. 如何查看程序运行到哪一行了

bt命令可以看到当前线程已经运行到何处了

2. 多线程程序(fork分支程序)

info threads用于查看有多个线程在运行

thread x用于将线程切换到x号去

3. 从某函数中跳出来

使用finish命令

4 打印变量的值

打印为10进制数:

(gdb) p realAddress
$4 = 134481884
打印为16进制数:

(gdb) p/x realAddress
$5 = 0x80407dc

5 查看断点与删除断点

使用info breakpoints查看地断点

删除时使用delete n(n为查看地断点时GDB所打印出来的标记)

6 查看某地址上的数据(FLASH或者内存都可以)

x address

在ubuntu纯字符gdb界面下来开发调试嵌入式ARM的更多相关文章

  1. Ubuntu纯字符界面的一些设置

    由于Ubuntu的纯字符界面不支持中文显示,所以进行了一些配置,为了更好的显示 1. 把环境语言配置为英文 在用户目录下的".bashrc"文件的结尾处添加以下内容,然后重新登录 ...

  2. Linux 纯字符界面的玩法

    Linux 纯字符界面的用途 装逼必备 省资源,服务器一般不安装图形界面 图形界面崩溃后紧急救援 进入字符界面的正确方式 目前新的 Linux 发行版基本上都使用 Systemd 作为 init 程序 ...

  3. linux纯字符界面不支持中文

    [2017-01-17] linux纯字符界面不支持中文

  4. Ubuntu下qemu环境搭建vexpress开发平台

    在查找资料过程中,发现自己搭建虚拟的arm环境的话,有一个比较好的软件就是qemu了,当然还有其他的,大家各投所好就好. 接下来说一下qemu环境搭建过程. 其实搭建很简单,作为小白,我还是捣鼓了两三 ...

  5. 在Ubuntu下搭建ASP.NET 5开发环境

    在Ubuntu下搭建ASP.NET 5开发环境 0x00 写在前面的废话 年底这段时间实在太忙了,各种事情都凑在这个时候,没时间去学习自己感兴趣的东西,所以博客也好就没写了.最近工作上有个小功能要做成 ...

  6. 在Ubuntu下配置舒服的Python开发环境

    Ubuntu 提供了一个良好的 Python 开发环境,但如果想使我们的开发效率最大化,还需要进行很多定制化的安装和配置.下面的是我们团队开发人员推荐的一个安装和配置步骤,基于 Ubuntu 12.0 ...

  7. 转[开发环境配置]在Ubuntu下配置舒服的Python开发环境

    在Ubuntu下配置舒服的Python开发环境 Ubuntu 提供了一个良好的 Python 开发环境,但如果想使我们的开发效率最大化,还需要进行很多定制化的安装和配置.下面的是我们团队开发人员推荐的 ...

  8. Ubuntu 12.04 搭建 Eclipse Android 开发环境(转)

    Ubuntu 12.04 搭建 Eclipse Android 开发环境 http://blog.sina.com.cn/s/blog_93dc666c0101b39p.html (2012-09-0 ...

  9. OK335xS Ubuntu 12.04.1 版本 Android 开发环境搭建

    /******************************************************************************************** * OK33 ...

随机推荐

  1. JS列

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU2h1aVRpYW5OYWlMdW8=/font/5a6L5L2T/fontsize/400/fill/I0 ...

  2. Javascript继承之最佳实践

    尊重原创,转载请注明出处:http://blog.csdn.net/zoutongyuan 什么是继承? 继承是面向对象最显著的一个特性.继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和 ...

  3. NSIS:延时启动软件的几个方法及探索

    原文NSIS:延时启动软件的几个方法及探索 有时候,我们想要某软件开机启动,但又不要拖慢开机速度,那么,延时启动技术就显得比较重要了.轻狂在这方面曾经研究过,也实现了自己想要的功能,看看我是怎么做的吧 ...

  4. 解决 TortoiseGit 诡异的 Bad file number 问题(转)

    问题描述 昨天,以及今天(2014-11-29),使用 TortoiseGit 时碰到了一个诡异的问题. 卸载,清理注册表,重装,重启,各种折腾以后,还是不能解决. 但是23.45分一过,突然灵光一闪 ...

  5. React实践

    React实践(一)   该实践取自官方教程:https://github.com/reactjs/react-tutorial 主要是自实现的过程以及一些心得体会 该实践是实现一个评论框. 一个展示 ...

  6. React.js再探(三)

    很多时候,组件实例的外观和行为我们通过props进行定制就可以了.因为任何时候,组件实例的表现只跟 传过来的props属性 相关. 我们称这种为 无状态/ stateless 组件 即它自身是 无记忆 ...

  7. hardware_hp存储映射_方案

    修改虚拟磁盘映射方式 每个刀片独立对应映射存储空间 这样就不会造成数据写入冲突, old new 步奏: 创建过程  lun号码  1-155 之间 第二步奏 最后 指定: 就ok了 2012年12月 ...

  8. hadoop编程小技巧(5)---自己定义输入文件格式类InputFormat

    Hadoop代码測试环境:Hadoop2.4 应用:在对数据须要进行一定条件的过滤和简单处理的时候能够使用自己定义输入文件格式类. Hadoop内置的输入文件格式类有: 1)FileInputForm ...

  9. java传值和通过引用传递

    第一次使用int实验: public class TTEST { private static List<UserEntity> mList = new LinkedList<Use ...

  10. [CLR via C#]1.6 Framework类库~1.9与非托管代码的互操作性

    原文:[CLR via C#]1.6 Framework类库~1.9与非托管代码的互操作性 1.6 Framework类库 1. .NET Framework中包含了Framework类库(Frame ...