www.mikrocontroller.net

Forum: Compiler & IDEs Funktion will nicht


Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe mir folgende funktion geschrieben um die LBA werte in die
entsprechenden register der CF karte zu schreiben. Ich habe das ganze
aufm PC in C getestet und ich bekomme die richtigen werte für die
einzelnen register zurück. Wenn ich die funktion aufm AVR laufen lasse,
bekomme ich für bit D23..16 "immer" 0xff obwohl es auf dem PC forher
ging!! Wenn ich in der funktion statt "unsigned long lba" ein
"unsigned long long lba" nehme funktioniert die funktion einwandfrei,
woran kann das liegen??

void read_sector(unsigned long lba)
{

unsigned char temp = 0;

CF_write_register(sec_cnt_reg, 0x01);    //1 Sektor lesen


temp = (unsigned char)lba;        //D7..0
CF_write_register(sec_num_reg, temp);
//lcd_print_int(temp);

temp = (unsigned char)(lba>>8);              //D15..8
CF_write_register(cyl_lo_reg, temp);
//lcd_print_int(temp);

temp = (unsigned char)(lba>>16);      //D23..16
CF_write_register(cyl_hi_reg, temp);
//lcd_print_int(temp);

temp = (unsigned char)(lba>>24);      //D27..24
temp &= 0x0f;                //Nur unteren 4 bits
temp |= 0xE0;                //LBA mode
CF_write_register(head_reg, temp);
//lcd_print_int(temp);
}

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, "unsigned long long lba" bringt keine Compilerfehlermeldung ?
Ansonsten sehe ich eigentlich keinen Fehler, ich hab einen ähnlichen
Code für meinem MP3 Player exakt genauso programmiert wie du :(

Thorsten

Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Es funktioniert jetzt auch mit "volatile unsigned long lba" aber
nicht  mit "unsigned long lba ist das normal??

Genau so ein problem habe ich auch bei "verschachtelten" for
schleifen, die funktionieren nur wenn ich die variablen als "volatile
int" mache

MFG Jörn

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Es funktioniert jetzt auch mit "volatile unsigned long lba"

Was war denn das Problem und welchen Compiler benutzt du ?

Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Ich benutze WIN AVR neuste version, woran es lag keine ahnung nachdem
ich volatile davor geschrieben hab ging es.

Könnte das vielleicht was mit dem Optimization level zu tun haben, der
steht bei mir auf S (optimize for size)

MFG Jörn

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.