【问题标题】:avr-gcc recompiled ledramp example gets segmentation faultavr-gcc 重新编译的 ledramp 示例出现分段错误
【发布时间】:2012-02-15 13:29:25
【问题描述】:

我在 Ubuntu 上安装了 simavr。我安装了以下软件包: avrdude binutils-avr gcc-avr avr-libc gdb-avr libelf-dev libglut3-dev gtkwave build-essential。

我尝试运行 ledramp 示例(simarv 文件夹中的一个示例),工作正常。但是,当我将 board_ledramp 文件夹复制到 board_ledramp2 文件夹时,在 board_ledramp2 文件夹,我重新编译并执行它,我得到了分段错误错误。

我的命令是:

    make clean
    make
   ./obj-i686-linux-gnu/ledramp.elf

make命令后的控制台日志为:

 AVR-CC atmega48_ledramp.c
  1869      32      11    1912     778 atmega48_ledramp.axf
CC ../parts/button.c
CC ledramp.c
LD obj-i686-linux-gnu/ledramp.elf
ledramp done

错误信息是:

Loaded 1850 .text
Loaded 32 .data
firmware atmega48_ledramp.axf f=8000000 mmcu=atmega48
Starting atmega48 - flashend 0fff ramend 02ff e2end 00ff
atmega48 init
Segmentation fault

我尝试使用“file”命令来比较原始的elf文件和 我的elf文件,输出是一样的:

./obj-i686-linux-gnu/ledramp.elf: ELF 32-bit LSB executable, Intel
80386, version 1 (SYSV), dynamically linked (uses shared libs), for
GNU/Linux 2.6.15, not stripped

谁能解释一下出了什么问题?

谢谢!

【问题讨论】:

  • 是simavr崩溃了?在 gdb 中运行它可能会告诉您确切的位置。你有没有设法运行任何其他(更简单的)自编译演示?

标签: avr avr-gcc simavr


【解决方案1】:

从这一行看:

./obj-i686-linux-gnu/ledramp.elf:ELF 32 位 LSB 可执行文件,英特尔

您似乎无意中将程序编译为在主机 PC 上运行,而不是在 AVR 上运行。

【讨论】:

    【解决方案2】:

    @XTL 有一个很好的提示,使用 gdb 运行 ledram.elf 并查看它在哪里崩溃。尽管我试图让示例准备好进行“剪切和粘贴”调整,但我还没有尝试所有方法。

    另一种选择是执行“make V=1”,看看在编译原始 ledramp 和新的 ledramp 时有什么不同......原来的是由“顶级 makefile”构建的,它可能略有不同(比如,也许使用 gcc 与 clang?)。

    一个有用的信息是获取执行 make V=1 时得到的输出,并告诉我们您使用的是什么编译器版本...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多