Hallo!
Ich habe hier ein Programm für die serielle Schnittstelle nur leider kann ich es nicht übersetzen, auch wenn ich allen code rauskommentiere. Es erscheint diese Fehlermeldung:
Meine Suchen im Forum ergaben, dass ich vergessen habe eine Datei im Makefile zu linken. Nur welche?Code:Linking: main.elf avr-gcc -mmcu=atmega32 -I. -gdwarf-2 -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.o -std=gnu99 -Wundef -MMD -MP -MF .dep/main.elf.d main.o --output main.elf -Wl,-Map=main.map,--cref -lm c:/programme/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm32.o: In function `__vectors': ../../../../../avr-libc-1.4.6/crt1/gcrt1.S:51: undefined reference to `main' make: *** [main.elf] Error 1
Das ist mein Code:Danke,Code:///////////////////////////////////////////////////////////////////// // Arios: Serial Interface functions // ///////////////////////////////////////////////////////////////////// // Author: Johannes Neumann // // Date of completion: **.**.**** // ///////////////////////////////////////////////////////////////////// // Defines ////////////////////////////////////////////////////////// #include <avr/interrupt.h> #include <avr/io.h> //#include <avr/signal.h> #include <string.h> #define cReadBufferSize 32 #define cWriteBufferSize 512 #define cBlockung 1 #define cNonBlocking 0 #define cTXComplete 1; #define cTXNotComplete 0; // Variables //////////////////////////////////////////////////////// volatile unsigned int TXComplete; volatile unsigned int WritePointer0 = 0, WritePointer1 = 0; volatile unsigned int ReadPointer0 = 0, ReadPointer1 = 0; volatile unsigned char ReadBuffer[cReadBufferSize]; volatile unsigned char WriteBuffer[cWriteBufferSize]; // Init ///////////////////////////////////////////////////////////// void RS232_init(long unsigned int baudrate) { UCSRA = 0x00; UCSRB = (1 << RXCIE) | (1 << RXEN); UCSRC = (1 << UCSZ1) | (1 << UCSZ0) | (1 << URSEL); UBRRH = (((F_CPU/baudrate) >> 4) - 1) >> 8; UBRRL = (((F_CPU/baudrate) >> 4) - 1) & 0xFF; TXComplete = cTXComplete; } // Send ///////////////////////////////////////////////////////////// int RS232_send(char *c, int blocking) { int i; for (i=0; i< strlen(c);i++) { if ((cWriteBufferSize + WritePointer1 - WritePointer0) % cWriteBufferSize > (cWriteBufferSize - 2)) { if (blocking) { while((cWriteBufferSize + WritePointer1 - WritePointer0) % cWriteBufferSize > (cWriteBufferSize - 2)); } else return i; } TXComplete = cTXComplete; asm("cli"); WriteBuffer[WritePointer1++] = c[i]; if (WritePointer1 > cWriteBufferSize - 1) WritePointer1 = 0; asm("sei"); UCSRB = (1<<TXEN) | (1<<UDRIE); } return i; } // Receive ////////////////////////////////////////////////////////// int RS232_receive(char *c, int length, int blocking) { int i; for (i=0; i<length; i++) { if (ReadPointer0 == ReadPointer1) { if (blocking) while(ReadPointer0 == ReadPointer1); else return i; } c[i] = ReadBuffer[ReadPointer1++]; if (ReadPointer1 > cReadBufferSize - 1) ReadPointer1 = 0; } return length; } // Complete? //////////////////////////////////////////////////////// int RS232_WritingComplete(void) { return TXComplete; } // Count of Bytes in ReadBuffer ///////////////////////////////////// int RS232_GetBytesInReadBuffer(void) { return (cReadBufferSize + ReadPointer1-ReadPointer0) % cReadBufferSize; } // Count of Bytes in WriteBuffer //////////////////////////////////// int RS232_GetBytesInWriteBuffer(void) { return (cWriteBufferSize + WritePointer1-WritePointer0) % cWriteBufferSize; } // Interrupt for Reading //////////////////////////////////////////// SIGNAL (SIG_UART_RECV) { ReadBuffer[ReadPointer0++] = UDR; if (ReadPointer0 > cReadBufferSize) ReadPointer0 = 0; } // Interrupt for writing Data into UDR ////////////////////////////// SIGNAL (SIG_UART_DATA) { UDR = WriteBuffer[WritePointer0++]; if (WritePointer0 < cWriteBufferSize - 1) WritePointer0 = 0; if (WritePointer0 == WritePointer1) UCSRB = (1<<TXEN) | (1<<TXCIE); } // Interrupt for setting Complete-Flag ////////////////////////////// SIGNAL (SIG_UART_TRANS) { UCSRB = (1<<RXCIE) | (1<<RXEN); TXComplete = cTXComplete; }
Bääääär







Zitieren

Lesezeichen