Raspberry PI上C语言程序的链接器问题[重复]

问题描述 投票:-1回答:1
我有微控制器ATmega328p和Raspberry PI,我希望对该AVR进行编程。我使用avrdude。

我正在尝试编译并制作十六进制文件,并且遇到大问题。

这里是代码:

#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:”

来自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。我试图编译并制作十六进制文件,并且遇到大问题。这是代码:#...

c raspberry-pi microcontroller avr atmega
1个回答
0
投票
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 ...
© www.soinside.com 2019 - 2024. All rights reserved.