Forum: Compiler & IDEs Funktion will nicht


von Jörn (Gast)


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);
}

von Thorsten (Gast)


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

von Jörn (Gast)


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

von Thorsten (Gast)


Lesenswert?

> Es funktioniert jetzt auch mit "volatile unsigned long lba"

Was war denn das Problem und welchen Compiler benutzt du ?

von Jörn (Gast)


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

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
Noch kein Account? Hier anmelden.