zoukankan      html  css  js  c++  java
  • arm gdb调试简述

    arm gdb调试简述

    编译、调试工具和平台

    gcc-arm-none-eabi gdb-arm-none-eabi,ubantu64位;网上有很多用nfs或者通过串口连接开发机和板子进行调试;这里用qemu的gnuarmeclipse模拟stm32f429的板子。

    步骤

    • 先在你的Makeflie的编译加上-g,这样生成的ELF文件里才有调试信息,否则只有地址,看不到在源码里的位置。
    • 运行qemu,qemu-system-gnuarmeclipse --verbose --verbose --board STM32F429I-Discovery --mcu STM32F429ZI --gdb tcp::1234 -S -d unimp,guest_errors --image 你的ELF文件.elf --semihosting-config enable=on,target=native --semihosting-cmdline hello_rtos 1 2 3如果没有设置PATH,命令要用绝对路径。
    • qemu启动后等待来自gdb的调试指令,打开另外一个终端窗口,运行arm-none-eabi-gdb ELF文件绝对路径或者再用一个命令file ELF文件绝对路径,在gdb界面内运行:(gdb)target remote localhost:1234
    • 接下来,就进入gdb调试命令的阶段,网上有很多博客,试了几个命令,简单调试了程序,b,c,n,display 变量名。

    在改作业发现的一个问题

    • 很多同学用xQueueCreate创建队列,队列大小很大,然而板子内存有限,故而申请失败,应该只涉及到队列创建失败;但是很多同学疑惑,为什么我和别人写的一样,编译通过,我却灯不亮;进而,我想到是不是一开始就计数错误导致不满足条件;然后就把monitor的其他语句都注释掉,只留下green_led_on();发现灯还是不亮,后面也注意到队列大小值取的太大,但是应该只影响队列失败,而影响不到green_led_on();,后来有一位同学说,他把队列大小改小,灯就亮了。我的直觉是这之间是没有关系,但是我还是试了试,发现果然亮了,于是才想到用gdb调试看看,但是一设置断点,continue,发现就卡死在哪里不动,调试不了,就和程序运行一样直接卡死没反应;我想到这可能类似我在window是开发控制台程序时,当给一个程序不能处理的值,会弹出exe崩溃的对话框,可是linux不是,就卡死在这里。我只能这样想到,队列创建失败导致程序崩溃。或许这只是qemu模拟发生的情况,在真实的板子上会不会直接崩溃,我还没试验。
  • 相关阅读:
    应用程序框架实战十三:DDD分层架构之我见
    Util应用程序框架公共操作类(三):数据类型转换公共操作类(扩展篇)
    Util应用程序框架公共操作类(二):数据类型转换公共操作类(源码篇)
    不能使用 float 和 double 来表示金额等精确的值
    JVM 字节码指令手册
    MyBatis: Invalid bound statement (not found)错误的可能原因
    Oracle:ORA-01219:database not open:queries allowed on fixed tables/views only
    手写 Spring MVC
    8080 端口被占用的解决方法 netstat -ano;taskkill (命令行)
    Java 工具类 IpUtil
  • 原文地址:https://www.cnblogs.com/hxwater/p/7616644.html
Copyright © 2011-2022 走看看