我正在尝试恢复几年前当 M68HC12 流行时我被迫搁置的项目。我在原型上投资了 1000 美元,所以不想从新芯片重新开始,因为它是一个概念验证项目。
尝试为新的开发笔记本电脑下载 m6811-elf-gcc 的副本是可以的,但是 68HC11 网站 404 的 binutils 补丁程序无法找到,所以我只是从以前的开发笔记本电脑的备份中复制了二进制文件。
我正在运行 SuSE linux LEAP 15.0。gcc 7.4.1 和 2.31.1.20180828-lp150.5.3。
我不断收到'as:无法识别的选项'-m68hc12'',所以我从备份中复制了m6811-elf-as并将其放入路径中。我仍然从as中得到相同的错误。
解码make的输出,我可以看到它正在调用m6811版本:
make -n 给出(部分)... m6811-elf-as -o mcx12.o -m68hc12 -mshort mcxif.s system.s mcx.s clkdrivr.s scidrv.s atddrivr.s main2mcx.s vectors.s 。 ..
但是,当我手动输入与 make 生成的完全相同的行时,它可以在先前 cc'ed 源代码上完美运行,而不会出现“as: unrecognized option '-m68hc12'”错误。
所以 make 说它正在执行该行并出现错误,但手动输入时该行本身不会。
有任何想法吗?
非常感谢任何帮助!
奈杰尔·约翰逊
10 月 15 日更新:我同意你的说法,但我看不出它如何使用 -n 选项输出 m6811-elf-gcc 并且真的被称为!
这是make的输出:
T430:/home/nigel/Project - RPT # make
m6811-elf-gcc -m68hc12 -mshort -g -O3 -fno-ident -fno-common -fomit-frame-
pointer -mrelax -mlong-calls -msoft-reg-count=0 -Wall -c -o main.o
main.c
main.c:102: warning: return type defaults to `int'
main.c: In function `main':
main.c:133: warning: implicit declaration of function `atdinit'
main.c:149: warning: control reaches end of non-void function
as: unrecognized option '-m68hc12'
make: *** [<builtin>: main.o] Error 1
T430:/home/nigel/Project - RPT #
这是make -n:
T430:/home/nigel/Project - RPT # make -n
m6811-elf-gcc -m68hc12 -mshort -g -O3 -fno-ident -fno-common -fomit-frame-pointer -mrelax -mlong-calls -msoft-reg-count=0 -Wall -c -o main.o main.c
m6811-elf-gcc -m68hc12 -mshort -g -O3 -fno-ident -fno-common -fomit-frame-pointer -mrelax -mlong-calls -msoft-reg-count=0 -Wall -c -o tasks.o tasks.c
m6811-elf-gcc -m68hc12 -mshort -g -O3 -fno-ident -fno-common -fomit-frame-pointer -mrelax -mlong-calls -msoft-reg-count=0 -Wall -c -o dtmf.o dtmf.c
m6811-elf-ld -o mcx12.elf -mm68hc12elfb -defsym vectors_addr=0xff80 --relax -L/usr/lib/gcc-lib/m6811-elf/3.3.6-m68hc1x-20060122/m68hc12/mlong-calls/
crt0.o mcx12.o main.o tasks.o dtmf.o -lgcc
m6811-elf-objcopy -O srec --srec-len=32 --change-section-lma .text+0xF0000 --change-section-lma .rodata+0xF0000 --change-section-lma .data+0xF0000 --change-section-lma .vectors+0xF0000 mcx12.elf mcx12.s19
m6811-elf-objdump -S -D mcx12.elf>mcx12.dis
m6811-elf-size mcx12.elf
T430:/home/nigel/Project - RPT #
和我的一个小的汇编文件没有错误的命令:
T430:/home/nigel/Project - RPT # m6811-elf-as crt0.s -m68hc12
T430:/home/nigel/Project - RPT # m6811-elf-as crt0.s -m68hc12
2019 年 10 月 18 日更新:
好的,将其添加到 makefile,现在 makefile 说:
m6811-elf-gcc -v -m68hc12 -mshort -g -O3 -fno-ident -fno-common -fomit-frame-pointer -mrelax -mlong-calls -msoft-reg-count=0 -Wall -c -o main.o main.c
m6811-elf-gcc -v -m68hc12 -mshort -g -O3 -fno-ident -fno-common -fomit-frame-pointer -mrelax -mlong-calls -msoft-reg-count=0 -Wall -c -o tasks.o tasks.c
m6811-elf-gcc -v -m68hc12 -mshort -g -O3 -fno-ident -fno-common -fomit-frame-pointer -mrelax -mlong-calls -msoft-reg-count=0 -Wall -c -o dtmf.o dtmf.c
m6811-elf-ld -o mcx12.elf -mm68hc12elfb -defsym vectors_addr=0xff80 --relax -L/usr/lib/gcc-lib/m6811-elf/3.3.6-m68hc1x-20060122/m68hc12/mlong-calls/ crt0.o mcx12.o main.o tasks.o dtmf.o -lgcc
m6811-elf-objcopy -O srec --srec-len=32 --change-section-lma .text+0xF0000 --change-section-lma .rodata+0xF0000 --change-section-lma .data+0xF0000 --change-section-lma .vectors+0xF0000 mcx12.elf mcx12.s19
m6811-elf-objdump -S -D mcx12.elf>mcx12.dis
m6811-elf-size mcx12.elf
T430:/home/nigel/Project - RPT #
但是:make 的输出现在说:
make
m6811-elf-gcc -v -m68hc12 -mshort -g -O3 -fno-ident -fno-common -fomit-frame-pointer -mrelax -mlong-calls -msoft-reg-count=0 -Wall -c -o main.o main.c
Reading specs from /usr/lib/gcc-lib/m6811-elf/3.3.6-m68hc1x-20060122/specs
Reading specs from /usr/lib/gcc-lib/m6811-elf/specs
Configured with: ./configure --target=m6811-elf --program-prefix=m6811-elf- --enable-languages=c,c++,ada --prefix=/usr --host=i686-linux
Thread model: single
gcc version 3.3.6-m68hc1x-20060122 /usr/lib/gcc-lib/m6811-elf/3.3.6-m68hc1x-20060122/cc1 -quiet -v -D__GNUC__=3 -D__GNUC_MINOR__=3 -D__GNUC_PATCHLEVEL__=6 -Dmc68hc1x -D__mc68hc1x__ -D__mc68hc1x -D__HAVE_SHORT_INT__ -D__INT__=16 -Dmc6812 -DMC6812 -Dmc68hc12 -D__USE_RTC__main.c -quiet -dumpbase main.c -m68hc12 -mshort -mrelax -mlong- calls -msoft-reg-count=0 -auxbase-strip main.o -g -O3 -Wall -version -fno-dent -fno-common -fomit-frame-pointer -o /tmp/cc0exwc0.s
GNU C version 3.3.6-9s12x-20120502 (m68hc11-elf)
compiled by GNU C version 4.5.1 20100924 (Red Hat 4.5.1-4).
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "/usr/lib/gcc-lib/m68hc11-elf/3.3.6-9s12x-20120502/include"
ignoring nonexistent directory "/usr/m68hc11-elf/sys-include"
#include "..." search starts here:
#include <...> search starts here: /usr/m68hc11-elf/include
End of search list.
main.c:102: warning: return type defaults to `int'
main.c: In function `main':
main.c:133: warning: implicit declaration of function `atdinit'
main.c:149: warning: control reaches end of non-void function
as -m68hc12 -mshort -mlong-double -o main.o /tmp/cc0exwc0.
as: unrecognized option '-m68hc12'
make: *** [<builtin>: main.o] Error 1
T430:/home/nigel/Project - RPT #
我将探索那些不存在的目录,看看如果我从备份中复制它们会发生什么:-)