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模拟发生的情况,在真实的板子上会不会直接崩溃,我还没试验。
  • 相关阅读:
    软件工程课程总结
    《20171122-构建之法:现代软件工程-阅读笔记》
    课后作业-阅读任务-阅读提问-4
    20171012-构建之法:现代软件工程-阅读笔记
    课后作业-阅读任务-阅读提问-2
    《20170911-构建之法:现代软件工程-阅读笔记》
    OSI七层模型
    团队编程项目作业名称-团队一阶段互评
    结对-结对编程项目作业名称-结对项目总结
    团队-团队编程项目作业名称-开发文档
  • 原文地址:https://www.cnblogs.com/hxwater/p/7616644.html
Copyright © 2011-2022 走看看