前面一个帖子介绍了使用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. HDOJ--4821--String【弦hash】

    联系:http://acm.hdu.edu.cn/showproblem.php?pid=4821 题意:给一个字符串,选m个长度为l的子串组成新的串.要求这m个子串互不同样,问有多少种组合. 字符串 ...

  2. SendRedirect和forward差分

    (1)重定向JSP实现JSP/Servlet跳转到目标资源的方法中,基本的想法是:server目标资源完成URL通过HTTP 在回答本报发client浏览器.收到的浏览器URL更新到地址栏后,而目标资 ...

  3. nginx做反向负载均衡,后端服务器获取真实客户端ip(转)

    首先,在前端nginx上需要做如下配置: location / proxy_set_hearder host                $host; proxy_set_header X-forw ...

  4. Spring Security 入门详解(转)

    1.Spring Security介绍 Spring Security是基于spring的应用程序提供声明式安全保护的安全性框架,它提供了完整的安全性解决方案,能够在web请求级别和方法调用级别 处理 ...

  5. 第4章 建造者模式(Builder Pattern)

    原文 第4章 建造者模式(Builder Pattern) 定义 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式. 实用范围 1 当创建复杂对象 ...

  6. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1)框架搭建 前言:这 ...

  7. 随手记UIKit Dynamics

    以今年的优势WWDC品行,我记得一些明年的元素.一些博客上找到了新的功能没有被记录.认为iOS 8全力以赴.iOS 7该属性不随手记录为时已晚 :) 参考WWDC 2013的Session Video ...

  8. order by使用方法

    1.ORDER BY 中关于NULL的处理 缺省处理,Oracle在Order by 时觉得null是最大值,所以假设是ASC升序则排在最后,DESC降序则排在最前. 当然,你也能够使用nulls f ...

  9. 【高德地图API】如何制作自己的旅游地图?

    原文:[高德地图API]如何制作自己的旅游地图? “旅行的梦想并不遥远,只要一颗流浪四方的心.”——唐人立. 最早认识唐人立的时候,他还是大二的学生.他独自完成了“南京20年规划地图”.几年前,他完成 ...

  10. Swift # Apple Pay集成

    苹果正式开放了Apple Pay支付系统.Apple Pay是一个基于NFC的支付系统,不久将被数以万计的线下零售商店予以支持.即便这项科技并不是彻底的突破性进展,但它足以推动许多公司和零售商来支持这 ...