www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Fehlersuche in AVR Studio


Autor: Nino K. (lnino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi an alle.

Erstmal möchte ich zu dieser umfangreichen Seite gratulieren.

Ich bin bei meinem xmega auf ein Problem gestoßen.

Ich habe als Eingabe zwei Integer Variabeln.
("vorkommaanteil" und "nachkommaanteil").

Anschließend sollen beide Variablen in Float gecastet werden.
Danach wird die Variable "nachkommaanteil" so lange durch 10 dividiert 
bis sie als 0,.... dasteht. Diese Variable wird nun mit der Variable 
"vorkommaanteil" addiert.

Das Ergebnis dieser Addition wird nun in char gecastet um dieses dann 
auf dem Oled Display ausgeben zu können.

Ich habe diesen Code in C++ gut realisieren können.

Wenn ich aber selbiges versuche im AVR Studio zu realisieren, dann 
bekomme ich eine Fehlermeldung von AVR. Es dürfte an der Zeile mit 
"sprintf" liegen, da die Fehlermeldung nicht kommt, wenn ich diese 
auskommentiere.

Anbei habe ich den Code aus dem Visual Studio gepostet und jene aus dem 
AVR Studio.

Visual Studio Beispiel in C:
#include <stdio.h>
#include <iostream>
#include <string>
#include <math.h>
#include <stdlib.h>
using namespace std;

void main(void)
{

  int vorkommaanteil = 12;
  int nachkommaanteil = 34;

  float floatvorkomma,floatnachkomma,summe;

  string sumstring;

  printf("Betrag des Vorkommaanteils ist: %d",vorkommaanteil);
  printf("\nBetrag des Nachkommaanteils ist: %d",nachkommaanteil);

  floatvorkomma = (float)vorkommaanteil; // Cast zur Typkonvertierung von int nach float
  floatnachkomma = (float)nachkommaanteil; // Cast zur Typkonvertierung von int nach float

  // Ausgabe der Variabeln in Float

  printf("\n\nBetrag des Float Vorkommaanteils ist: %f",floatvorkomma);
  printf("\nBetrag des Float Nachkommaanteils ist: %f",floatnachkomma);

  // Die Nachkommazahl wird so lange durch 10 dividiert bis nur mehr 0,.... dasteht

  while(floatnachkomma>=1)
  {
    floatnachkomma=floatnachkomma/10;
  }

  printf("\n\nBetrag von Nachkomma nach Division ist: %f",floatnachkomma);

  // Berechnung der Summe zwischen den beiden Float Variabeln Vorkomma und Nachkomma

  summe=floatvorkomma+floatnachkomma;

  printf("\n\nDie Summe der Float Variabeln ist: %f",summe);
  printf("\n\n");

  char buffer [50];
  sprintf(buffer, "%.3f", summe);

  printf("\n\nBuffer ist: %s",buffer);
  
    system( "pause" );
}

AVR Studio Beispiel in C:
// ======================
#define F_CPU 16000000UL        // Taktfrequenz 16 MHz

// notwendige Includes
#include <avr/io.h>            // AVR spezifisch
#include <avr/interrupt.h>              // AVR spezifisch zum Interrupthandling
#include "clock.h"            // Takteinstellungen für CPUclk
#include "OLED.c"                       // Fkt. des OLED- Display
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
    
// Variabelndeklaration
int vorkommaanteil = 12;
int nachkommaanteil = 34;


int main(void)

{
  clock_init(F_CPU);            // Taktquelle initialisieren
  oled_init();                          // OLED Display initialisieren
  oled_clr();                            // OLED Display löschen

  float floatvorkomma = vorkommaanteil;   // Cast zur Typkonvertierung von int nach float
  float floatnachkomma = nachkommaanteil;  // Cast zur Typkonvertierung von int nach float

  unsigned int temp = nachkommaanteil;  // Ich habe als Variable für die Verweilbedingung einen Integer verwendet, da es bei mir mit float nicht geklappt hat. In C++ geht das seltsamerweise.

  while(temp>=1)              // Die Nachkommazahl wird so lange durch 10 dividiert bis nur mehr 0,.... dasteht
  {
    floatnachkomma=floatnachkomma/10;
    temp=temp/10;
  }

  float summe=floatvorkomma+floatnachkomma;// Berechnung der Summe zwischen den beiden Float Variabeln Vorkomma und Nachkomma

  // Rückkonvertierung der Float Summe in Char, damit diese auf dem OLED Bildschirm ausgegeben werden kann.

    char buffer [50];
  sprintf(buffer, "%fl", summe);
  //oled_print(210,130,buffer,BIG);    // Ausgabe von char auf dem OLED Display

  while(1)                                // Endlosschleife
    {
    
    }
}

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>dann bekomme ich eine Fehlermeldung von AVR.

Welche?

Autor: Nino K. (lnino)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Sorry. Eigentlich hätte ich einen Screenshot angehängt, aber das hat 
irgendwie nicht geklappt.

Wenn ich auf "Build Active Configuration" klicke, dann steht da 0 
Fehler.

Wenn ich aber auf "Build and Run" klicke, dann geht ein Fenster so 
ähnlich wie ein Dateibrowser auf. Da steht oben:

Please browse to the present location for files orignially found at: 
c:\avrdev\gcc\build-avr\gcc

Ordner: Cframe

Ich versuche nochmal den Screenshot anzuhängen.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zwar nicht die Antwort auf Deine Frage, aber die Methode, den 
Nachkommaanteil zu ermitteln, ergibt bei Nachkommavariablen-Wert von 
z.B. 1, 10, 100 oder 1000 immer dieselbe Float, nämlich 0,1.  Ich denke, 
das ist nicht im Sinne des Erfinders.

Was die Fehlermeldung anbelangt, sieht sie mir danach aus, als ob eine 
Datei nicht dort ist, wo sie AVR Studio erwartet.  Also ggfs. AVR Studio 
(oder AVR-gcc) neu installieren.  Aber ich habe nicht wirklich viel 
Erfahrung mit AVR Studio.

Autor: Nino K. (lnino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt, aber für meinen Test ist das im Moment ausreichend.

AVR Studio habe ich schon neu installiert. Kann mir nicht vorstellen, 
dass es am Programm liegt, zumal es ja nur auftritt wenn der "sprintf" 
cast gemacht wird.

Vielleicht gibt es jemanden der viel mit dem AVR Studio zu tun hat.

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kommt das sprintf mit float zurecht?
das "fl" haste in deinem PC-Code nicht, kanns daran liegen?

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> AVR Studio habe ich schon neu installiert.

Die Fehlermeldung betrifft ein gcc-Verzeichnis.  Hast Du WinAVR auch 
nochmal installiert?

Autor: Nino K. (lnino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hc Zimmerer schrieb:
>> AVR Studio habe ich schon neu installiert.
>
> Die Fehlermeldung betrifft ein gcc-Verzeichnis.  Hast Du WinAVR auch
> nochmal installiert?

Ja WinAVR ist auch schon neu installiert.

Flo schrieb:
> kommt das sprintf mit float zurecht?
> das "fl" haste in deinem PC-Code nicht, kanns daran liegen?

Hab auch schon "f" probiert, hat auch nichts geholfen.

Es muss irgendwas mit den Variablen zu tun haben. Habe jetzt einen fixen 
float Wert genommen ohne Berechnung und dieser hat dann mit "sprintf" 
funktioniert.

Autor: SF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es liegt nicht an AVRSTudio sondern am Compiler WinAVR. Bei der 
aktuellen Version ist leider bei ein paar *.a Dateien vergessen worden, 
die Pfadinformationen des Buildsystems, auf dem der Compiler compiliert 
worden ist, zu entfernen: "c:\avrdev\gcc\build-avr\gcc". Anscheinend 
versucht AVRStudio manchmal diese falschen Pfade zu benutzen.

Wenn man nach "c:\avrdev\gcc\build-avr\gcc" in Google sucht so findet 
man entsprechende Artikel auf AVRFreaks. So auch diesen: 
http://www.avrfreaks.net/index.php?name=PNphpBB2&f.... 
Dort ist gegen Ende das Problem beschrieben und es gibt dort auch 
scheinbar eine Lösung dafür.

Autor: Nino K. (lnino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für deine Bemühungen. Ich werde mir gleich den von dir 
geposteten Link studieren.

Autor: Rainer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei der vorletzten Version von WinAVR tritt dieser Fehler nicht auf, 
also ist es die einfachste Lösung, diese statt der aktuellsten zu 
installieren:

http://sourceforge.net/projects/winavr/files/WinAV...

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rainer schrieb:
> Bei der vorletzten Version von WinAVR tritt dieser Fehler nicht auf,
> also ist es die einfachste Lösung, diese statt der aktuellsten zu
> installieren:
>
> 
http://sourceforge.net/projects/winavr/files/WinAV...

Nicht ganz. Bei der letzten Version (20100110 vom 20.01.2010) tritt das 
Problem nur bei einigen wenigen AVR-Typen auf. Bei der vorletzten 
Version (20100110 vom 10.01.2010) bei allen.
Dein Link ist die vorvorletzte Versoin :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.