首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >avr-gcc重新编译的ledramp示例出现分段错误

avr-gcc重新编译的ledramp示例出现分段错误
EN

Stack Overflow用户
提问于 2012-02-15 21:29:26
回答 2查看 1K关注 0票数 0

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

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

我的命令是:

代码语言:javascript
复制
    make clean
    make
   ./obj-i686-linux-gnu/ledramp.elf

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

代码语言:javascript
复制
 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

错误消息为:

代码语言:javascript
复制
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文件,输出是相同的:

代码语言:javascript
复制
./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

有谁能解释出哪里出了问题吗?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2012-04-06 19:30:56

从这一行的外观看:

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

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

票数 0
EN

Stack Overflow用户

发布于 2017-09-21 15:33:33

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

另一个选择是做'make V=1‘,看看在编译原始ledramp和新版本时有什么不同……最初的版本是由“顶级makefile”构建的,它可能会有细微的不同(比如,也许使用的是gcc vs clang?)。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9294304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档