"avr-objcopy: 'xxx.elf': No such file" Was mache ich falsch

#2696468
Lesenswert?

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.
#2697051
Lesenswert?

#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;
}
Moderator Persönliche Seite #2697131
Lesenswert?

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
Gast #2697763
Lesenswert?

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.
Gast #3161338
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren