我是汇编器和 atmega128 的新手。
我遇到的问题是我无法编译我的汇编文件。完成此步骤后,我想将程序上传到 STK-300。
这是代码
.include "avr/io.h"
.org 0x0000
rjmp reset
reset:
ldi r16,0xff
out DDRB,r16
loop:
in r16,PIND
ori r16,0b00000010
andi r16,0b11110111
out PORTB,r16
rjmp loop
我尝试用
编译它~ avr-gcc -mmcu=atmega128 -I/usr/lib/avr/include -o main.elf main.S
/tmp/cctvJInM.s: Assembler messages:
/tmp/cctvJInM.s:5: Error: can't open avr/io.h for reading: No such file or directory
现在我已经安装了
avr-gcc
、avr-libc
和binutils-avr
。
我真的不知道如何调试这个。我检查了 avr 目录并找到了文件
~ ls /usr/lib/avr/include/avr/
boot.h ioa6285.h iom168p.h iom32.h iom88pa.h iotn828.h iox256a3.h
builtins.h ioa6286.h iom169a.h iom32hvb.h iom88pb.h iotn841.h iox256a3u.h
common.h ioa6289.h iom169.h iom32hvbrevb.h iom88p.h iotn84a.h iox256c3.h
cpufunc.h ioa6612c.h iom169pa.h iom32m1.h iom8a.h iotn84.h iox256d3.h
crc16.h ioa6613c.h iom169p.h iom32u2.h iom8.h iotn85.h iox32a4.h
delay.h ioa6614q.h iom16a.h iom32u4.h iom8hva.h iotn861a.h iox32a4u.h
eeprom.h ioa6616c.h iom16.h iom32u6.h iom8u2.h iotn861.h iox32c3.h
fuse.h ioa6617c.h iom16hva2.h iom406.h iomx8.h iotn87.h iox32c4.h
interrupt.h ioa664251.h iom16hva.h iom48a.h iomxx0_1.h iotn88.h iox32d3.h
io1200.h ioa8210.h iom16hvb.h iom48.h iomxx4.h iotn9.h iox32d4.h
io2313.h ioa8510.h iom16hvbrevb.h iom48pa.h iomxxhva.h iotnx4.h iox32e5.h
io2323.h ioat94k.h iom16m1.h iom48pb.h iotn10.h iotnx5.h iox384c3.h
io2333.h iocan128.h iom16u2.h iom48p.h iotn11.h iotnx61.h iox384d3.h
...
我尝试使用
.include "avr/iom128.h
包含更具体的头文件(但我真的不知道我到底需要哪一个)。
有人知道问题是什么,或者有任何调试技巧吗?
提前致谢。
avr/io.h
是一个使用 C 预处理器的 C/C++ 头文件,因此使用
#include <avr/io.h>
.include
将使用gas的预处理器,它具有不同的语法并在不同的时间运行(CPP在汇编器之前运行,而gas的则由汇编器本身运行)。
avr-gcc -mmcu=atmega128 -I/usr/lib/avr/include ...
我会删除该包含路径:一个理智的工具链会知道在哪里可以找到它的标头。如果没有找到系统标头,那么您的安装就损坏了。