Hallo zusammen Ich arbeite mit AVR-Studio und versuche ein C-Programm auf mein MK2-Board zu flashen. Bei build kommt folgende Fehlermeldung: avr-objcopy: 'xxx.elf': No such file make: *** [xxx.hex] Error 1 Build failed with 1 errors and 0 warnings... Kann mir jemand sagen was ich falsch mache, oder vergessen habe. Vielen Dank im voraus.
Gibt es bei dir einen Quelltext, der xxx.c oder so ähnlich heißt? Ohen mehr Info wird man kaum helfen können: Welche Dateien, wie sieht das Makefile aus...
C. Schneisgen schrieb: > Kann mir jemand sagen was ich falsch mache, oder vergessen habe. Zeig mal das Makefile. Christian
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <time.h> #include <avr\io.h> #include <util\delay.h> #include <string.h> #define F_CPU 3686400 ///////////////////////////////////// //Display Initialisierung// ///////////////////////////////////// void wait_ms(int miliSec) { _delay_loop_2( 1*(F_CPU/(1000/4)) * miliSec; //4 Zyklen Warteschleife = 1ms } void wait_us(int mikroSec) { _delay_loop_2( 1*(F_CPU/(1000000/4)) * mikroSec // 4 Zyklen = 1µs } void lcd_init() { DDRD=0xff; //PORTD als Ausgang PORTD=0; wait_ms(50); //Warten bis Controller bereit PORTD=0x20; //Umschalten auf 4-Bit-Modus sbi(PORTD,3) ; //Schreibsignal enable Impuls cbi(PORTD,3); wait_ms(5); //Zeit zum Umschalten lassen lcd_cmd(0x28); //Ab hier 4-Bit Modus: 2 Zeilen, 5x7 Matrix lcd_off(); lcd_clear(); lcd_cmd(0x06); //Eingabe Modus lcd_on(); } void lcd_send(char data) { char rs=PORTD; //aktuelles RS ermitteln rs&=4; char tmp=data; //oberen Teil senden tmp&=0xf0; tmp|=rs; PORTD=tmp; sbi(PORTD,3); //Schreibsignal cbi(PORTD,3); tmp=data; //unteren Teil senden tmp&=0x0f; tmp*=16 tmp|=rs; PORTD=tmp; sbi(PORTD,3); //Schreibsignal cbi(PORTD,3); wait_ms(1); //verarbeiten lassen } void lcd_cmd(char cmd) { cbi(PORTD,2); //RS löschen = Kommando folgt lcd_send(cmd); //senden } void lcd_clear() { lcd_cmd(0x01); //löscht die Anzeige im Display wait_ms(2); } void lcd_home() { lcd_cmd(0x02); //setzt Cursor auf Position 1,1 wait_ms(2); } void lcd_on() { lcd_cmd(0x0E); //schaltet LCD an } void lcd_off() { lcd_cmd(0x08); //schaltet LCD aus } void lcd_goto(int row, int col) { row--; //Null basierend row&=0x01; //sicherheitshalber row*=40; //Zeile nach BIT 6 bringen col--; //Null basierend col&=0x0f; //sicherheitshalber char tmp=row|col; //Adresse bilden tmp|=0x80; //Cursor setzen lcd_cmd(tmp); //senden } //Display an/aus und Dimmer nicht programmiert //ab hier Schreibbefehle void lcd_write (char text) //Sendet ein Zeichen { sbi(PORTD,2); //RS setzen = Daten lcd_send(text); //senden } void lcd_write(char* pText) //Sendet Zeichenkette, diese muss mit 0x00 abschließen { while(pText[0]!=0) { lcd_write(pText[0]); pText++; } } void lcd_write(char* pText, int Count) //Sendet eine Zeichenkette mit Zähler { while(count!=0) { lcd_write(pText[0]); pText++; count--; } } /////////////////////////////////////// //Display Test-Programm// /////////////////////////////////////// int main (void) { char d=0; wait_ms(200); lcd_init(); while (1) //Hauptschleife { lcd_write("Hallo"); wait_ms(100); } return 0; }
C. Schneisgen schrieb: > #include <stdio.h> Erstens ist das kein Makefile - wie gewünscht - sondern Dein C-Quelltext. > #include <avr\io.h> > #include <util\delay.h> Zweitens benutzt man Slashes, also <avr/io.h> statt Backslashes. > _delay_loop_2( 1*(F_CPU/(1000/4)) * miliSec; //4 Zyklen Warteschleife > = 1ms Drittens multiplizierst du das Ergebnis von _delay_loop_2() mit millisSec - das ist bestimmt nicht das, was Du willst. Was sagt denn Dein Compiler zu dieser Zeile? Viertens solltest Du den Code in [ c ] Code... [ /c ] (ohne die Blanks in den Klammern) einschließen, damit der Source lesbar und vor Umbrüchen geschützt ist. Also, was hier gefragt war, war der Inhalt der Datei "Makefile" in Deinem Projekt-Verzeichnis. Hilfreich wäre auch eine vollständige Angabe aller Fehlermeldungen, die Du bekommst. Welches AVR Studio benutzt Du? 4, 5 oder 6? Gruß, Frank
F_CPU muß vor #include <util\delay.h> kommen. Übrigens ist das kein Makefile :-)
Klaus Wachtler schrieb: > F_CPU muß vor #include <util\delay.h> kommen. hatte nicht weit genug gelesen... Da du F_CPU nur selbst verwendest und nicht in den delay_...()-Funktionen, ist es natürlich egal. Nur: warum nimmst du eigene Funktionen zum Warten? Z.B. _delay_ms ist fertig. Dann allerdings muß #define F_CPU vor dem #include kommen.
C. Schneisgen schrieb: > void lcd_write (char text) //Sendet ein Zeichen > void lcd_write(char* pText) //Sendet Zeichenkette, diese muss mit 0x00 > void lcd_write(char* pText, int Count) //Sendet eine Zeichenkette mit Zum Beispiel: dreimal lcd_write mit drei verschiedenen Parametern und -typen. Das geht nicht! Was du am dringendsten benötigst, ist eine C-Buch. Kein Wunder, wenn der *.elf nicht erzeugt wird. Das passiert erst, wenn dein Quelltext vom Compiler als syntaktisch korrekt erkannt wird.
HildeK schrieb: > Zum Beispiel: dreimal lcd_write mit drei verschiedenen Parametern und > -typen. Das geht nicht! In C++ schon. ;-) Er hat ja nirgends erwähnt, dass das C wäre …
Jörg Wunsch schrieb: > In C++ schon. ;-) Gut, du hast damit zielsicher festgestellt, dass ich von C++ keine Ahnung habe. Das ist auch so! Und auch in C habe ich nicht (sehr) viel Übung. Aber der o.g. Code ist doch astreines C, oder doch nicht?
HildeK schrieb: > Aber der o.g. Code ist > doch astreines C, oder doch nicht? Ich würde sagen, er ist altertümliches (und fehlerhaftes) C, aber astreines C++ (wenngleich natürlich ohne jegliche OO-Nutzung).
Danke! Ich werde bei nächster Gelegenheit das Thema mal mit meinem Sohn (Informatikstudent) diskutieren ...
mal lesen, hat mir geholfen. Einfach Toolchain installieren. avr-toolchain-installer-3.4.2.1573-win32.win32.x86.exe Winavr wird wohl nicht erkannt. (da staunt der Laie, der ich bin. Benutze keine Make-Files, programmiere alle paar Jahre mal, hab dann alles vergessen) This seems to be something that the half-brains at Atmel have gone out of their way to ruin in Studio 4.19. Originally Studio had a mechanism where it would look for an find WinAVR if it was installed. Then Atmel started making a half-baked rip-off of WinAVR called "Toolchain" so they modified Studio so it would look for both (and annoyingly it found their crap in preference to WinAVR). It now appears in 4.19 (which is the latest) that they don't even try to look for WinAVR any more. This just shows how shorted sighted Atmel are. When you create a GCC project now you need to go to Project-Configuration Options then on the 5th tab ("Custom options") set the path to avr-gcc to be /winavr/bin/avr-gcc.exe and the path to "make" to be /winavr/utils/bin/make.exe and THEN you should be able to build OK.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.