我正在尝试编译并制作十六进制文件,并且遇到大问题。
这里是代码:
#include <avr/io.h>
#include <util/delay.h>
int main (void)
{
DDRB |= (1<<PINB0);
while (1){
PORTB |= (1<<PINB0);
_delay_ms(2000);
PORTB ^= (1<<PINB0);
_delay_ms(2000);
}
}
此代码在我的笔记本电脑上的atmel Studio中执行,没有任何问题,但在RPI上我有一个。首先我在控制台中编写以创建.o文件
avr-gcc -Os -mmcu=atmega328p -I/usr/lib/avr/include -c blink.c
然后我想使用以下方式链接到.elf:>
avr-gcc -mmcu=atmega328p -o blink.elf blink.o
但是在这里我得到一个错误“未定义对main的引用”,我正在Internet上查找,但是我没有找到对这个问题的任何响应。我只找到有关“对char或smth的未定义引用”的主题但是我不明白我应该怎么做这个“主要”。对不起,我对linux终端等不了解。我是RPI和Linux的新手,但我确实需要帮助。问候
编辑,
来自SS的代码:
/usr/lib/gcc/avr/5.4.0/../../../avr/lib/avr5/crtatmega328p.o:(.init9+0x0): undefined reference to 'main' collect2: error: ld returned 1 exit status
我有微控制器ATmega328p和Raspberry PI,我希望对该AVR进行编程。我使用avrdude。我试图编译并制作十六进制文件,并且遇到大问题。这是代码:#...
sudo apt-get install avrdude gcc-avr avr-libc
main.c
int main ( void )
{
return 7;
}
avr-gcc -Os -mmcu=atmega328p -I/usr/lib/avr/include so.c -o so.elf
avr-objdump -D so.elf
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 34 00 jmp 0x68 ; 0x68 <__ctors_end>
4: 0c 94 3e 00 jmp 0x7c ; 0x7c <__bad_interrupt>
8: 0c 94 3e 00 jmp 0x7c ; 0x7c <__bad_interrupt>
c: 0c 94 3e 00 jmp 0x7c ; 0x7c <__bad_interrupt>
10: 0c 94 3e 00 jmp 0x7c ; 0x7c <__bad_interrupt>
14: 0c 94 3e 00 jmp 0x7c ; 0x7c <__bad_interrupt>
18: 0c 94 3e 00 jmp 0x7c ; 0x7c <__bad_interrupt>
1c: 0c 94 3e 00 jmp 0x7c ; 0x7c <__bad_interrupt>
20: 0c 94 3e 00 jmp 0x7c ; 0x7c <__bad_interrupt>
24: 0c 94 3e 00 jmp 0x7c ; 0x7c <__bad_interrupt>
28: 0c 94 3e 00 jmp 0x7c ; 0x7c <__bad_interrupt>
2c: 0c 94 3e 00 jmp 0x7c ; 0x7c <__bad_interrupt>
30: 0c 94 3e 00 jmp 0x7c ; 0x7c <__bad_interrupt>
34: 0c 94 3e 00 jmp 0x7c ; 0x7c <__bad_interrupt>
38: 0c 94 3e 00 jmp 0x7c ; 0x7c <__bad_interrupt>
3c: 0c 94 3e 00 jmp 0x7c ; 0x7c <__bad_interrupt>
40: 0c 94 3e 00 jmp 0x7c ; 0x7c <__bad_interrupt>
44: 0c 94 3e 00 jmp 0x7c ; 0x7c <__bad_interrupt>
48: 0c 94 3e 00 jmp 0x7c ; 0x7c <__bad_interrupt>
4c: 0c 94 3e 00 jmp 0x7c ; 0x7c <__bad_interrupt>
50: 0c 94 3e 00 jmp 0x7c ; 0x7c <__bad_interrupt>
54: 0c 94 3e 00 jmp 0x7c ; 0x7c <__bad_interrupt>
58: 0c 94 3e 00 jmp 0x7c ; 0x7c <__bad_interrupt>
5c: 0c 94 3e 00 jmp 0x7c ; 0x7c <__bad_interrupt>
60: 0c 94 3e 00 jmp 0x7c ; 0x7c <__bad_interrupt>
64: 0c 94 3e 00 jmp 0x7c ; 0x7c <__bad_interrupt>
00000068 <__ctors_end>:
68: 11 24 eor r1, r1
6a: 1f be out 0x3f, r1 ; 63
6c: cf ef ldi r28, 0xFF ; 255
6e: d8 e0 ldi r29, 0x08 ; 8
70: de bf out 0x3e, r29 ; 62
72: cd bf out 0x3d, r28 ; 61
74: 0e 94 40 00 call 0x80 ; 0x80 <main>
78: 0c 94 43 00 jmp 0x86 ; 0x86 <_exit>
0000007c <__bad_interrupt>:
7c: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
00000080 <main>:
80: 87 e0 ldi r24, 0x07 ; 7
82: 90 e0 ldi r25, 0x00 ; 0
84: 08 95 ret
00000086 <_exit>:
86: f8 94 cli
00000088 <__stop_program>:
88: ff cf rjmp .-2 ; 0x88 <__stop_program>
rm so.o
rm so.elf
avr-gcc -Os -mmcu=atmega328p -I/usr/lib/avr/include -c so.c
avr-gcc -mmcu=atmega328p so.o -o so.elf
avr-objdump -D so.elf
...
00000080 <main>:
80: 87 e0 ldi r24, 0x07 ; 7
82: 90 e0 ldi r25, 0x00 ; 0
84: 08 95 ret
...