Funktion will nicht

Gast #177442
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);
}
Gast #177443
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
Gast #177444
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
Gast #177446
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

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