Forum: Mikrocontroller und Digitale Elektronik Array Problem


von Phasemän (Gast)


Lesenswert?

Hallo,

Ich verwende eine AtMega16 programmiere mit WinAVR.

ich denke das ich ein Problem mit dem Array habe aber schaut mal selbst
darüber.

unsigned long speicherblock = 10;
unsigned char write_ok = 0;
unsigned char wert[512];
wert[0] = 0;
wert[1] = 0;
int einer = 0; // Ändert sich im Programmverlauf
int zehner = 0; // Ändert sich im Programmverlauf

                if ( !(PIND & (1<<1)) ) {
    wert[0] = abt;
    wert[1] = xxy;
    mmc_write_sector(speicherblock, wert);
    }

    if ( !(PIND & (1<<2)) ) {
    mmc_read_sector(speicherblock, wert);
    abt = wert[0];
    xxy = wert[1];
                {


Leider werden die werte nicht wie ich es vorhatte auf die MMC abgelegt
oder ausgelesen, kann mir jemand sagen warum?

Vielen Dank

von Michael Wilhelm (Gast)


Lesenswert?

Du mußt sagen, welcher wert gespeichert oder gelesen werden soll. Z.B
mmc_read_sector(speicherblock, wert[17]);

oder:

for(i=0;i<512;i++)
{
  mmc_read_sector(speicherblock, wert[i]);
}

MW

von Rufus T. Firefly (Gast)


Lesenswert?

@Michael W.:
Liest nicht mmc_read_sector einen vollständigen Sektor in den Speicher
ein?

@Phasemän:
Was sind abt und xxy? Wozu sind die einer und zehner da?

Mal mit 'nem Debugger den Inhalt des Arrays wert angesehen?
Oder mal als Hexdump auf eine serielle Schnittstelle ausgegeben?

von Phasemän (Gast)


Lesenswert?

Hallo,

Stimmt Rufus hat recht mmc_read_sector liest einen follständigen sector
ein.

mmc_read_sector(speicherblock, wert[17]);
dürfte dann nicht funktionieren habe ich aber auch versucht dann
beschwärt sich aber der compiler sofort!

Sorry mein Fehler abt ist einer und xxy ist zehner hab die falschen
kopiert, also

int abt = 0; // Ändert sich im Programmverlauf
int xxy = 0; // Ändert sich im Programmverlauf

<<Mal mit 'nem Debugger den Inhalt des Arrays wert angesehen?
<<Oder mal als Hexdump auf eine serielle Schnittstelle ausgegeben?

Sorry nein, bin anfänger damit komm ich noch gar nich klar, habe aber
festgestellt das es an der speicherung liegt, lade ich denn code ohne
die mmc_read_sector / mmc_write_sector funktioniert die ausgabe. Aber
ich brauch ja die speicherrung

von Phasemän (Gast)


Lesenswert?

Hi,

würde dann der Code so funktionieren oder hab ich da noch nen fehler
drin? Wie gesagt die werte von abt und xxy werden koreckt an wert[0]
und wert[1] übergeben, fehler ist irgendwo bei der speicherrung.

Worauf ich auch noch nicht wirklich eine Antwort gefunden habe ist wie
die Karte nun formatiert werden muss, Fat16 nutze ich ja nicht.

unsigned long speicherblock = 10;
unsigned char write_ok = 0;
unsigned char wert[512];
wert[0] = 0;
wert[1] = 0;
int abt = 0; // Ändert sich im Programmverlauf
int xxy = 0; // Ändert sich im Programmverlauf

                if ( !(PIND & (1<<1)) ) {
    wert[0] = abt;
    wert[1] = xxy;
    mmc_write_sector(speicherblock, wert);
    }

    if ( !(PIND & (1<<2)) ) {
    mmc_read_sector(speicherblock, wert);
    abt = wert[0];
    xxy = wert[1];
                {

Vielen Dank

von T.Stütz (Gast)


Lesenswert?

Da du ein problem mit den routinen mmc_read_sector/mmc_write_sector hast
wäre es schön diese mal zu sehen (meine Glaskugel ist im Urlaub)

Was genau liest du aus ?

Schon mal versucht einen anderen Sektor zu beschreiben (eventuell ist
die MMC auch noch schreibgeschützt) ?

Gruss

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.